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

# code-server
https://github.com/codercom/code-server
![code-server](https://qiita-image-store.s3.amazonaws.com/0/254837/74f8a787-662c-8e6e-330d-2645e847c4ef.png)
サーバ上でvisual studio codeが使えるというもの。
やっぱ聞いたら使いたくなったので、さっそく試してみました。

[先駆者様](https://qiita.com/m5d215/items/f5ae82ad9a3726519904)

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

```shell
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 ~
```

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

```shell
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をビルドする

これまた、ほぼ[参考ページ](https://minecraft.server-memo.net/mc-javaedition-install/#gcc)どおりにやりました。

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

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

```shell

# 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

ダウンロードの正常が確認できたらいよいよビルドします。ここの説明は[参考ページ](https://minecraft.server-memo.net/mc-javaedition-install/#gcc)をご参照ください。makeつまりビルドには相当時間がかかりました。

```shell

# 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等の方は必要ないはずです。

```shell

$ 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にあった
```

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

```shell

# 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`が発生しました。そこで[ここ](https://github.com/codercom/code-server/issues/67#issuecomment-470480782)を参考に、ダミーでエラー元のjsonを作成

```shell
$ 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`

これまた[さっきの](https://github.com/codercom/code-server/issues/67#issuecomment-470480782)を参考にして

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

# 完全大勝利
ここでやっと
![yattaze.png](https://qiita-image-store.s3.amazonaws.com/0/254837/8524902c-7bc8-cfe0-1dca-f8aea1ac96d2.png)
やったぜ！