最新の VSCode v1.99 以降で glibc<2.28 の古い Linux サーバーに Remote-SSH で接続できなくなりました。
公式にその対処法の記載を見つけたのですが、私的にやや情報不足で色々ハマりながらも、
最終的には接続できるようにできたので、記録を以下に残します。
Contents
背景
過去に VSCode v1.86 (January 2024) で glibc>=2.28 が要件化され、
一時的に古い Linux サーバーに接続できなくなったことがありました。
その際は一旦は警告のみで、再び接続できるように緩和されていましたが、
VSCode v1.99 (March 2025) で1年以上の時を経て正式に要件化されました。
これに伴い Remote-SSH で要件を満たさない Linux server にも接続できなくなりました。
このサーバーにこれまで同様に接続できるようにします。
接続先の環境
OS: CentOS 7.9 (!!)
Kernel: 3.10.0-1160.el7.x86_64 (!!)
glibc: 2.17 (!!)
改めてみると驚くほどに古い環境ですが、
一般権限しか持たない私にはシステム自体はどうにもできません。
kernel version は後で必要になるのでご自身の環境のものを控えておいてください。
ちなみに接続元は VSCode v1.99 (macOS arm64) ですが、
こちらはあまり環境としては関係しないと思います。
対応方法
基本的には ココ の記載されていることをやります。
が、いくつかハマりどころがあるので、個別に実際にやったことを記します。
- sysroot のビルド
- patchelf のダウンロード, 展開
- VSCODE_SERVER_* 環境変数3つの設定
sysroot
ビルド環境作り
公式ではビルド用の一時環境を docker コンテナで作る方法が紹介されています。
1 2 3 4 5 6 7 8 9 10 11 12 |
FROM ubuntu:latest RUN apt-get update RUN apt-get install -y gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \ python3-dev autoconf automake libtool libtool-bin gawk wget bzip2 xz-utils unzip \ patch rsync meson ninja-build # Install crosstool-ng RUN wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.26.0.tar.bz2 RUN tar -xjf crosstool-ng-1.26.0.tar.bz2 RUN cd crosstool-ng-1.26.0 && ./configure --prefix=/crosstool-ng-1.26.0/out && make && make install ENV PATH=$PATH:/crosstool-ng-1.26.0/out/bin |
ubuntu:latest
をベースにビルド環境のコンテナを作っているようです。
私はちょうど Proxmox VE に ubuntu24.04 の CT(コンテナ) があったので、
これを使って同様の環境を作りました。
以下のリソースで ubuntu24.04 の CT を作成します。
- memory: 4096MB
- disk: 16GB
(- CPU core: 4)
当初、ビルドのためだけの一時環境だと思って memory: 1GB, disk: 8GB でやりましたが、
いずれも途中で足りなくなってやり直しました(2敗)。
CPUコア数に依存するのかもしれませんが、リソースモニター等を見る限り、
メモリは 2.5GB以上、ディスクは 9GB 以上は必要そうです。
上記とほぼ重複しますが、作成したCT にログインして以下を実行します。
1 2 3 4 5 |
$ apt-get update $ apt-get install -y gcc g++ gperf bison flex texinfo help2man make libncurses5-dev python3-dev autoconf automake libtool libtool-bin gawk wget bzip2 xz-utils unzip patch rsync meson ninja-build $ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.26.0.tar.bz2 $ tar -xjf crosstool-ng-1.26.0.tar.bz2 $ cd crosstool-ng-1.26.0 && ./configure --prefix=/crosstool-ng-1.26.0/out && make && make install |
ビルド
1 2 3 4 5 6 7 8 9 10 11 12 |
# 以下の作業は non-root でやる必要があるっぽい $ adduser [user] $ su - [user] user@ub24ct $ export PATH=/crosstool-ng-1.26.0/out/bin:${PATH} $ wget https://raw.githubusercontent.com/microsoft/vscode-linux-build-agent/refs/heads/main/x86_64-gcc-8.5.0-glibc-2.28.config $ mkdir toolchain-dir $ cd toolchain-dir $ cp -a /path/to/x86_64-~.config .config toolchain-dir/.config の編集 CT_GLIBC_MIN_KERNEL, CT_LINUX_VERSION の書き換え $ ct-ng build |
冒頭に記載のある通り ct-ng
は non-root でやる必要があるようなので、
一般ユーザー [user]
を作ります。
wget
でダウンロードしている config ファイルはココに記載があります。
環境(arch) に合わせて適宜変更してください。
.config
ファイルについて。
公式に一切記載がありませんが、このままビルドすると古い環境では
FATAL: kernel too old
と出て無限ループに陥ります(1敗)。
CT_GLIBC_MIN_KERNEL
と CT_LINUX_VERSION
を書き換える必要があることがココ でコメントされています。
ご自身の接続したいサーバーの kernel version (以下) を指定してください。
(私の場合は '3.10' に変更しました。)
ビルドは Proxmox VE 上の4コアで20分程度掛かりました。
patchelf
github からリモートサーバーの環境に合わせて tar-ball をダウンロードしてください。
VSCode 公式に patchelf v0.18 以降を使用することが明記されています。
VSCODE_SERVER_* 環境変数の設定
sysroot, patchelf をリモートサーバーにコピーして、
以下の3つの環境変数を対応するように設定します。
VSCODE_SERVER_CUSTOM_GLIBC_LINKER
: ビルドした sysroot のld-2.28.so
のパス。VSCODE_SERVER_CUSTOM_GLIBC_PATH
: ビルドした sysroot lib のパス。VSCODE_SERVER_PATCHELF_PATH
: コピーしたpatchelf
実行ファイルのパス
私の場合 ~/local/vscode_remotessh
以下に
ビルドした sysroot (ビルド直下のx86_64-linux-gnu/
) と patchelf/
を配置し以下のように設定しました。
1 2 3 4 5 6 7 8 9 |
$ ls -1 ~/local/vscode_remotessh/ patchelf x86_64-linux-gnu ~/.bashrc export VSCODE_REMOTESSH=${HOME}/local/vscode_remotessh export VSCODE_SERVER_CUSTOM_GLIBC_LINKER=${VSCODE_REMOTESSH}/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/ld-2.28.so export VSCODE_SERVER_CUSTOM_GLIBC_PATH=${VSCODE_REMOTESSH}/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib export VSCODE_SERVER_PATCHELF_PATH=${VSCODE_REMOTESSH}/patchelf/bin/patchelf |
v1.99 以降の VSCode で、この対処を施した要件を満たさない古いLinuxサーバーへ接続すると、
要件を満たさない警告と共に、再び無事に接続することができました。
トラブルシューティング
'FATAL: kernel too old' と出て vscode-server のダウンロード, 展開を繰り返す
前述の通り、sysroot のビルド前に
config ファイルに CT_GLIBC_MIN_KERNEL
と CT_LINUX_VERSION
を適切に設定してください。
関連情報
https://code.visualstudio.com/updates/v1_99#_linux-legacy-server-support-has-ended
https://code.visualstudio.com/docs/remote/faq#_can-i-run-vs-code-server-on-older-linux-distributions
https://github.com/microsoft/vscode/issues/231623#issuecomment-2779478886