65875


[この質問](https://ja.stackoverflow.com/q/65787/19110)の続きで、Vagrantで構築したCentOS
6上でRailsサーバーを立ち上げるコマンド

[code]

    rails server -b 192.168.33.10/ -d
    
[/code]

を行ったところ、下記のように表示され

[code]

    /home/vagrant/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/webpacker-4.2.2/lib/webpacker/configuration.rb:95:in `rescue in load': Webpacker configuration file not found /home/vagrant/rails_lessons/myapp/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /home/vagrant/rails_lessons/myapp/config/webpacker.yml (RuntimeError)
    
[/code]

`rails webpacker:install` のコマンドを実行したところ

[code]

    Webpacker requires Node.js >= 8.16.0 and you are using 0.10.48
    Please upgrade Node.js nodejs.org/en/download
    
[/code]

と出ました。  
これはNode.jsをアップデートしろとのことですが  
CentOS上でupdateするにはどうしたらいいでしょうか？

Node.jsのupdateの件

[![画像の説明をここに入力](https://i.stack.imgur.com/FhPFK.png)](https://i.stack.imgur.com/FhPFK.png)

[![画像の説明をここに入力](https://i.stack.imgur.com/DFLTQ.png)](https://i.stack.imgur.com/DFLTQ.png)


CC BY-SA 4.0
2020-04-22T10:42:15.770
65861
2020-04-25T03:09:35.343
2020-04-23T08:59:14.810
3060
39719
question
ruby-on-rails centos vagrant
CentOS 6でのNode.jsのアップグレード方法について


出力に書かれているウェブサイト <https://nodejs.org/en/download/> から新しい NodeJS をインストールしましょう。

## NodeSource を使う方法

[ダウンロードページのここ](https://nodejs.org/en/download/package-manager/#debian-and-
ubuntu-based-linux-distributions-enterprise-linux-fedora-and-snap-
packages)に書かれているように、Node.js 公式のパッケージ・リポジトリとして
[NodeSource](https://github.com/nodesource/distributions/blob/master/README.md)
というのが管理されており、このリポジトリを yum に登録すると yum install できるようになります。

が、2020 年 4 月現在 CentOS 6 はサポート対象外です。このため、 **思い切って新しいバージョンの CentOS
を使うというのも選択肢です** 。

※CentOS 6
も[助けようとしてくれてはいる](https://github.com/nodesource/distributions/blob/master/OLDER_DISTROS.md)のですが、最近の
Node.js をインストールするには glibc のバージョンが古くて上手くいかないという issue が立っています:
<https://github.com/nodesource/distributions/issues/859> あるいは、今回必要とされている程度に
Node.js のバージョンを下げれば対応できるかもしれません。

## 配布されている Node.js バイナリを使う方法

※最新バージョンを入れようとするとそれなりに大変です。古いバージョンを使うと（セキュリティ的な問題はおいておけば）ラクです。どのくらい古ければ良いかについては
[cubick さんの回答](https://ja.stackoverflow.com/a/65928/19110)をご覧ください。

<https://nodejs.org/en/download/> からバイナリをダウンロードします。

  * 選択肢1: 公開されている Linux Binaries の URL を直接 wget または curl する。
[code]     wget https://nodejs.org/dist/vほにゃらら/node-ほにゃらら-linux-ほにゃらら.tar.xz

    
[/code]

  * 選択肢2: ホスト OS で普通にダウンロードし、Vagrant の synced folder を経由してゲスト OS に移す。

圧縮されているので展開します。

[code]

    tar Jxfv node-vほにゃらら-linux-ほにゃらら.tar.xz
    
[/code]

あとはこのフォルダを適当な場所に mv し、bin フォルダに PATH を通せば node コマンドは認識されます。公式 wiki を参考にしてください:
<https://github.com/nodejs/help/wiki/Installation>

[code]

    # 例（必要に応じて先頭に sudo をつけてください）
    mkdir -p /usr/local/lib/nodejs
    mv node-vほにゃらら-linux-ほにゃらら /usr/local/lib/nodejs/
    echo 'export PATH="/usr/local/lib/nodejs/node-vほにゃらら-linux-ほにゃらら/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc
    
[/code]

これで `node --version` が新しくなっていれば無事終了です。

しかし CentOS 6 では `node --version` が以下のように glibc などが見つからないというエラーを出す場合があります。

[code]

    node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by node)
    node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by node)
    node: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by node)
    node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node)
    node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by node)
    node: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by node)
    node: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by node)
    
[/code]

実際調べるとこんな感じで古いものしか無いと分かります：

[code]

    # strings /usr/lib64/libstdc++.so.6 | grep GLIBC
    GLIBCXX_3.4
    GLIBCXX_3.4.1
    GLIBCXX_3.4.2
    GLIBCXX_3.4.3
    GLIBCXX_3.4.4
    GLIBCXX_3.4.5
    GLIBCXX_3.4.6
    GLIBCXX_3.4.7
    GLIBCXX_3.4.8
    GLIBCXX_3.4.9
    GLIBCXX_3.4.10
    GLIBCXX_3.4.11
    GLIBCXX_3.4.12
    GLIBCXX_3.4.13
    GLIBC_2.2.5
    GLIBC_2.3
    GLIBC_2.4
    GLIBC_2.3.2
    GLIBCXX_FORCE_NEW
    GLIBCXX_DEBUG_MESSAGE_LENGTH
    
[/code]

という訳で glibc を新しいものにしましょう。たとえば自分で gcc
のソースコードからビルドして入れ替える方法があります。この回答で解説し始めると長くなりすぎるので、ブログ記事にリンクしておきます: [CentOS 6 の
stdlibc++ を更新する](http://dotnsf.blog.jp/archives/1064353059.html)


CC BY-SA 4.0
2020-04-22T15:25:05.903
65875
2020-04-25T03:09:35.343
2020-04-25T03:09:35.343
19110
19110
65861
answer


### 前置き

理想としては CentOS6 の環境で動く Node.js のバージョンを確認したいところですが、  
リリースノート等を見ても参考になりそうな情報が見当たりません。

今回は `rails` 実行時のエラーに出ている "node.js の v8.16.0 以上が必要" と出ているので、

> `Webpacker requires Node.js >= 8.16.0 and you are using 0.10.48`

[Node.js のダウンロードページ](https://nodejs.org/ja/download/releases/) からリンクを辿って
[v8.16.2](https://nodejs.org/download/release/v8.16.2/) を選択してみます。  
linuxの64bit版を例に進めますが、実際の環境に合わせて読み替えてください。

また、余計なトラブルを避けるため、OS標準パッケージでインストールされた node.js は  
事前にいったん削除しておくことをおすすめします。

[code]

    $ sudo yum remove nodejs -y
    
[/code]

* * *

### ダウンロードとインストール手順

ファイルをダウンロード (ファイル名と拡張子に注意)

[code]

    $ curl -O https://nodejs.org/download/release/v8.16.2/node-v8.16.2-linux-x64.tar.xz
    
[/code]

インストール先をここでは `/usr/local/lib/nodejs/` 以下とし、必要なディレクトリを作成してから  
アーカイブを展開

[code]

    $ sudo mkdir -p /usr/local/lib/nodejs
    $ sudo tar xJvf node-v8.16.2-linux-x64.tar.xz -C /usr/local/lib/nodejs
    
[/code]

ディレクトリの配置を確認

[code]

    $ ls /usr/local/lib/nodejs/
    node-v8.16.2-linux-x64/
    
[/code]

設定ファイル (ここでは `~/.bashrc`) に追記して環境変数 PATH を通す

[code]

    $ echo 'export PATH="/usr/local/lib/nodejs/node-v8.16.2-linux-x64/bin:$PATH"' >> ~/.bashrc
    
[/code]

設定ファイルを読み直して PATH が通っているかと、node.js のバージョンを確認

[code]

    $ . ~/.bashrc
    $ which node
    /usr/local/lib/nodejs/node-v8.16.2-linux-x64/bin/node
    $ node -v
    v8.16.2
    
[/code]


CC BY-SA 4.0
2020-04-24T12:01:47.990
65928
2020-04-24T12:01:47.990
3060
65861
answer