티스토리 뷰

Electron

robot.js + electron 빌드시 오류

심재철 2022. 3. 24. 18:07

electron, electron-builder, robot.js 이 3가지의 버전이 서로 잘 호환이 되지 않아서 골치가 매우 아프다.

 

각 패키지의 업데이트 주기가 달라서 하나가 업데이트 됬을때 다른 패키지들도 같이 업데이트가 되어야하는데 오픈소스 기반이다보니 빠르게 대응이 안되는것같다.

 

결국 개발자가 각 패키지의 호환가능한 버전을 일일이 찾아야하는데 검색해도 호환되는 버전이 어떤 버전인지 정리해놓은곳을 찾을 수가 없었다.

 

아래와 같이 이상한 오류가 난다.

$ electron-builder install-app-deps
  • electron-builder  version=21.2.0
  • loaded configuration  file=package.json ("build" field)
  • rebuilding native dependencies  dependencies=robotjs@0.6.0, fsevents@1.2.13 platform=darwin arch=x64
  • install prebuilt binary  name=robotjs version=0.6.0 platform=darwin arch=x64
  • build native dependency from sources  name=robotjs
                                          version=0.6.0
                                          platform=darwin
                                          arch=x64
                                          reason=prebuild-install failed with error (run with env DEBUG=electron-builder to get more information)
                                          error=prebuild-install info begin Prebuild-install version 5.3.6
    prebuild-install info looking for cached prebuild @ /Users/simsimjae/.npm/_prebuilds/355e17-robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
    prebuild-install http request GET https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
    prebuild-install http 404 https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz
    prebuild-install WARN install No prebuilt binaries found (target=8.5.2 runtime=electron arch=x64 libc= platform=darwin)
    
  • rebuilding native dependency  name=fsevents version=1.2.13
  • rebuilding native dependency  name=robotjs version=0.6.0

electron-builder 20버전대 까지는 이런 오류가 안나는데 21, 22버전대부터는 이런 오류가 발생한다.

https://github.com/octalmage/robotjs/releases/download/v0.6.0/robotjs-v0.6.0-electron-v76-darwin-x64.tar.gz

이 링크가 404라고 하는걸 보니 robotjs 0.6.0에서 애초에 일렉트론 v76을 지원하지 않나보다..

그래서 electron-builder의 버전을 20이하로 낮출수밖에 없는데.. 낮추면 robot.js 0.6.0을 빌드할 수 있게 되긴 한다.

$ electron-builder install-app-deps
  • electron-builder version=20.44.4
  • loaded configuration file=package.json ("build" field)
  • rebuilding native production dependencies platform=darwin arch=x64
  • rebuilding native dependency name=fsevents
  • rebuilding native dependency name=robotjs

이렇게 electron-builder로 일렉트론과 robotjs가 호환가능하게 되었다.

 

근데 또 패키징할때 이상한 에러가 난다.

⨯ error: fork/exec /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine: bad CPU type in executable
path: /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine
args: /Users/simsimjae/Library/Caches/electron-builder/wine/wine-2.0.3-mac-10.13/bin/wine /Users/simsimjae/Library/Caches/electron-builder/winCodeSign/winCodeSign-2.4.0/rcedit-ia32.exe /Users/simsimjae/Desktop/knowledge-shopping-top/dist/win-unpacked/knowledge-shopping-top.exe --set-version-string FileDescription knowledge-shopping-top --set-version-string ProductName knowledge-shopping-top --set-version-string LegalCopyright Copyright © 2022 simsimjae --set-file-version 0.1.9 --set-product-version 0.1.9.0 --set-version-string InternalName knowledge-shopping-top --set-version-string OriginalFilename  --set-version-string CompanyName simsimjae
output: 
error output:
github.com/develar/app-builder/pkg/util.Execute
        /Volumes/data/Documents/app-builder/pkg/util/util.go:61
github.com/develar/app-builder/pkg/wine.execWine
        /Volumes/data/Documents/app-builder/pkg/wine/wine.go:92
