ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【根本未解決】特定のユーザだけ nvm で Node.js のインストールができなかった

事象

デプロイ用のユーザで Node.js の別バージョンを入れようとしたらなぜか N/A のように存在しない扱いになってしまい、インストールができませんでした。

$ nvm install lts/carbon
Version '' (with LTS filter 'carbon') not found - try `nvm ls-remote --lts=carbon` to browse available versions.
$ nvm ls-remote --lts=carbon
            N/A

nvm ls-remoteすると以下のような感じに io.js の古いバージョンだけ表示されるという…

$ nvm ls-remote
    iojs-v1.0.0
    iojs-v1.0.1
    iojs-v1.0.2
    iojs-v1.0.3
    iojs-v1.0.4
      ...

対処

最悪 gz ファイルをダウンロードして展開・配置すればとりあえずは使えるかなと思っていましたが、インストールできるアカウントでインストールしてディレクトリごと丸っと移動したら普通にnvm useで使えました…

もう少し具体的に

前提として、nvm で管理している Node.js の実態はホームディレクトリの~/.nvm/versions/node以下にバージョン単位で置かれています。
こんな感じ。

~/.nvm/versions/node # ls -1
v10.18.1
v12.14.1
v14.17.0
v15.14.0
v8.17.0

以下の手順で問題なく使えました。
1. 正常にインストールできるユーザ(ユーザAとします)でほしいバージョンの Node.js をインストールします。
2. ~/.nvm/versions/nodeにバージョンのディレクトリが作成されるので、使いたいユーザ(ユーザBとします)の~/.nvm/versions/nodeへ丸っとディレクトリごとコピーします。
3. 念の為、コピーしたディレクトリの所有権をユーザBに変更
4. ユーザBでnvm use <コピーしたバージョン>を実行
5. node -vでバージョンが変わっていることを確認

原因はわからずじまい

別のユーザでは通常通り Node.js のバージョンがずらずらと表示され、インストールもできたのでそのサーバから Node.js が置いてあるサーバにつながらないというわけでもないようでした。
ダウンロードできないユーザでも curl コマンドで https://nodejs.org/dist/ は参照できるので、そのユーザだけがつながらないということもなさそう…
あと NVM と付く環境変数も揃えてみましたがだめでした…
なんだったんだ…