Raspberry PiでIoTなシステム開発: Raspberry Pi にバイナリでNode.jsをインストールしばらく前に公式サイトからnodeのARM用バイナリが提供されなくなり、ネットでバイナリを探してインスト−ルをしていました。が、遂に公式でのARM用バイナリの配布が再開されたようです。それもv6/v7/v8も、4系も5系もとう大盤振る舞い。Download | Node.jsせっかくなのでこれを使ってインストールできるか試してみることにします。公式でのディレクションはcurlで直接nodeをインストールしていますが、まだ4系、5系のどちらを使うか決めていないので、nvmを使ってインストールして、後からバージョンを切り替えられるようにします。Jessieだとcurlはあえてインストールしなくても最初から使えました。
pi@raspberrypi:~ $ curlcurl: try 'curl --help' or 'curl --manual' for more informationpi@raspberrypi:~ $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 7766 100 7766 0 0 3738 0 0:00:02 0:00:02 --:--:-- 3740=> Downloading nvm from git to '/home/pi/.nvm'=> Cloning into '/home/pi/.nvm'...remote: Counting objects: 4402, done.remote: Compressing objects: 100% (3/3), done.remote: Total 4402 (delta 0), reused 0 (delta 0), pack-reused 4399Receiving objects: 100% (4402/4402), 1.10 MiB | 562.00 KiB/s, done.Resolving deltas: 100% (2582/2582), done.Checking connectivity... done.* (detached from v0.31.0) master=> Appending source string to /home/pi/.bashrc=> Close and reopen your terminal to start using nvmpi@raspberrypi:~ $ nvm-bash: nvm: command not found
パスが反映されていないようで、そのままだと実行できません。sourceすればいいと思いますが、ここはログインしなおしました。
pi@raspberrypi:~ $ nvmNode Version ManagerNote: refers to any version-like string nvm understands. This includes: - full or partial version numbers, starting with an optional ""v"" (0.10, v0.1.2, v1) - default (built-in) aliases: node, stable, unstable, iojs, system - custom aliases you define with `nvm alias foo`Usage: nvm help Show this message nvm --version Print out the latest released version of nvm nvm install [-s] Download and install a , [-s] from source. Uses .nvmrc if available --reinstall-packages-from= When installing, reinstall packages installed in <node|iojs|node version="" number=""> nvm uninstall Uninstall a version nvm use [--silent] Modify PATH to use . Uses .nvmrc if available nvm exec [--silent] [] Run on . Uses .nvmrc if available nvm run [--silent] [] Run `node` on with as arguments. Uses .nvmrc if available nvm current Display currently activated version nvm ls List installed versions nvm ls List versions matching a given description nvm ls-remote List remote versions available for install nvm version Resolve the given description to a single local version nvm version-remote Resolve the given description to a single remote version nvm deactivate Undo effects of `nvm` on current shell nvm alias [] Show all aliases beginning with nvm alias Set an alias named pointing to nvm unalias Deletes the alias named nvm reinstall-packages Reinstall global `npm` packages contained in to current version nvm unload Unload `nvm` from shell nvm which [] Display path to installed node version. Uses .nvmrc if availableExample: nvm install v0.10.32 Install a specific version number nvm use 0.10 Use the latest available 0.10.x release nvm run 0.10.32 app.js Run app.js using node v0.10.32 nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32 nvm alias default 0.10.32 Set default node version on a shellNote: to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)pi@raspberrypi:~ $ nvm --version0.31.0</node|iojs|node>
バージョンもヘルプも表示されます。さっそくnvmを使ってnodeをインストールします。「5系の最新」という指定の方法が分かりませんでしたのでバージョン番号を指定しました。ヘルプからするとv5と指定するだけでよかったんでしょうか。
pi@raspberrypi:~ $ nvm install v5.7.1Downloading https://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-armv7l.tar.xz...######################################################################## 100.0%Now using node v5.7.1 (npm v3.6.0)Creating default alias: default -> v5.7.1pi@raspberrypi:~ $ node> (To exit, press ^C again or type .exit)> pi@raspberrypi:~ $ node -vv5.7.1
コンソールから実行してみます。
pi@raspberrypi:~ $ node > console.log(""hello world"");hello worldundefined> (To exit, press ^C again or type .exit)>
ちゃんとJavascriptを解釈してくれたようです。インストールパスを知りたかったのですが、nvmのコマンドでは分からないようでした。findして実体を探してみると、piでインストールしているのでpiのホームに入るのですね。当たり前か。
pi@raspberrypi:~ $ nvm ls-> v5.7.1default -> v5.7.1node -> stable (-> v5.7.1) (default)stable -> 5.7 (-> v5.7.1) (default)iojs -> N/A (default)pi@raspberrypi:~ $ find ~/ -name ""node"" -ls125874 4 drwxr-xr-x 2 pi pi 4096 Mar 4 09:40 /home/pi/.nvm/test/installation/node129143 4 drwxr-xr-x 3 pi pi 4096 Mar 4 09:43 /home/pi/.nvm/versions/node128984 4 drwxr-xr-x 2 pi pi 4096 Mar 3 07:16 /home/pi/.nvm/versions/node/v5.7.1/share/doc/node128988 22080 -rwxr-xr-x 1 pi pi 22608862 Mar 3 07:16 /home/pi/.nvm/versions/node/v5.7.1/bin/node128992 4 drwxr-xr-x 4 pi pi 4096 Mar 3 07:17 /home/pi/.nvm/versions/node/v5.7.1/include/nodepi@raspberrypi:~ $ find ~/ -name ""nvm.sh"" -ls124544 72 -rwxr-xr-x 1 pi pi 72916 Mar 4 09:40 /home/pi/.nvm/nvm.sh
よし、次はnpmのインストールだ!と意気込んだのですが、既にインストール済みでした。nodeと一緒に入るのですね。osxでインストーラーを実行した時みたい。
pi@raspberrypi:~ $ npmUsage: npmwhere is one of: access, add-user, adduser, apihelp, author, bin, bugs, c, cache, completion, config, ddp, dedupe, deprecate, dist-tag, dist-tags, docs, edit, explore, faq, find, find-dupes, get, help, help-search, home, i, info, init, install, install-test, issues, it, la, link, list, ll, ln, login, logout, ls, outdated, owner, pack, ping, prefix, prune, publish, r, rb, rebuild, remove, repo, restart, rm, root, run-script, s, se, search, set, show, shrinkwrap, star, stars, start, stop, t, tag, team, test, tst, un, uninstall, unlink, unpublish, unstar, up, update, upgrade, v, verison, version, view, whoaminpm -h quick help on npm -l display full usage infonpm faq commonly asked questionsnpm help search for help on npm help npm involved overviewSpecify configs in the ini-formatted file: /home/pi/.npmrcor on the command line via: npm --key valueConfig info can be viewed via: npm help confignpm@3.6.0 /home/pi/.nvm/versions/node/v5.7.1/lib/node_modules/npmpi@raspberrypi:~ $ npm --version3.6.0
あまりにもすんなり行きすぎて何か寂しい感じがします。もっと苦戦しないと記事にする意味がないなー。(2016/03/05追記)早速ですが困ったことが発生してくれました(??)ので、追記です。上記の方法でインストールすると、nvmが/home/piにインストールされて、nodeはその配下にインストールされます。が、これだとsudoで使用する事ができません。これができないとハードウェアアクセスが必要なモジュールを使ったり、ウェルノウンポートをリスンさせられなくなります。
pi@raspberrypi:~ $ sudo nvmsudo: nvm: command not found
スーパーユーザーの環境変数にpiへのパスを追加してもいいのだと思いますが、非特権ユーザーへのパスを通すのもなんだかおかしな感じです。そこでグローバルにnvmをインストールしてみることにしました。同じ事を考える人はいるもので、パッケージ化してくれています。GitHub – xtuple/nvm: Easily setup NVM globally for rooted, multi-user, or CI environments
pi@raspberrypi:~ $ wget -qO- https://raw.githubusercontent.com/xtuple/nvm/master/install.sh | sudo bashCloning into '/usr/local/nvm'...remote: Counting objects: 826, done.remote: Total 826 (delta 0), reused 0 (delta 0), pack-reused 826Receiving objects: 100% (826/826), 141.80 KiB | 26.00 KiB/s, done.Resolving deltas: 100% (387/387), done.Checking connectivity... done.NVM installedpi@raspberrypi:~ $ sudo nvmNode Version ManagerUsage: nvm help Show this message nvm install [-s] Download and install a nvm uninstall Uninstall a version nvm use Modify PATH to use nvm run [] Run with as arguments nvm ls List installed versions nvm ls List versions matching a given description nvm ls-remote List remote versions available for install nvm deactivate Undo effects of NVM on current shell nvm alias [] Show all aliases beginning with nvm alias Set an alias named pointing to nvm unalias Deletes the alias named nvm copy-packages Install global NPM packages contained in to current versionExample: nvm install v0.4.12 Install a specific version number nvm use 0.2 Use the latest available 0.2.x release nvm run 0.4.12 myApp.js Run myApp.js using node v0.4.12 nvm alias default 0.4 Auto use the latest installed v0.4.x version
早速これを使ってインストール。sudoでnode呼べました。
pi@raspberrypi:~ $ sudo nvm install v5######################################################################## 100.0%Checksums emptyNow using node v5.7.1pi@raspberrypi:~ $ lsinit-functions kt node_modules ts wiringPipi@raspberrypi:~ $ ls -laFtotal 100drwxr-xr-x 8 pi pi 4096 Mar 5 09:10 ./drwxr-xr-x 3 root root 4096 Feb 2 20:52 ../-rw------- 1 pi pi 20462 Mar 5 09:05 .bash_history-rw-r--r-- 1 pi pi 220 Mar 4 17:42 .bash_logout-rw-r--r-- 1 pi pi 3610 Mar 4 17:42 .bashrcdrwx------ 3 pi pi 4096 Mar 5 08:43 .config/-rw-r--r-- 1 pi pi 6148 Mar 5 07:19 .DS_Store-rw-r--r-- 1 pi pi 362 Mar 4 17:42 .ftpconfig-rwxr-xr-x 1 pi pi 11506 Mar 4 17:44 init-functions*drwxr-xr-x 3 pi pi 4096 Feb 11 22:54 kt/drwxr-xr-x 2 pi pi 4096 Mar 5 08:38 node_modules/-rw-r--r-- 1 pi pi 27 Mar 4 17:42 .node_repl_historydrwxr-xr-x 253 pi pi 12288 Mar 5 08:42 .npm/-rw-r--r-- 1 pi pi 675 Mar 4 17:44 .profiledrwxr-xr-x 4 pi pi 4096 Mar 5 08:46 ts/drwxr-xr-x 10 pi pi 4096 Feb 11 11:43 wiringPi/pi@raspberrypi:~ $ node -vv5.7.1pi@raspberrypi:~ $ sudo node -vv5.7.1
(2016/03/05 更に問題発生で更に追記)npmでインストールしたコマンド(ここではtypings)を実行しようとしたら、not foundになりました。ユーザー領域にインストールした場合には最初からパスが通っていたのですが、グローバルインストールだと自分で設定しないといけないようです。piのために設定する場合はこのとおり。
pi@raspberrypi:~ $ export PATH=$PATH:`npm bin -g`(not in PATH env variable)pi@raspberrypi:~ $ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/usr/local/nvm/v5.7.1/binpi@raspberrypi:~ $ typingsUsage: typingsCommands: bundle, i, in, init, install, la, list, ll, ls, r, remove, rm, search, uninstalltypings -h Get help for typings --no-insight Disable insights for typings --version Print the CLI versiontypings --cache Print the path to the cache directorytypings@0.6.9 /usr/local/nvm/v5.7.1/lib/node_modules/typings
ただこれだとログアウトする度に消えてしまうので、/etc/profileに追記します。
pi@raspberrypi:~ $ sudo nano /etc/profile
途中の所のパスの設定部分でもいいと思いますが、追記したことがわかりやすいように末尾にしました。
PATH=$PATH:/usr/local/nvm/v5.7.1/binexport PATH
root用はこちら。exportで追加する方法が分かりませんでした。visudoでnanoが起動するので追記します。
pi@raspberrypi:~ $ sudo visudopi@raspberrypi:~ $ sudo sh -c 'echo $PATH'/usr/local/nvm/v5.7.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binpi@raspberrypi:~ $ sudo typingsUsage: typingsCommands: bundle, i, in, init, install, la, list, ll, ls, r, remove, rm, search, uninstalltypings -h Get help for typings --no-insight Disable insights for typings --version Print the CLI versiontypings --cache Print the path to the cache directorytypings@0.6.9 /usr/local/nvm/v5.7.1/lib/node_modules/typings
visudoではsecure_pathのところにパスを追記しています。
## This file MUST be edited with the 'visudo' command as root.## Please consider adding local content in /etc/sudoers.d/ instead of# directly modifying this file.## See the man page for details on how to write a sudoers file.#Defaults env_resetDefaults mail_badpassDefaults secure_path=""/usr/local/nvm/v5.7.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin""
“””