github.com/develar/app-builder/pkg/wine.ConfigureCommand.func2
        /Volumes/data/Documents/app-builder/pkg/wine/wine.go:43
github.com/alecthomas/kingpin.(*actionMixin).applyActions
        /Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/actions.go:28
github.com/alecthomas/kingpin.(*Application).applyActions
        /Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:557
github.com/alecthomas/kingpin.(*Application).execute
        /Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:390
github.com/alecthomas/kingpin.(*Application).Parse
        /Volumes/data/go/pkg/mod/github.com/alecthomas/kingpin@v2.2.6+incompatible/app.go:222
main.main
        /Volumes/data/Documents/app-builder/main.go:78
runtime.main
        /usr/local/Cellar/go/1.12.6/libexec/src/runtime/proc.go:200
runtime.goexit
        /usr/local/Cellar/go/1.12.6/libexec/src/runtime/asm_amd64.s:1337
 
Error: /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-bin/mac/app-builder exited with code 1
    at ChildProcess.<anonymous> (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/builder-util/src/util.ts:244:14)
    at Object.onceWrapper (events.js:520:26)
    at ChildProcess.emit (events.js:400:28)
    at maybeClose (internal/child_process.js:1058:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5)
From previous event:
    at processImmediate (internal/timers.js:464:21)
From previous event:
    at WinPackager.signAndEditResources (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:260:158)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:362:21
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:209:16
    at FSReqCallback.oncomplete (fs.js:179:23)
From previous event:
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:360:27
    at Generator.next (<anonymous>)
From previous event:
    at WinPackager.signApp (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/winPackager.ts:354:73)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:250:16
From previous event:
    at WinPackager.doPack (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:167:165)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:113:16
    at Generator.next (<anonymous>)
From previous event:
    at WinPackager.pack (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/platformPackager.ts:111:95)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:430:24
    at Generator.next (<anonymous>)
    at processImmediate (internal/timers.js:464:21)
From previous event:
    at Packager.doBuild (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:396:24)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:366:57
    at Generator.next (<anonymous>)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:143:16
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/graceful-fs/graceful-fs.js:61:14
    at FSReqCallback.oncomplete (fs.js:179:23)
From previous event:
    at Packager._build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:335:133)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:331:23
    at Generator.next (<anonymous>)
    at processImmediate (internal/timers.js:464:21)
From previous event:
    at Packager.build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/packager.ts:288:14)
    at build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/app-builder-lib/src/index.ts:59:28)
    at build (/Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/electron-builder/src/builder.ts:228:10)
    at /Users/simsimjae/Desktop/knowledge-shopping-top/node_modules/electron-builder/src/cli/cli.ts:49:19

에러를 대략 유추해보자면.. electron-builder(20버전대)에서 현재 Mac OS 버전(monteray, 카탈리나 이후부터)와 충돌이 있는듯하다.

https://github.com/electron-userland/electron-builder-binaries/issues/30

근데 이걸 해결할라면 또 electron-builder를 22버전으로 업데이트 해야 한단다 ㅋㅋ

 

근데 electron-builder 22 버전과 robot.js 0.6.0은 같이 쓸 수 없다. 다른 방법을 찾아야겠다. 이거 빌드하자고 Mac OS 버전을 내릴수도 없는 노릇이고 상당히 난감하다.

 

electron 버전과는 딱히 상관없는거같고 electron-builder와 robot.js를 잘 호환시키면 문제가 해결 될 듯 하다.

https://github.com/mapbox/node-pre-gyp/blob/master/lib/util/abi_crosswalk.json

 

abi라는것이 있는데 이게 node.js를 통해 컴파일된 다른 네이티브 모듈을 실행시켜주는 브릿지 역할을 하는것 같다.

그래서 노드 버전과 abi 버전이 일치해야 제대로 빌드가 되는 듯 하다.

 

electron-builder 20버전 이상에서는 robot.js가 절대로 빌드 되지 않는 현상이 발견됬다.

