Raspberry PiでIoTなシステム開発:nodeのインストールが楽になった

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: npm where  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: typings Commands:    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: typings Commands:    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""

“””

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です