問題#
あなたの言う通りですが、このリモートホストは glibc と libstdc++ VS Code サーバーの前提条件を満たしていない可能性があります。
前言#
VS Code 1.99 バージョン(約 2025 年 3 月から)以降、VS Code 公式は Linux システム上でのそのプリビルドサーバーの実行環境に新しい要件を提示しました:ターゲットシステムは glibc 2.28 以上のバージョンを搭載する必要があります。これは、Debian 10、RHEL 8、または Ubuntu 20.04 のような現代のディストリビューションがシームレスにサポートできることを意味しますが、CentOS 7 のような古典的な Linux ディストリビューションを使用しているユーザーにはいくつかの課題をもたらします。詳細な公式説明はこの FAQを参照してください。
幸いにも、マイクロソフトは窓口を残しています。
上記の必要なライブラリバージョンを含むsysrootが提供される場合、VS Code は Remote - SSH 拡張機能を通じて、VS Code がサポートしていないオペレーティングシステム(glibc バージョンが 2.28 以下で、libstdc++ バージョンが 3.4.25 以下のオペレーティングシステム)に接続することを許可します。この方法により、あなたとあなたの組織は新しい Linux ディストリビューションに移行するための時間を増やすことができます。
このチュートリアルに適した状況#
システムが CentOS 7.9 / RHEL 7.9 / Oracle Linux 7.9 / Ubuntu 18.04 であり、サーバーに root 権限がなく、1.98 バージョンに戻りたくない場合。
::: warning
これはあくまで技術的な解決策であり、公式にサポートされている使用シーンではありません。使用前に慎重に検討してください。
:::
詳細手順ガイド#
このような背景から、私はvscode-sysrootというプロジェクトを見つけました。このプロジェクトは、Docker とcrosstool-ngツールを使用して、glibc 2.28 を含み、古いカーネルバージョン(例えば 3.10)と互換性のある sysroot を自分でコンパイルしたものです。また、patchelfも含まれています。私の現在の状況に完璧に合致しているため、このプロジェクトをそのまま使用しました。
1. Docker 環境の準備#
まず、ローカル環境またはサーバーにDockerがインストールされ、正常に動作していることを確認してください。これはsysrootをコンパイルするための基盤です。
2. Sysroot 圧縮パッケージの構築#
次に、vscode-sysrootリポジトリをクローンします。このリポジトリを使用してsysroot圧縮パッケージをコンパイルし生成します。
git clone https://github.com/ursetto/vscode-sysroot.git
cd vscode-sysroot
プロジェクトは 2 つの構築方法を提供しています:
Docker イメージの構築#
docker build -t my-vscode-sysroot .
一時コンテナの作成#
docker create --name temp-sysroot-container my-vscode-sysroot
コンテナの /src ディレクトリから生成された圧縮パッケージを現在のホストディレクトリにコピー#
docker cp temp-sysroot-container:/src/vscode-sysroot-x86_64-linux-gnu.tgz ./vscode-sysroot-x86_64-linux-gnu.tgz
一時コンテナの削除#
docker rm temp-sysroot-container
(オプション) コンテナ内部に入ってデバッグまたは確認したい場合#
docker run -it --rm my-vscode-sysroot bash
3. パッケージ化された Sysroot をサーバーにデプロイ#
Sysroot 圧縮パッケージのアップロード#
まず、vscode-sysroot-x86_64-linux-gnu.tgzファイルをサーバーにアップロードします。scpや他のファイル転送ツールを使用できます:
scp ./vscode-sysroot-x86_64-linux-gnu.tgz user@your-remote-server:~
Sysroot の解凍#
リモートサーバーにログインし、次のコマンドを実行してターゲットディレクトリを作成し、sysroot を解凍します。パスは~/.vscode-server/sysroot/です。
# リモートサーバー上で実行
mkdir -p ~/.vscode-server/sysroot
# 圧縮パッケージがユーザーのホームディレクトリ ~ にアップロードされていると仮定
tar zxvf ~/vscode-sysroot-x86_64-linux-gnu.tgz -C ~/.vscode-server/sysroot --strip-components=1
ヒント:tarコマンドの--strip-components=1パラメータは、圧縮パッケージ内部に存在する可能性のある追加のトップレベルディレクトリを処理するためのものです。解凍後にファイルパスが 1 層多くなっている場合(例えば~/.vscode-server/sysroot/vscode-sysroot-x86_64-linux-gnu/usr/...)、このパラメータが必要です。解凍後にusr、libなどのディレクトリが直接~/.vscode-server/sysroot/の下にある場合は、このパラメータを省略するか、値を0に設定できます。
sysroot.shスクリプトのデプロイ#
次に、vscode-sysrootプロジェクトのルートディレクトリにあるsysroot.shスクリプトをリモートサーバーの~/.vscode-server/ディレクトリにコピーし、名前がsysroot.shであることを確認します:
# ローカルマシン上で実行(vscode-sysrootプロジェクトのルートディレクトリにいることを確認)
scp sysroot.sh user@your-remote-server:~/.vscode-server/sysroot.sh
シェル環境の設定#
VS Code Server が起動時に自動的に準備した sysroot 環境を読み込むために、リモートサーバーのシェル設定ファイル(通常は~/.bashrcまたは~/.zshrc、使用しているシェルによって異なります)にsysroot.shを読み込むためのコマンドを追加します:
# リモートサーバー上で実行
echo 'source ~/.vscode-server/sysroot.sh' >> ~/.bashrc
# zshを使用している場合は、次のように変更します:
# echo 'source ~/.vscode-server/sysroot.sh' >> ~/.zshrc
変更を保存した後、設定を有効にするために設定ファイルを再読み込みするか、サーバーに再ログインしてください:
# リモートサーバー上で実行
source ~/.bashrc
# または source ~/.zshrc
4. 接続と検証#
VS Code を再度開き、リモートサーバーに接続します。問題がなければ、すでに準備が整っているはずです。
この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://remrin.dev/posts/dev/vscode-remote-fix