remrin

remrin

github
email

修復 遠程主機不滿足運行VS Code伺服器的先決條件

問題#

你說的對,但是此遠程主機可能不符合 glibclibstdc++ VS Code 伺服器的先決條件

image

前言#

自 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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。