問題#
你說的對,但是此遠程主機可能不符合 glibc
和 libstdc++
VS Code
伺服器的先決條件

前言#
自 VS Code 1.99 版本(大約 2025 年 3 月起),VS Code 官方對其預構建伺服器在 Linux 系統上的運行環境提出了新的要求:目標系統需搭載 glibc 2.28 或更高版本。這意味著,像 Debian 10、RHEL 8 或 Ubuntu 20.04 這樣的現代發行版可以無縫支持,但也確實給仍在使用一些經典 Linux 發行版(如 CentOS 7)的用戶帶來了一些挑戰。詳細的官方說明可以參考 這篇 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
項目提供了兩種構建方式:
構建 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
參數是為了處理壓縮包內部可能存在的額外頂層目錄。如果解壓後發現文件路徑多了一層 (例如 ~/.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
配置 Shell 環境#
為了讓 VS Code Server 啟動時能自動加載我們準備好的 sysroot 環境,需要在遠程伺服器的 shell 配置文件(通常是 ~/.bashrc
或 ~/.zshrc
,取決於你使用的 shell)中添加一行命令來引入 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