Introduction

CentOS 7 というサポート切れして久しい OS に対して最新の Visual Studio Code から接続した際、

1
2
3
4
5
6
7
8
9
The following issues were detected in your most recent Remote - SSH session 
Ctrl+click on an issue to continue in Copilot Chat.
╔══════════════╤════════════════════════════════════════════════════════════════════════════════════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════╤════════════════════════════════════════════════════════════════════════════════════════════════╗
║ Status │ Message │ Mitigations │ Resources ║
╟──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────╢
║ LinuxPrereqs │ The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++ (The │ • https://aka.ms/vscode-remote/faq/old-linux │ • https://aka.ms/vscode-remote/linux-prerequisites ║
║ │ remote host does not meet the prerequisites for running VS Code Server) │ │ ║
╚══════════════╧════════════════════════════════════════════════════════════════════════════════════════════════╧════════════════════════════════════════════════════════════════════════════════════════════════╧════════════════════════════════════════════════════════════════════════════════════════════════╝
See verbose information in the Output Log...

のようなエラーが表示され接続できなっていたことに今更気づく。

Remote - SSH のコンソールを除くと下記のようなメッセージも出力されている。

1
2
3
[11:40:30.511]  ---------- [Session Summary] ----------- 
[11:40:30.511] [LinuxPrereqs]: The remote host may not meet VS Code Server's prerequisites for glibc and libstdc++ (The remote host does not meet the prerequisites for running VS Code Server)
[11:40:30.511] ----------------------------------------
1
2
3
4
5
> [2025-11-09 14:06:28] error This machine does not meet Visual Studio Code Server
> 's prerequisites, expected either...
> - find GLIBC >= v2.28.0 (but found v2.27.0 instead) for GNU environments
> - find /lib/ld-musl-x86_64.so.1, which is required to run the Visual Studio Co
> de Server in musl environments

その対策。

How to resolve?

調べてみると、Visual Studio Code の v1.99 以降でこうした事象が発生すると。

Remote host / container / WSL Linux prerequisites

Distribution Base Requirements Remote - SSH Requirements Notes
General kernel >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, tar OpenSSH server, bash, and curl or wget Run ldd –version to check the glibc version. Run strings /usr/lib64/libstdc++.so.6
General for Arm32 libatomic1 No additional requirements.
Ubuntu 20.04+, Debian 10+, Raspberry Pi OS Buster/10+ and downstream distributions libc6 libstdc++6 ca-certificates tar openssh-server bash and curl or wget Requires kernel >= 4.18, glibc >= 2.28, libstdc++ >= 3.4.25.
RHEL / CentOS 8+ glibc libgcc libstdc++ ca-certificates tar openssh-server bash and curl or wget Requires kernel >= 4.18, glibc >= 2.28, libstdc++ >= 3.4.25.
Alpine Linux 3.16+ musl libgcc libstdc++. musl >= 1.2.3, glibc not required. Not yet supported. Supported in Dev Containers and WSL. Extensions installed in the container may not work due to glibc dependencies in extension native code.
openSUSE Leap / SUSE Linux Enterprise 15+ glibc libgcc_s1 libstdc++6 ca-certificates gzip tar curl or wget Requires kernel >= 4.18, glibc, libstdc++6

要するに glibclibstdc++ または kernel が古い、ということ。
これらを全て解決できればいいが、どれもアップデートは難しいし、特に、システム全体が依存している glibc のアップデートはお勧めできない。

ということで、公式 Can I run VS Code Server on older Linux distributions? にあるように、

  • sysroot を docker コンテナ内で生成
  • 接続先の所定のディレクトリに配置

という対策が紹介されている。

しかし、やることが多いのと、手順があまりにも省略してあり、成功するまでに時間を浪費したのでメモ。

1. kernel の更新

CentOS 7 のインストール直後のカーネルは、下記のように古い。

1
2
$ uname -r
3.10.0-957.el7.x86_64

先述のカーネルの必須要件は 4.18 なので、更新する必要がある。
更新手順は 開発メモ その465 古い Linux (CentOS 7) のカーネルを更新する を参照。

2. sysroot の作成

Dockerfile を公開している有志がいるのでそれを参考にする。

docker build の際、先の Microsoft の公式説明のページもあった、設定ファイルが必要なので、接続先 Linux の CPU アーキテクチャに合わせてそちらも準備する。

例えば、カレントディレクトリから見て、 vscode-server-sysroot\ubuntu\Dockerfilevscode-server-sysroot\ubuntu\x86_64-gcc-8.5.0-glibc-2.28 が存在するならビルドは下記のように行う。

Windows
1
2
3
$ mkdir output
$ docker build -t vscode-sysroot --target sysroot vscode-server-sysroot\ubuntu
$ docker run -it --rm -v %CD%\output:/out vscode-sysroot cp vscode-sysroot-x86_64-linux-gnu.tgz /out/
Linux
1
2
3
$ mkdir -p output
$ docker build -t vscode-sysroot --target sysroot vscode-server-sysroot/ubuntu
$ docker run -it --rm -v $PWD/output:/out vscode-sysroot cp vscode-sysroot-x86_64-linux-gnu.tgz /out/

かなり時間がかかるので注意。
ビルドに成功すると outputvscode-sysroot-x86_64-linux-gnu.tgz が生成される。

2. リモート先に転送

vscode-sysroot-x86_64-linux-gnu.tgz を接続先の Linux に転送する。

1
$ scp output\vscode-sysroot-x86_64-linux-gnu.tgz user@192.168.11.117:~

3. リモート先での設定

転送した vscode-sysroot-x86_64-linux-gnu.tgz を所定のディレクトリに展開

1
2
$ mkdir -p ~/.vscode-server/sysroot
$ tar zxvf ~/vscode-sysroot-x86_64-linux-gnu.tgz -C ~/.vscode-server/sysroot --strip-components=1 && rm vscode-sysroot-x86_64-linux-gnu.tgz

4. 環境変数の設定

Visual Studio Code Server が起動時に読み込む環境変数を設定。

1
2
3
4
5
6
7
8
$ touch ~/.vscode-server/sysroot.sh
cat << "EOF" > ~/.vscode-server/sysroot.sh
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$HOME/.vscode-server/sysroot/lib/ld-linux-x86-64.so.2
export VSCODE_SERVER_CUSTOM_GLIBC_PATH=$HOME/.vscode-server/sysroot/usr/lib:$HOME/.vscode-server/sysroot/lib
export VSCODE_SERVER_PATCHELF_PATH=$HOME/.vscode-server/sysroot/usr/bin/patchelf
EOF

$ echo 'source ~/.vscode-server/sysroot.sh' >> ~/.bashrc

特に再起動は不要。

5. Visual Studio Code から再接続

接続元のマシンから再度 Remote-SSH で接続を行うと Visual Studio Code Server のダウンロードが実施され、下記のダイアログが表示される。

recovery

許可すれば、従来通り開発が可能になる。

ちなみに Ubuntu 18.04 も同様の事象に陥るが、上の手順を実施してもダメだった。