CentOS7で良さげなCode Serverを試したらエラーが出た ("Error: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 等)


code-server

https://github.com/codercom/code-server

サーバ上でvisual studio codeが使えるというもの。
やっぱ聞いたら使いたくなったので、さっそく試してみました。

先駆者様

参考にしつつ、より新しいリリースがあったのでそっちを使った。

curl -fsSL https://github.com/codercom/code-server/releases/download/1.31.1-100/code-server-1.31.1-100-linux-x64.tar.gz | tar zx
cd code-server-1.31.1-100-linux-x64/
./code-server ~

すると以下のエラーが出現

INFO  Starting shared process [1/5]...
ERROR SHARED stderr {"data":"Error: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
以下略

orz

GLIBCXX_3.4.21

要するに、このライブラリがいないためにエラーが出ていたようです。
で、こいつが何なのかというとgccのなかにあるライブラリらしいのですが、centOSでデフォルトで入っているgccはバージョンが古いらしく、このライブラリの件のバージョンがなかったようです。

つまり、やることは単純で、gccの最新版を入手すれば良いのです。ただ、これが大変だった。gccをビルドします。

gccをビルドする

これまた、ほぼ参考ページどおりにやりました。

まずgccをダウンロードします。僕の時は現在(2019/3/9)の最新リリースは8.3.0でしたが、以下のリンク先で調べて、最新のものをできるだけ入れましょう。
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/

以下のコードの2行目はチェックサムを見るためのもので、ダウンロードエラーがないかを確認するのに使います。


# curl -LO http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
# curl -LO http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/sha512.sum
# sha512sum --check sha512.sum

gcc-8.3.0.tar.gz: OKと出ればOK

ダウンロードの正常が確認できたらいよいよビルドします。ここの説明は参考ページをご参照ください。makeつまりビルドには相当時間がかかりました。


# tar xzfv gcc-8.3.0.tar.gz -C /usr/local/src
# cd /usr/local/src/gcc-8.3.0/
# ./contrib/download_prerequisites
# mkdir build
# cd build
# ../configure --enable-languages=c,c++ --prefix=/usr/local --disable-bootstrap --disable-multilib
# make
# make install

できたら確認をしましょう。

僕の環境はシェルがtcshだったのでrehashする必要がありました。bash等の方は必要ないはずです。


$ rehash
$ gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$which gcc
/usr/local/bin/gcc #前のは/bin/gccにあった

最後に共有ライブラリの参照設定を書き換えます。


# cd /etc/ld.so.conf.d
# echo /usr/local/lib64 >> usr_local_lib64.conf
# mv /usr/local/lib64/libstdc++.so.6.0.25-gdb.py  /usr/local/lib64/back_libstdc++.so.6.0.25-gdb.py
# ldconfig

まだ問題があった

これでライブラリ回りはエラーを吐かなくなったが、まだ問題があるようで…
ERROR SHARED stderr {"data":"Uncaught Exception: Error: ENOENT: no such file or directory, open '{hoge_dir}/.code-server/Backups/workspaces.jsonが発生しました。そこでここを参考に、ダミーでエラー元のjsonを作成

$ mkdir ~/.code-server/Backups
$ vim  ~/.code-server/Backups/workspaces.json
# {"rootWorkspaces":[],"folderURIWorkspaces":[],"emptyWorkspaceInfos":[],"emptyWorkspaces":[]}
# と書き込む

すると、次はこのエラーが発生。ワーキングディレクトリがないってことだろうか?

ERROR SHARED stderr {"data":"Uncaught Exception: Error: ENOENT: no such file or directory, scandir '{home_dir}/.code-server/User/workspaceStorage

これまたさっきのを参考にして

$ mkdir -p ~/.code-server/User/workspaceStorage

完全大勝利

ここでやっと

やったぜ!