ちょいメモ
Raspberry Pi4のkubernetesクラスタ上にデプロイしているNode-REDのお話です。
functionノードでkakasiを使おうとしましたが、全く動きませんでした。
よくわかりませんが、lib自体が無いので、以下のようにkakasi直下のkakasiディレクトリをlibにリネームしました。
$ kubectl exec -it node-red -- mv /.node-red/node_modules/kakasi/kakasi /.node-red/node_modules/kakasi/lib
あと、x64のkakasiコマンドを内包しているので、ソースコードをダウンロードしてarm64用にコンパイルして入れ替えれば良いです。
$ curl http://kakasi.namazu.org/stable/kakasi-2.3.6.tar.gz > kakasi-2.3.6.tar.gz
$ tar xzvf kakasi-2.3.6.tar.gz
$ cd kakasi-2.3.6/
$ ./configure
$ make
$ kubectl cp src/kakasi node-red:/.node-red/node_modules/kakasi/lib/bin/linux/kakasi
この2つの対策で、functionノードでkakasiが使えるようになります。
node.jsのモジュールは、たまにx64のコマンドをバイナリで内包してラッパーしているだけのものもあるので、アーキテクチャが違う場合はそのコマンドを再コンパイルするかOS上で動くアーキテクチャのものに入れ替える必要があります。
以下の記事でword2vecを利用した際もそうでした。
fileコマンドで調べれば、以下のようにx86-64と出てくるので、Rapberry Piユーザは意識しておくと良いです。
# file kakasi
kakasi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b46c5d9e566b9f8168710ad616e18f60dcf10fed, with debug_info, not stripped
おわり。