chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

Scratch 3.0をビルドしてError -> yarn で通った

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を削除する対応をしないとビルドが通らない