更新
This commit is contained in:
parent
ba403f2ff6
commit
9b50dcad9a
@ -11,98 +11,27 @@ echo "[VSCode Remote Server 补丁工具]"
|
||||
# 1. 检查补丁工具文件夹
|
||||
if [ ! -d "$VSCODE_PATCH_DIR/lib" ]; then
|
||||
echo "错误:补丁文件夹应放在这儿:$HOME/.vscode-patch/"
|
||||
echo "请先运行以下命令安装补丁工具:"
|
||||
echo "git clone --depth 1 https://git.unvec.site/stevenhobs/vscode-patch ~/.vscode-patch"
|
||||
echo "chmod -R +751 ~/.vscode-patch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 .vscode-server 目录是否存在
|
||||
if [ ! -d "$VSCODE_SERVER_DIR" ]; then
|
||||
echo "错误:未找到 .vscode-server 目录:$VSCODE_SERVER_DIR"
|
||||
echo "请先使用 VSCode Remote 连接到远程服务器以创建此目录"
|
||||
exit 1
|
||||
fi
|
||||
echo "-- 设置VSCode补丁环境变量"
|
||||
|
||||
echo "-- 补丁工具目录:$VSCODE_PATCH_DIR"
|
||||
echo "-- VSCode Server 目录:$VSCODE_SERVER_DIR"
|
||||
cat >> ~/.profile << EOF
|
||||
|
||||
# 2. 查找所有 code-{id} 可执行程序
|
||||
echo "-- 正在搜索 VSCode Remote Server 可执行程序..."
|
||||
# VSCode 远程服务补丁库
|
||||
export VSCODE_SERVER_PATCHELF_PATH="$HOME/.vscode-patch/lib"
|
||||
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER="$HOME/.vscode-patch/lib/ld-linux-x86-64.so.2"
|
||||
export VSCODE_SERVER_CUSTOM_GLIBC_PATH="$HOME/.vscode-patch/lib"
|
||||
|
||||
CODE_EXECUTABLES=($(find "$VSCODE_SERVER_DIR" -name "code-*" -type f -executable 2>/dev/null))
|
||||
EOF
|
||||
|
||||
if [ ${#CODE_EXECUTABLES[@]} -eq 0 ]; then
|
||||
echo "错误:未找到任何 code-{id} 可执行程序"
|
||||
echo "请确保已通过 VSCode Remote 连接过远程服务器"
|
||||
exit 1
|
||||
fi
|
||||
cat >> ~/.zprofile << EOF
|
||||
|
||||
echo "-- 找到 ${#CODE_EXECUTABLES[@]} 个 VSCode Remote Server 可执行程序"
|
||||
# VSCode 远程服务补丁库
|
||||
export VSCODE_SERVER_PATCHELF_PATH="$HOME/.vscode-patch/lib"
|
||||
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER="$HOME/.vscode-patch/lib/ld-linux-x86-64.so.2"
|
||||
export VSCODE_SERVER_CUSTOM_GLIBC_PATH="$HOME/.vscode-patch/lib"
|
||||
|
||||
# 3. 遍历每个可执行程序进行补丁
|
||||
for CODE_EXECUTABLE in "${CODE_EXECUTABLES[@]}"; do
|
||||
echo ""
|
||||
echo "=== 处理:$CODE_EXECUTABLE ==="
|
||||
EOF
|
||||
|
||||
# 提取 ID
|
||||
BASENAME=$(basename "$CODE_EXECUTABLE")
|
||||
if [[ "$BASENAME" =~ ^code-(.+)$ ]]; then
|
||||
VSCODE_REMOTE_SERVER_ID="${BASH_REMATCH[1]}"
|
||||
echo "-- 提取到 Server ID:$VSCODE_REMOTE_SERVER_ID"
|
||||
else
|
||||
echo "-- 警告:无法从文件名提取 ID,跳过:$BASENAME"
|
||||
continue
|
||||
fi
|
||||
|
||||
# 检查是否已经备份
|
||||
BACKUP_FILE="${CODE_EXECUTABLE}.bak"
|
||||
if [ ! -f "$BACKUP_FILE" ]; then
|
||||
echo "-- 备份原始程序:$BASENAME -> $BASENAME.bak"
|
||||
cp "$CODE_EXECUTABLE" "$BACKUP_FILE"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "-- 错误:备份失败,跳过此程序"
|
||||
continue
|
||||
fi
|
||||
else
|
||||
echo "-- 已存在备份文件:$BASENAME.bak"
|
||||
fi
|
||||
|
||||
# 检查程序是否已经被补丁过
|
||||
if strings "$CODE_EXECUTABLE" | grep -q "$VSCODE_PATCH_DIR/lib" 2>/dev/null; then
|
||||
echo "-- 程序已被补丁过,跳过"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "-- 开始补丁程序:$BASENAME"
|
||||
|
||||
# 使用 patchelf 进行补丁
|
||||
"$VSCODE_PATCH_DIR/tools/patchelf" \
|
||||
--set-interpreter "$VSCODE_PATCH_DIR/lib/ld-linux-x86-64.so.2" \
|
||||
--set-rpath "\$ORIGIN:$HOME/.vscode-patch/lib" \
|
||||
"$CODE_EXECUTABLE"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "-- 补丁成功:$BASENAME"
|
||||
|
||||
# 创建补丁说明文件
|
||||
PATCH_INFO_FILE="$(dirname "$CODE_EXECUTABLE")/Patch说明-$VSCODE_REMOTE_SERVER_ID.md"
|
||||
echo "VSCode Remote Server ($VSCODE_REMOTE_SERVER_ID) 已做旧版本兼容动态库补丁" > "$PATCH_INFO_FILE"
|
||||
echo "补丁时间:$(date)" >> "$PATCH_INFO_FILE"
|
||||
echo "原始文件备份:$BASENAME.bak" >> "$PATCH_INFO_FILE"
|
||||
echo "补丁数据路径:$VSCODE_PATCH_DIR" >> "$PATCH_INFO_FILE"
|
||||
|
||||
else
|
||||
echo "-- 错误:补丁失败:$BASENAME"
|
||||
# 恢复原始文件
|
||||
if [ -f "$BACKUP_FILE" ]; then
|
||||
echo "-- 恢复原始文件"
|
||||
cp "$BACKUP_FILE" "$CODE_EXECUTABLE"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== 补丁完成 ==="
|
||||
echo "所有找到的 VSCode Remote Server 程序已处理完成"
|
||||
echo "如需恢复原始程序,请将 .bak 文件重命名回原文件名"
|
||||
echo "-- 设置完毕"
|
Loading…
x
Reference in New Issue
Block a user