npmを使ってScratchをビルドしようとしてエラーになった。根本原因は分からないが、代替え手段としてyarnを使うとビルドが通った。
$ npm --version 5.8.0 $ node --version v10.24.0
2298 verbose stack Error: chromedriver@90.0.1 install: `node install.js` 2298 verbose stack Exit status 1 2298 verbose stack at EventEmitter.<anonymous> (/usr/share/npm/node_modules/npm-lifecycle/index.js:283:16) 2298 verbose stack at EventEmitter.emit (events.js:198:13) 2298 verbose stack at ChildProcess.<anonymous> (/usr/share/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14) 2298 verbose stack at ChildProcess.emit (events.js:198:13) 2298 verbose stack at maybeClose (internal/child_process.js:982:16) 2298 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5) 2299 verbose pkgid chromedriver@90.0.1 2300 verbose cwd /usr/local/scratch/scratch-gui 2301 verbose Linux 5.10.63-v7l+ 2302 verbose argv "/usr/bin/node" "/usr/bin/npm" "i" 2303 verbose node v10.24.0 2304 verbose npm v5.8.0 2305 error code ELIFECYCLE 2306 error errno 1 2307 error chromedriver@90.0.1 install: `node install.js` 2307 error Exit status 1 2308 error Failed at the chromedriver@90.0.1 install script. 2308 error This is probably not a problem with npm. There is likely additional logging output above. 2309 verbose exit [ 1, true ]
他の人のビルド例をみているとyarnを使っているようなので、yarnをrpmで入れてビルドしようとした。が、、
yarn install
と打ち込んだらエラーが出た。これも回避策があるようで、以下で入れ直し
sudo apt remove cmdtest sudo apt remove yarn curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn
yarnでscratchをビルドするとエラーなくビルドが終わり立ち上がった
cd scratch-vm yarn install yarn link cd ../scratch-gui yarn install yarn link scratch-vm
ちなみに、、/usr/bin配下に npmとnodeがないはずだったのだが、上記操作で/usr/bin配下にnpmとnodeが入ったようだ。なぜだろうか。
$ /usr/bin/npm --version 7.7.6 $ /usr/bin/node --version v15.14.0
RPiの別の環境でやったらやはりエラーが出た。多分、node.jsのバージョンが古いからではないかと推測*1
[2/4] Fetching packages... [3/4] Linking dependencies... warning " > scratch-paint@0.2.0-prerelease.20211027080909" has unmet peer dependency "react-intl-redux@^0.7". warning " > scratch-paint@0.2.0-prerelease.20211027080909" has incorrect peer dependency "react-responsive@^4". warning "enzyme-adapter-react-16 > react-test-renderer@16.14.0" has incorrect peer dependency "react@^16.14.0". [4/4] Building fresh packages... [1/3] ⡀ core-js [2/3] ⡀ chromedriver error /usr/local/scratch/scratch-gui/node_modules/chromedriver: Command failed. Exit code: 1 Command: node install.js Arguments: Directory: /usr/local/scratch/scratch-gui/node_modules/chromedriver Output: Only Linux 64 bits supported.
/usr/local/bin配下にnodejsをtarで配置、リトライする
$ node -v v16.13.1
メッセージとして、chromedriverは64bitしかサポートしませんってのが原因ではないか。自分が使ってるラスパイは32bitOSなのだが。
$ uname -a Linux raspberrypi 5.10.63-v7l+ #1496 SMP Wed Dec 1 15:58:56 GMT 2021 armv7l GNU/Linux
エラー無く入ったRPi
$ uname -a Linux raspberrypi 5.10.63-v7l+ #1496 SMP Wed Dec 1 15:58:56 GMT 2021 armv7l GNU/Linux
$ npm -v 8.1.2 $ node -v v16.13.1 $ yarn -v 1.22.17 $ which npm /usr/local/bin/npm $ which node /usr/local/bin/node $ which yarn /usr/bin/yarn
■メモ
指定されているバージョンのchromedriverはリリースされておらずパッケージ不明でビルドがエラーになるので、該当のパッケージはインストールせずにすむよう、ソースを手パッチで変更した。chromedriverをどこで使っているのか分からないのだが、、勉強会で使う範囲であれば問題なく動いているので場当たり的対策だけど、これで「良し」とした。
*1:後記:node.jsのせいではなく、32bit版のChromedriver(chromedriver@90.0.1)がリリースされていないのが原因、古いバージョンを取ってくるようにバージョン表記を変えるか、必須パッケージリストからchromedriverを削除する対応をしないとビルドが通らない