LoginSignup
2
1

More than 1 year has passed since last update.

どうしてもラズパイZeroWで最新(v3.4.4)のなでしこ3を動かしたい!

Last updated at Posted at 2023-02-09

発端

 Raspberry Pi ZeroWになでしこ3をインストールする、あるいはarmv6lがサポート外となったv12以降のnode.jsの非公式ビルドをインストールをしてみた件については以前も書きました。

 しかし、それから一年半ほど経過し、なでしこ側の状況も大きく変わっています。
 当時は、node.js v12以上が推奨だったのですが、現在の最新バージョンv3.4.4ではv16以上が必要になっているようです。(2023/2/9現在)

 windows版も、v3.3.3以降、旧バージョンのnodeでは起動出来なくなっちゃっており、当時ワタクシのPCがwin7だったために、これまた苦労したものでした。

 以前はラズパイZeroWに標準で入るnode v10でも、なでしこ3インストール時に赤や黄色のWARNの嵐になりはするものの、ギリ動くことは動いたのですが、おそらく現在はこちらも、v16以上のnodeが入ってないと動かなくなってるものと思われます。

 と言うのも最近、なでしこ公式HPの『ラズパイで動かそう』のページに「Raspberry Pi ZeroWの場合」の但し書きが追加され、node.jsの非公式バイナリをインストールする手順が記載されました。

 でもですよ、「動く場合があります」だって。
 しかも、「残念ながら、筆者の手元では動きませんでした」なのですって!
 しかもしかも、参考サイトとしてワタクシの記事にリンクを張って頂いておるではありませんか!!
 むむぅ、責任を取らなくては・・・

なでしこ以前の準備

 とゆうワケで、一年半ぶりにラズパイZeroWを引っ張り出すw

とりまアップデート

 なにしろまた一年半放置しましたからね。

sudo apt-get update       # パッケージリストの更新
sudo apt-get upgrade      # パッケージのアップグレード
sudo apt-get dist-upgrade # ディストリビューションの更新

VNC

 SSHはつながるのにVNCがつながらないよぅ。なんでだ:persevere:
 VNCサーバ起動し直し。

sudo raspi-config

「Interfacing Options」→「VNC」→「はい」→「了解」

 前は一度起動したらずっとそのままVNC使えてたんですが、今回どうも一回落とすとつながらなくなっちゃってることが時々あるんです。ナゾです。
 SSHは問題ないので、つながらない時は都度起動し直し。いいのかそれで:sweat:
 しかも、この手順を踏んでもつながらない、何度やってもつながらない、って時があるんですよね~。そして、急に何事もなくつながる時もあるとゆう。なんなんだ、この現象:thinking:

とりあえず最新のなでしこを試す

 前回の記事の時にインストールし、現在も入っているなでしこさんは、v3.2.24でした。
 ESModule対応したv3.3.3が大きな転機で、色々変わってるんだよねー。
 とりあえず、お試しでふつーにアップデートしてみたところ、またまたWARNの嵐です。
 v16以上入れろとかv14以上入れろとかv12以上入れろとかとか色々言っています。
 でも、入ることは入った。そして、前はそれで動くことは動いたんだよねー。

cnako3 -v

 ぽちっとな。

# Fatal error in , line 0
#

#
# Fatal error in , line 0
# Liftoff bailout should not happen. Cause: Armv6 not supported

#
#
#
#FailureMessage Object: 0xb61fe268
Trace/breakpoint trap

 わあぁ、やっぱダメだ~:sob:

node -v
→v16.5.0
npm -v
→v7.19.1

 えーっ、入ってるのにぃ。非公式だけど。

 でも、そういえば以前この非公式ビルドをインストールしてみたのはちょっとした自己満足で、なでしこ自体は簡単インストールコマンドで普通にインストールしただけだった。
 ですから、アップデートもその際にインストールされたnode v10.24.1、npm v6.14.12を参照していてWARNが出ていたものと思われます。

 一回アンインストールしちゃう。

# なでしこのアンインストール
sudo npm uninstall -g nadesiko3

# Node.jsのアンインストール
sudo apt remove nodejs npm

 今入ってる非公式バイナリも一回削除して、また1からやってみることにします。

# 非公式バイナリを手動で削除
rm -r /usr/local/lib/nodejs/node-v16.5.0-linux-armv6l

公式ページの手順でインストールしていきますよ

 node.jsをパッケージではなくバイナリでインストールする手順について、前回の記事ではnodejsのhelpのwikiの記載を見ながら進めましたが、今回は全てなでしこさん公式ページの『ラズパイで動かそう』の手順に沿って1からやっていきます。

バージョンを指定

 今は推奨版が18.14.0、最新版が19.6.0とゆうコトらしいけど、とりあえず16あればいいようなので、ムリせず以前と同じ16.5.0を入れることにしておく。
 環境変数に入れて後のコマンドで使います。

# バージョンを指定
VERSION=v16.5.0
DISTRO=linux-armv6l

パッケージのインストール?

 この後、なでしこさんHPの手順によれば、パッケージのインストールを行うことになっているけど、これは果たして必要ですかね? 別にコレをアップデートするわけじゃないしね。
 なでしこのためにここではじめてnode.jsをインストールするとか、なでしこでしかnode.js使わないとかゆうワタクシのような人には不要な気がします。
 とゆうワケで、飛ばしちゃった。
 はやくも手順通りじゃないぜ💧

非公式ビルドのインストール

# ダウンロード
sudo wget https://unofficial-builds.nodejs.org/download/release/$VERSION/node-$VERSION-$DISTRO.tar.gz

