VSCodeでRemote SSHを使ってレンタルサーバーに接続しようとしたときに以下のエラーが発生したときの原因と対処法についてまとめています。
The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++
エラーの発生状況
VSCodeの拡張機能Remote SSHを使ってレンタルサーバーにSSH接続しようとしたときに以下のエラーが発生。
なお、Remote SSHを使用せず、コマンドラインでssh接続しようとすれば接続背できる状態です。
The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++
内容は以下のようになっています。
リモートホストは、glibcおよびlibstdc++に関するVSCodeサーバーの前提条件を満たしていない可能性があります
なお、glibcとlibstdc++は、C言語用の関数のライブラリです。
エラーの原因
Remote SSHを使用するために必要な「glibc」や「licstdc++」のパッケージ(あるいはそのバージョン)が、リモートサーバーにインストールされていない(あるいはできない)ために発生しています。
なお、CentOS6には、glibcのバージョン2.12とlibstdc++のバージョン3.4.13が入っていますが、これはリモートの開発要件を満たしていません。
対処法
対処法はリモートサーバーの状況が以下のどちらかによって分かれます。
サーバーの再起動権限が与えられていない
例えば、簡易的なレンタルサーバーなどの場合、サーバー自体ではなく、ディレクトリだけが渡されている場合があります。
「yum」や「sudo」コマンドが見つかりませんと出る場合やサーバーの再起動当ができない場合です。
そのようなときは、サーバーがレンタルサーバー会社によって管理されているため、「glibc」や「licstdc++」のパッケージのインストールやバージョンアップができません。
残念ながら、Remote SSHは使えそうもありません。。
サーバーの再起動権限がある
AWSのEC2などコマンドの実行権限やサーバーの再起動権限がある場合は、以下の2つの対処法があります。
CentOS6のglibcとlibsをアップデートする
CentOS6のglibcとlibsをアップデートする場合は、以下のシェルスクリプトを作成し、実行後にサーバーを再起動します。
# Update glibc and static libs
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm
wget https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm
wget https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm
sudo rpm -Uh --force --nodeps \
glibc-2.17-55.el6.x86_64.rpm \
glibc-common-2.17-55.el6.x86_64.rpm \
glibc-devel-2.17-55.el6.x86_64.rpm \
glibc-headers-2.17-55.el6.x86_64.rpm \
glibc-static-2.17-55.el6.x86_64.rpm \
glibc-utils-2.17-55.el6.x86_64.rpm
# Update libstdc++
wget https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-4.8.2-16.3.el6.x86_64.rpm
wget https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm
wget https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-static-4.8.2-16.3.el6.x86_64.rpm
sudo rpm -Uh \
libstdc++-4.8.2-16.3.el6.x86_64.rpm \
libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm \
libstdc++-static-4.8.2-16.3.el6.x86_64.rpm
Dockerを使っている場合
CentOS6をDockerのコンテナとして起動している場合は、Dockerfileに以下を追記し、イメージのビルドとコンテナの起動を行います。
FROM centos:6
RUN yum -y install wget tar
# Update glibc
RUN wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm \
&& wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm \
&& wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm \
&& wget -q http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm \
&& wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm \
&& wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm \
&& rpm -Uh --force --nodeps \
glibc-2.17-55.el6.x86_64.rpm \
glibc-common-2.17-55.el6.x86_64.rpm \
glibc-devel-2.17-55.el6.x86_64.rpm \
glibc-headers-2.17-55.el6.x86_64.rpm \
glibc-static-2.17-55.el6.x86_64.rpm \
glibc-utils-2.17-55.el6.x86_64.rpm \
&& rm *.rpm
# Update libstdc++
RUN wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-4.8.2-16.3.el6.x86_64.rpm \
&& wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm \
&& wget -q https://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/gcc-4.8.2-16.3.fc20/libstdc++-static-4.8.2-16.3.el6.x86_64.rpm \
&& rpm -Uh \
libstdc++-4.8.2-16.3.el6.x86_64.rpm \
libstdc++-devel-4.8.2-16.3.el6.x86_64.rpm \
libstdc++-static-4.8.2-16.3.el6.x86_64.rpm \
&& rm *.rpm