그렇다면 electron-builder를 20버전으로 맞춰놓고 다른 패키지를 여기에 맞추는게 낫겠다.

 

찾아보니까 electron-builder로 빌드 할때 bad cpu type이라는 오류가 발생하는 이유가
If it says something in the lines of Mach-O executable i386: Apple dropped support for 32bit executables with Catalina 10.15.
란다.

 

카탈리나부터 32비트 실행파일에 대한 지원을 중단했다고 한다.

근데 32비트 실행파일이 포함된걸 빌드하려고 하면 오류가 나는 것 같다. 그래서 로컬에서 도커를 깔아서 도커로 빌드를 하라는데.. 무슨 빌드 하나 하자고 그렇게 까지 해야하나 싶다. wine대신 wine64를 써야 한다는데 뭔 소린지 잘 모르겠다.

 

https://github.com/electron/releases

 

GitHub - electron/releases: 📦 Complete and up-to-date info about every release of Electron

📦 Complete and up-to-date info about every release of Electron - GitHub - electron/releases: 📦 Complete and up-to-date info about every release of Electron

github.com

 

여기 들어가보면 일렉트론 버전 별로 어떤 abi가 매칭되어있는지 나와있다.

 

Please upgrade to the latest v23.0.3 for macOS 12.3 support.

또한, Mac OS 몬터레이는 12.3버전인데 이 OS에서 빌드하려면 electron-builder를 23.0.3로 업데이트 해야 한다고 한다.

 

그렇게 삽질 끝에 드디어 빌드 되는 조합을 찾아냈다.

devDependencies
{
    "electron": "6.1.12",
    "electron-builder": "23.0.2",
    "robotjs": "^0.6.0",
}

package.json > scripts
{
    "postinstall": "npm rebuild --runtime=electron --target=6.1.12 --disturl=https://atom.io/download/atom-shell --abi=73",
    "rebuild": "npm rebuild --runtime=electron --target=6.1.12 --disturl=https://atom.io/download/atom-shell --abi=73"
}

node -> 14.19.1
mac -> monterey v12.3

 

근데 일렉트론 버전이 너무 낮아졌다.. 다른 조합도 가능한지 찾아보자.

{
    "electron": "8.5.2",
    "electron-builder": "23.0.2",
    "robotjs": "^0.6.0,
}

package.json > scripts
{
    "postinstall": "npm rebuild --runtime=electron --target=8.5.2 --disturl=https://atom.io/download/atom-shell --abi=76",
    "rebuild": "npm rebuild --runtime=electron --target=8.5.2 --disturl=https://atom.io/download/atom-shell --abi=76"
}

node -> 14.19.1
mac -> monterey v12.3

- 일렉트론: 6.1.12, abi: 73 -> 맥 빌드 성공,

- 일렉트론: 7.3.3, abi: 75 -> 맥 빌드 성공,

- 일렉트론: 8.5.2, abi: 76 -> 맥 빌드 성공, 

 

- 일렉트론: 9.4.4, abi: 80 -> 맥 빌드 실패, 

-> abi 80부터는 robot.js와 호환이 불가한듯하다.

 

결론은 robot.js 를 사용하려면 현재 17버전이 최신인 일렉트론을 8.5.2까지 밖에 못올린다는 얘기다..

그래도 성공한 조합을 찾아서 다행이다.

 

robot.js와 같은 오픈소스를 가져다 사용할때 이게 진짜 큰 문제다. 저걸 만든 개발자도 무료로 만들어 배포하다보니 관리, 유지보수, 업데이트가 잘 되지 않는다. 차라리 개발문화가 오픈소스가 아니라 유료였으면 더 좋았을것같다는 생각도 든다.

 

 

 

 

 

'Electron' 카테고리의 다른 글

electron code signing  (0) 2022.03.25
node-gyp 에러 정리  (0) 2022.03.23
electron auto update 기능 총 정리  (0) 2021.12.13
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함