# 解凍してコピー
tar -zxvf ./node-$VERSION-$DISTRO.tar.gz
sudo mv ./node-$VERSION-$DISTRO /usr/local/lib/nodejs

 コピペすればカンタンです☆
 公式ページからのコピペで問題なく進められます。

設定を更新

 あれ? どうやら、ちょっとパスが違ってますね。
 上記コマンドで、バイナリは/usr/local/lib/nodejs/node-v16.5.0-linux-armv6l/にインストールされているので、その中のbinに通します。

# 設定を更新
echo "export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH" >> ~/.profile
echo "" >> ~/.profile
source ~/.profile

 それにしても、ファイルマネージャからテキストエディタで開いて編集してたけど、コレで書き込めるんですね。しゅごい☆

てすと

node -v
→v16.5.0
npm -v
→7.19.1

 おっけー☆

なでしこさんのインストール

# なでしこ3をインストール
npm -g install nadesiko3

 sudoは付けません。
 これで、非公式バイナリがインストールされたnode-v16.5.0-linux-armv6lのnode_modulesのなかにnadesiko3がインストールされました。
 おおお、いっこもエラー出ないでインストールされたよ~!(感動)

 ところが!!!
 cnako3ができません! やっぱりさっきのエラーです:sob:

# Fatal error in , line 0
# Liftoff bailout should not happen. Cause: Armv6 not supported

 0行目で致命的なエラーだって!
 リフトオフ救済ってなんなんだよ、ぐーぐる翻訳さん?!
 とりあえずArmv6 はサポートしてないよ! と言ってるラシイ。
 知ってますよ~。そこをなんとかたのむ~~~:pray:

オプションで回避する

 そこをなんとかたのむオプションがあるようです!

 nodeに--no-expose-wasmを付けて起動することで回避出来るらしい。
 やってみます!

cd ../../usr/local/lib/nodejs/node-v16.5.0-linux-armv6l/bin/
node --no-expose-wasm cnako3 -v
→v3.4.4

 できました! やったね!!
 ・・・無理矢理系過ぎますけれどね:sweat_smile:

cnako3 で起動出来るようにする

 やっぱ、cnako3だけで起動したいよね、当然。
 上記参考サイトによれば、一行目の#!/usr/bin/env node#!/usr/bin/env -S node --no-expose-wasmに変更して出来たとあるのですが・・・

 cnako3の一行目をそのように変更してみたところ、/usr/bin/envSなんてオプションはない! と怒られてしまいました。
 -Sを外してみたところ今度は、node --no-expose-wasmなんてファイルもフォルダもない! と怒られてしまいます。
 --no-expose-wasmがnodeのオプションとしてではなく、node --no-expose-wasmとゆう一個の名称として扱われてしまうラシイ。なにゆえに~。しくしくしく。

 と、ここで!
 モノスゴク役立つ記事をQiitaで発見。

 やはり、これは環境依存で、Linux上では第一引数の後ろは全て第二引数としてまとめられてしまうとゆうことらしい。
 そして、それを回避するための知恵が書かれております! 神だね!!

 これでいけそう?

#!/bin/sh 
":" //# ; exec /usr/bin/env node --no-expose-wasm "$0" "$@"

 非公式バイナリをインストールしたフォルダのbinフォルダの中にあるcnako3の一行目、#!/usr/bin/env nodeを消して、上の記述に置き換えます。
 結局やっぱりファイルマネージャからテキストエディタで開いて編集www

 さてさてどうでしょう?

cnako3 -v
→v3.4.4

cnako3 -e "「こんにちは」と表示。"
→こんにちは

cnako3 -e "ナデシコバージョンを表示。"
→3.4.4

 できました!!!

エディタも使えるようにする

 あんま使わなそうですが、nako3editnako3serverの一行目も同様に書き換えます。
 これで、簡易サーバが起動して、node版のエディタ、web版のエディタがそれぞれちゃんと開きました。

 やったね☆

 ところが!
 web版のほうはちゃんとデモも実行されたのですが、node版の方は実行ボタンを押したらエラーが!
 どうやら実行ボタンを押すとフルパスでnode cnako3 nako3ファイルを実行するコトになってるみたいなのねん。このnodeの部分にも件のオプションを付けてやらなければならないようです。
 捜索した結果、nako3editの217行目、

    const cmd = `"${NODE}" "${CNAKO3}" "${fullpath}"`

 を

    const cmd = `"${NODE}" --no-expose-wasm "${CNAKO3}" "${fullpath}"`

 に書き換えたら、実行できました!!
 やったね!!!

おわります

 ラズパイZeroWでも、非公式バイナリを使用して、最新のなでしこが動くことを確認できました!
 わーいわーい♪♪♪

 もし、うまくいかない場合は、インストール先(手順通りなら/usr/local/lib/nodejs/node-v16.5.0-linux-armv6l/にnodeがインストールされ、その中のlib/node_modulesの中にnadesiko3がインストールされています)や、ちゃんとパスが通っているか(ルートからnode -vして、v16.5.0が出る)を確認。
 特に、他バージョンのnodeが混在してる場合は、ちゃんとv16のでcnako3を開けているかを確認。
binの中のcnako3を書き換えた呪文に誤りが無いかを確認。

 そんなところでしょうかねー?
 もしこれで動いた! とか動かねえ!! とかあれば、コメントでもなでしこの掲示板でもお寄せください。
 なんとかなるとも限りませんが、自分とこ以外の状況を知れると、役立つこともあったりなかったりするよねー。
 もちろん、もっと賢い知恵をお持ちの方がいらっしゃれば、教えて頂きたく思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1