前の関連記事:linuxBean14.04(106)Bloggerに貼りつけたIPython Notebookの枠がはみ出る問題を修正
久しぶりにlinuxBean14.04(9)node.jsとBracketsのインストールのnvmでnode.jsをインストールしようと思ったらできませんでした。あれこれ調べると原因はダンロード元がHTTPSになっていることにあるようでした。
(2016.5.19追記。さらに調べるとAnacondaのcurlへパスが切り替わっていたのが根本原因でした。記事の最終章参照。)
nvm install stableができない
pq@HP6730b1:~$ nvm install stable Version 'stable' not found - try `nvm ls-remote` to browse available versions. pq@HP6730b1:~$ nvm ls-remote N/Anvm install stableとするとstableバージョンはない、といわれ、nvm ls-remoteとするとインストールできるバージョンはない、といわれます。
`nvm ls-remote` returns N/A prior to v0.17.3 · Issue #554 · creationix/nvm · GitHub
2014年10月21日nodejs.orgがHTTPからHTTPSに変更したのが原因のようです。
Issues · creationix/nvm · GitHub
nvmの開発者のGitHubにはこれに関する議論が載っています。
HTTPS certificate for latest.nvm.sh · Issue #614 · creationix/nvm · GitHub
nvmが使っているのフリーのURL redirecting serviceの関係でHTTPSへの対応が難しいようです。
2015年5月にlinuxBean14.04(9)node.jsとBracketsのインストールでnvm v0.25.1をインストールした時はとくに対策しなくてもnvm install stableができたので、その後またサーバー側の仕様変更があったようです。
対策1: nodejs.orgのHTTPのミラーサーバーを使う方法
nvm v0.17.3以降ではこの対策として環境変数のNVM_NODEJS_ORG_MIRRORを設定してHTTPのミラーサーバーからの取得に変更する方法があります。
export NVM_NODEJS_ORG_MIRROR="http://nodejs.org/dist" nvm install stableまたは
NVM_NODEJS_ORG_MIRROR=http://nodejs.org/dist nvm install stableこのいずれの方法でもnvm install stableができました。
ちなみに`nvm ls-remote` returns N/A prior to v0.17.3 · Issue #554 · creationix/nvm · GitHubの最初にでてくる方法ではexport NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"となっていて、ミラーサーバーがHTTPになっていないためにうまくいきません。
この方法で問題は解決はするのですが、HTTPのミラーサーバーがいつまで継続されるのか不安だったので同じページの下の方に書いてあるもうひとつの方法を採用することにしました。
対策2: curlでUbuntuパッケージのCA証明書を使う方法
HTTPSのサーバーにアクセスするためには認証局(CA)の証明書があればよいのでUbuntuパッケージにある証明書を使います。
Synapticパッケージマネージャでca-certificatesを検索するとすでに3つのパッケージがインストールされていました。
使用するファイルは/etc/ssl/certs/ca-certificates.crtです。
これらのパッケージのプロパティのインストール済みファイルをみても/etc/ssl/certs/ca-certificates.crtは見つかりませんでしたが、ファイルはすでにインストール済でした。
curlでの設定方法が載っているのでまずcurlをインストールします。
7.35.0をインストールしました。
(2016.5.19追記。最後に書いているようにこのcurlのインストールは今回の問題解決には不要な手順です。)
環境変数でcurlにCA証明書のある場所を知らせます。
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt~/.bashrcの最後の行にこの1行を追加して保存します。
Terminalを起動します。
これでnvm install stableが実行できnode v6.0.0がインストール出来ました。
nvmのアンインストールと再インストール
この機会にnvmをアップグレードすることにしました。
アップグレードする方法はインストールと同じです、、、
ところが最初のインストール時にgitをインストールしておらず、nvmインストール後にgitをインストールした場合エラーがでてアップグレードできません。
これは既知の問題でまだ対策されていないようなので、nvmを再インストールすることにしました。
まずはnvmのアンイストールです。
How to uninstall nvm? · Issue #298 · creationix/nvm
アンインストールは~/.nvmを削除すればnode.jsを含めてまるごとアンインストールされます。
rm -rf $NVM_DIR
ところが最初のインストール時にgitをインストールしておらず、nvmインストール後にgitをインストールした場合エラーがでてアップグレードできません。
pq@pq-VirtualBox:~$ nvm --version 0.25.1 pq@pq-VirtualBox:~$ 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 Speed 100 7766 100 7766 0 0 12861 0 --:--:-- --:--:-- --:--:-- 13482 => Downloading nvm from git to '/home/pq/.nvm' => fatal: destination path '/home/pq/.nvm' already exists and is not an empty directory. fatal: Not a git repository (or any of the parent directories): .git fatal: Not a git repository (or any of the parent directories): .git => Source string already in /home/pq/.bashrc => Close and reopen your terminal to start using nvminstall script `git` detection should also check for `.git` · Issue #1028 · creationix/nvm
これは既知の問題でまだ対策されていないようなので、nvmを再インストールすることにしました。
まずはnvmのアンイストールです。
How to uninstall nvm? · Issue #298 · creationix/nvm
アンインストールは~/.nvmを削除すればnode.jsを含めてまるごとアンインストールされます。
rm -rf $NVM_DIR
環境変数NVM_DIRにnvmのインストール先のパスが入っているのでこれでnvmのフォルダが削除されます。
今回は再インストールするので.bashrcはそのままにしておきました。
インストールはGitHub - creationix/nvm: Node Version Manager - Simple bash script to manage multiple active node.js versionsのcurlの方法で行いました。
export NVM_DIR="/home/pq/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvmあとは~/.bashrcにあるnvmに関するこの部分を削除すればアンインストール完了です。
今回は再インストールするので.bashrcはそのままにしておきました。
インストールはGitHub - creationix/nvm: Node Version Manager - Simple bash script to manage multiple active node.js versionsのcurlの方法で行いました。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
上記のexport CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crtの設定をしていないとerror setting certificate verify locationsとでてきてインストールできません。
pq@pq-VirtualBox:~$ 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 Speed 100 7766 100 7766 0 0 7447 0 0:00:01 0:00:01 --:--:-- 8395 => Downloading nvm from git to '/home/pq/.nvm' => Cloning into '/home/pq/.nvm'... remote: Counting objects: 4588, done. remote: Compressing objects: 100% (13/13), done. remote: Total 4588 (delta 4), reused 0 (delta 0), pack-reused 4575 Receiving objects: 100% (4588/4588), 1.19 MiB | 490.00 KiB/s, done. Resolving deltas: 100% (2709/2709), done. Checking connectivity... done. * (detached from v0.31.0) master => Source string already in /home/pq/.bashrc => Close and reopen your terminal to start using nvm
nvm v0.31.0がインストールできました。
今度は~/.nvmフォルダに.gitフォルダが含まれていました。
nvm install stable
node.jsもnvmと一緒にアンイストールされたのでstableバージョンを再インストールし直しました。
(H28.5.19以下追記。そもそもの原因がわかりました。Anacondaをインストールした影響が原因でした。)
それでAnacondaをインストールする前のlinuxBean14.04でnvm install stableを実行すると問題なくインストールできてしまいました。
その状態ではcurlはインストールしていないのでnvmはwgetでダウンロードしているはずです。
Anacondaをインストールすると同時にAnacondaのcurlがインストールされます。
Anacondaをインストールする前の状態でcurlをSynapticパッケージマネージャからインストールしてみました。
node.jsもnvmと一緒にアンイストールされたのでstableバージョンを再インストールし直しました。
(H28.5.19以下追記。そもそもの原因がわかりました。Anacondaをインストールした影響が原因でした。)
AnacondaをインストールしてcurlがAnacondaのものになったのがそもそもの原因だった
これを読んでlinuxBean14.04(72)Anacondaで科学技術系Pythonパッケージを一括インストールするが思い当たりました。
curl
やopenssl
などが Anaconda に乗っ取られる
- Anaconda が標準で自身の prefix に
curl
,openssl
,sqlite3
,redis
などもろもろインストールしてしまうため
そもそも curl
が壊れてて Debian だと動かない
pyenv の Anaconda/Miniconda 対応について - Qiita
- CA 証明書が
/etc/pki/tls/certs/ca-bundle.crt
にないと動かない
それでAnacondaをインストールする前のlinuxBean14.04でnvm install stableを実行すると問題なくインストールできてしまいました。
その状態ではcurlはインストールしていないのでnvmはwgetでダウンロードしているはずです。
Anacondaをインストールすると同時にAnacondaのcurlがインストールされます。
pq@pq-VirtualBox:~$ which curl /home/pq/anaconda3/bin/curl pq@pq-VirtualBox:~$ curl -V curl 7.43.0 (i686-pc-linux-gnu) libcurl/7.43.0 OpenSSL/1.0.1k zlib/1.2.8 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets pq@pq-VirtualBox:~$ nvm ls-remote N/Aするとnvmからnodejs.orgにアクセスできなくなってしまいました。
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crtを~/.bashrcの最後の行に追加して保存してTerminalを起動し直すとnvmからnodejs.orgにアクセスできるようになりました。
Anacondaのcurlがインストールされた後にSynapticパッケージマネージャーからcurlをインストールしてもcurlコマンドではAnacondaのcurlが起動するので状況は何も変わりません。
これは環境変数のPATHの先頭に~/anaconda3/binが設定されているからです。
Anacondaのcurlがインストールされた後にSynapticパッケージマネージャーからcurlをインストールしてもcurlコマンドではAnacondaのcurlが起動するので状況は何も変わりません。
これは環境変数のPATHの先頭に~/anaconda3/binが設定されているからです。
Anacondaをインストールする前の状態でcurlをSynapticパッケージマネージャからインストールしてみました。
pq@pq-VirtualBox:~$ which curl /usr/bin/curl
curlをインストールしてもnvm ls-remoteでnodejs.orgにアクセスできました。
ということでそもそもの原因はcurlがAnacondaのものに入れ替わっていたことでした。
参考にしたサイト
`nvm ls-remote` returns N/A prior to v0.17.3 · Issue #554 · creationix/nvm · GitHub
2014年10月21日にnodejs.orgがHTTPからHTTPSに変更したのが原因でnvmの動作に支障がでたようです。
Issues · creationix/nvm · GitHub
HTTPSに関するnvmの議論。
HTTPS certificate for latest.nvm.sh · Issue #614 · creationix/nvm · GitHub
nvmが使っているのフリーのURL redirecting serviceの関係でHTTPSへの対応が難しいようです。
SSL サーバー証明書の基礎知識|サイバートラスト
HTTPSの仕組みの解説。
認証局 - Wikipedia
認証局(CA)の解説。
cURL - How To Use (マニュアルページ日本語訳)
今回環境変数CURL_CA_BUNDLEにUbuntuパッケージのCA証明書を指定しました。
install script `git` detection should also check for `.git` · Issue #1028 · creationix/nvm
git未インストール状態でnvmをインストール後にgitをインストールするとnvmがアップグレードできません。
How to uninstall nvm? · Issue #298 · creationix/nvm
nvmのアンイストール方法。
GitHub - creationix/nvm: Node Version Manager - Simple bash script to manage multiple active node.js versions
nvmのGitHubリポジトリ。
pyenv の Anaconda/Miniconda 対応について - Qiita
Anacondaのインストール時にcurlなどの一部コマンドがAnaconda付属のものにパスが変わります。
0 件のコメント:
コメントを投稿