🧗

CentOS 7 で Ruby と Node.js を更新する

2023/03/23に公開

Ruby 編 (2.6.5 → 3.1.2)

rbenv install --list | grep 3.2.1

としても出てこないので git pull してみるがフリーズ

cd $(rbenv root)/plugins/ruby-build
git pull

git:https: に変更したら

git remote set-url origin https://github.com/sstephenson/ruby-build.git
git pull

動いた

rbenv install --list | grep 3.2.1

で、出てくるのを確認したら

rbenv install 3.2.1 -v

とするが失敗

Last 10 log lines:
     rb_execution_context_t *ec = ruby_current_ec;
                                  ^
vm_core.h:1865:34: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます

https://qiita.com/scivola/items/6a299a2ff70983cf7187

上の記事を参考に

sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-11
scl enable devtoolset-11 "gcc -v"
source scl_source enable devtoolset-11
gcc -v

として新しい gcc を一時的に有効にする

毎回、一時的に有効にするのは面倒なので

https://qiita.com/witchcraze/items/f34d11e160164e0a8ebd

を参考に

echo "source scl_source enable devtoolset-11" > /etc/profile.d/scl.sh

として再度ログインし

rbenv install 3.2.1 -v

を試すと

rbenv: cannot rehash: /usr/local/rbenv/shims/.rbenv-shim exists

のエラーが出るので

https://qiita.com/ironsand/items/2f9f20e6e77ab1877160

を参考に

rm -f /usr/local/rbenv/shims/.rbenv-shim
rbenv rehash

とする

.ruby-version が効かないところで ruby コマンドを使ったりしているので

rbenv global 3.2.1

としておく

Node.js 編 (12.13.0 → 16.19.1)

19.8.1 を入れたかったので確認する

nodenv install --list | grep 19

が、入ってないので

nodenv update

とするもフリーズ

cd $(nodenv root)
git pull

としてもフリーズ
Ruby のときと同様に git:https: にすると

cd $(nodenv root)
git remote set-url origin https://github.com/nodenv/nodenv.git
git pull

cd $(nodenv root)/plugins/node-build
git remote set-url origin https://github.com/nodenv/node-build.git
git pull

動いた

念のため

nodenv update

としておき

nodenv install --list | grep 19

として 19.8.1 があるのを確認したら

nodenv install 19.8.1

としてインストールしたら最後の rehash で失敗

https://qiita.com/ironsand/items/2f9f20e6e77ab1877160

を参考に

rm -f /usr/local/nodenv/shims/.nodenv-shim
nodenv rehash

とし、念のために node -v で確認すると失敗

$ NODENV_VERSION=19.8.1 node -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

https://github.com/nodejs/node/issues/42351

同様に困っている方が多いようだけど解決法はディストリビューションをアップグレードしろだと……? node のためだけに……?

https://takagi.blog/how-to-install-deno-on-centos7/

そこで上の記事を参考にソースから GLIBC のビルドを試みるも

curl -LO https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxvf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && sudo make install

configure で失敗

These critical programs are missing or too old: gcc make

Ruby をビルドするために新しい gcc を有効にしたのが影響してんじゃないかといったん scl を切ると configure が通った

そして約20分かけてビルド&インストールしたものの、結果、変化なし
NODENV_VERSION=19.8.1 node -v はエラーが出たままだった

結局妥協して 16.19.1 にした (敗北感)

nodenv install 16.19.1
NODENV_VERSION=16.19.1 node -v

Discussion