引越し前のブログにも書いたけど、node.jsの最新バージョンをインストールすると発生するエラー
こんなメッセージ
こいつはnodebrewを使ってインストールしなくても発生してる問題で、nodebrewを使わずインストールする場合は簡単に対処が出来るのだけど、nodebrewの場合どうやって対処するのか調べてみた。
まず、nodebrewを使わずに対処する場合、common.gypiファイルというファイルをnodejsのv0.11.13ディレクトリから見つけて下記パラメータを14行目に追記すればmakeが通るようになる。
'arm_version%' : '1',
じゃあnodebrewの場合はどうやるの?って話になるのだけど
こんなメッセージ
gyp: name 'arm_version' is not defined while evaluating condition 'arm_version==7' in /home/pi/node-v0.11.13/deps/v8/tools/gyp/v8.gyp while loading dependencies of /home/pi/node-v0.11.13/node.gyp while trying to load /home/pi/node-v0.11.13/node.gyp
こいつはnodebrewを使ってインストールしなくても発生してる問題で、nodebrewを使わずインストールする場合は簡単に対処が出来るのだけど、nodebrewの場合どうやって対処するのか調べてみた。
まず、nodebrewを使わずに対処する場合、common.gypiファイルというファイルをnodejsのv0.11.13ディレクトリから見つけて下記パラメータを14行目に追記すればmakeが通るようになる。
'arm_version%' : '1',
じゃあnodebrewの場合はどうやるの?って話になるのだけど
pi@raspberrypi ~/.nodebrew/node $ cd 色々検証してみた結果をメモしておく。
結論だけ見たい時はすっ飛ばして下を見れば良い。
最新バージョンのインストールを試みる
エラーメッセージを見ると.nodebrewディレクトリ直下にsrcというディレクトリがあってその中に落としてきたnode.jsのソースがあるようなのでまずは開いてみる
14行目
'arm_version%' : '1',
この状態で再度nodebrewコマンド実行してみたらやっぱり止まってしまった。
どうやら、毎回落としてダウンロードして解凍でもしてるのか記述した内容を上書きして元の状態に戻してしまうみたい。
って事でnodebrewコマンドが何をやっているのかを見てみる。
幸いnodebrewコマンドはperlで書かれているので読める。
installという文言を検索していくとインストール処理を行っているらしい箇所を発見
88行目
ここでやっている事を手動でやれば、、、ってことで試してみる。
もう一度common.gypiファイルに1行追加
14行目
コマンドを実行していく。
今度はエラーもなく完了した!
さて、4時間待つのか・・・。
さて次の日、会社に来て見てみた結果は。。。
ダメだったorz
SSHが切断されたのが原因なのかな?
途中でmakeが終わってるぽいのと画面が消えちゃってるので何があったのか確かめられない。。。
ってか何かRaspberryPIがおかしい。突然SSHがブチブチ切れる。
こっちの原因も気になるけどとりあえず。。。
ってことで、nodebrewコマンド挙動を書き換える事にした。
.nodebrew/nodebrewを開いてみると毎回ディレクトリ単位で消したあと、ダウンロードして解凍後に実行している事が分かる。
88行目あたり
ならば、と言うことで
とやって、一度綺麗な状態に戻して、arm_versionのエラーで停止させた後
.nodebrew/src/v0.11.13/node-v0.11.13/common.gypi を開いて
'arm_version%' : '1',
を追記。
その後、nodebrewコマンドを書き換える。
上で黄色で示した箇所をコメントアウトする。
再度実行!
出来た。。。疲れた。。。
でも、、まだ終わりじゃないんだな~
続きは来週やな。。
続き
結論だけ見たい時はすっ飛ばして下を見れば良い。
最新バージョンのインストールを試みる
$ nodebrew install v0.11.13
エラー発生{ 'target_defaults': { 'cflags': [],
'default_configuration': 'Release',
'defines': ['OPENSSL_NO_SSL2=1'],
'include_dirs': [],
'libraries': []},
'variables': { 'arm_float_abi': 'hard',
'arm_fpu': 'vfpv3',
'arm_neon': 0,
'arm_thumb': 0,
~ 省略 ~
~ 省略 ~
'v8_random_seed': 0,
'v8_use_snapshot': 'true'}}
creating ./config.gypi
creating ./config.mk
gyp: name 'arm_version' is not defined while evaluating condition 'arm_version==7' in /home/pi/.nodebrew/src/v0.11.13/node-v0.11.13/deps/v8/tools/gyp/v8.gyp while loading dependencies of /home/pi/.nodebrew/src/v0.11.13/node-v0.11.13/node.gyp while trying to load /home/pi/.nodebrew/src/v0.11.13/node-v0.11.13/node.gyp
Error running GYP
/usr/bin/python tools/gyp_node.py -f make
gyp: name 'arm_version' is not defined while evaluating condition 'arm_version==7' in /home/pi/.nodebrew/src/v0.11.13/node-v0.11.13/deps/v8/tools/gyp/v8.gyp
make: *** [out/Makefile] Error 1
エラーメッセージを見ると.nodebrewディレクトリ直下にsrcというディレクトリがあってその中に落としてきたnode.jsのソースがあるようなのでまずは開いてみる
$ cd .nodebrew/src/v0.11.13/node-v0.11.13/
$ ls -l
total 344
-rwxr-xr-x 1 pi pi 498 May 2 00:49 android-configure
-rw-r--r-- 1 pi pi 20562 May 2 00:49 AUTHORS
drwxr-xr-x 10 pi pi 4096 Jul 2 09:37 benchmark
-rw-r--r-- 1 pi pi 61 May 2 00:49 BSDmakefile
-rw-r--r-- 1 pi pi 148883 May 2 00:49 ChangeLog
-rw-r--r-- 1 pi pi 8497 May 2 00:49 common.gypi
-rw-r--r-- 1 pi pi 1695 Jul 2 09:39 config.gypi
-rw-r--r-- 1 pi pi 155 Jul 2 09:39 config.mk
-rwxr-xr-x 1 pi pi 21389 May 2 00:49 configure
-rw-r--r-- 1 pi pi 4616 May 2 00:49 CONTRIBUTING.md
drwxr-xr-x 10 pi pi 4096 Jul 2 09:38 deps
drwxr-xr-x 4 pi pi 4096 Jul 2 09:38 doc
drwxr-xr-x 2 pi pi 4096 Jul 2 09:38 lib
-rw-r--r-- 1 pi pi 39874 May 2 00:49 LICENSE
-rw-r--r-- 1 pi pi 11545 May 2 00:49 Makefile
-rw-r--r-- 1 pi pi 17825 May 2 00:49 node.gyp
-rw-r--r-- 1 pi pi 2395 May 2 00:49 README.md
drwxr-xr-x 3 pi pi 4096 Jul 2 09:38 src
drwxr-xr-x 12 pi pi 4096 Jul 2 09:38 test
drwxr-xr-x 10 pi pi 4096 Jul 2 09:38 tools
-rw-r--r-- 1 pi pi 8077 May 2 00:49 vcbuild.bat
common.gypiがある!ってことでまずは最初に書いたarm_versionうんちゃらを記述する処置を行ってみる。14行目
'arm_version%' : '1',
この状態で再度nodebrewコマンド実行してみたらやっぱり止まってしまった。
どうやら、毎回落としてダウンロードして解凍でもしてるのか記述した内容を上書きして元の状態に戻してしまうみたい。
って事でnodebrewコマンドが何をやっているのかを見てみる。
幸いnodebrewコマンドはperlで書かれているので読める。
installという文言を検索していくとインストール処理を行っているらしい箇所を発見
88行目
sub _cmd_install {
my ($self, $args) = @_;
my $version = $self->find_install_version($args->[0]);
my $tarball_url = $self->get_tarball($self->{tarballs}, $version);
my $src_dir = "$self->{src_dir}/$version";
my $target_name = "node-$version";
my $tarball_path = "$src_dir/$target_name.tar.gz";
$self->clean($version);
mkdir $src_dir;
print "fetch: $tarball_url\n";
$self->{fetcher}->download($tarball_url, $tarball_path)
or error_and_exit("download faild: $tarball_url");
Nodebrew::Utils::extract_tar($tarball_path, $src_dir);
system qq[
cd "$src_dir/$target_name" &&
./configure --prefix="$self->{node_dir}/$version" &&
make &&
make install
];
}
ここでやっている事を手動でやれば、、、ってことで試してみる。
もう一度common.gypiファイルに1行追加
14行目
'arm_version%' : '1',
コマンドを実行していく。
$ cd /home/pi/.nodebrew/src/v0.11.13/node-v0.11.13
$ ./configure --prefix="/home/pi/.nodebrew/node/v0.11.13"
$ make && make install
さて次の日、会社に来て見てみた結果は。。。
ダメだったorz
SSHが切断されたのが原因なのかな?
途中でmakeが終わってるぽいのと画面が消えちゃってるので何があったのか確かめられない。。。
ってか何かRaspberryPIがおかしい。突然SSHがブチブチ切れる。
こっちの原因も気になるけどとりあえず。。。
ってことで、nodebrewコマンド挙動を書き換える事にした。
.nodebrew/nodebrewを開いてみると毎回ディレクトリ単位で消したあと、ダウンロードして解凍後に実行している事が分かる。
88行目あたり
sub _cmd_install {
my ($self, $args) = @_;
my $version = $self->find_install_version($args->[0]);
my $tarball_url = $self->get_tarball($self->{tarballs}, $version);
my $src_dir = "$self->{src_dir}/$version";
my $target_name = "node-$version";
my $tarball_path = "$src_dir/$target_name.tar.gz";
$self->clean($version);
mkdir $src_dir;
print "fetch: $tarball_url\n";
$self->{fetcher}->download($tarball_url, $tarball_path)
or error_and_exit("download faild: $tarball_url");
Nodebrew::Utils::extract_tar($tarball_path, $src_dir);
system qq[
cd "$src_dir/$target_name" &&
./configure --prefix="$self->{node_dir}/$version" &&
make &&
make install
];
}
ならば、と言うことで
$ nodebrew install v0.11.13
.nodebrew/src/v0.11.13/node-v0.11.13/common.gypi を開いて
'arm_version%' : '1',
を追記。
その後、nodebrewコマンドを書き換える。
上で黄色で示した箇所をコメントアウトする。
$self->clean($version);
↓に変更
↓に変更
# $self->clean($version);
-----------------------------------------------------------
$self->{fetcher}->download($tarball_url, $tarball_path)
or error_and_exit("download faild: $tarball_url");
↓に変更
# $self->{fetcher}->download($tarball_url, $tarball_path)# or error_and_exit("download faild: $tarball_url");
----------------------------------------------------------- Nodebrew::Utils::extract_tar($tarball_path, $src_dir);
↓に変更
# Nodebrew::Utils::extract_tar($tarball_path, $src_dir);
$ pi@raspberrypi ~ $ nodebrew ls
v0.10.23
v0.10.24
v0.11.13
current: v0.10.24
$
pi@raspberrypi ~ $
でも、、まだ終わりじゃないんだな~
続きは来週やな。。
続き
コメント