|
#! /usr/bin/env bash |
|
# |
|
# Allow VSCode Server to run on older Linux. |
|
# |
|
set -e |
|
set -u |
|
# set -x |
|
|
|
# what Ubuntu 24/noble release |
|
NOBLEREL=20251013 |
|
|
|
# crosstool-NG |
|
CTVER=1.28.0 |
|
|
|
# gcc/glibc |
|
GCCVER=10.5.0 |
|
GLIBCVER=2.28 |
|
|
|
# patchelf |
|
PEVER=0.18.0 |
|
|
|
ARCH=$(uname --machine) |
|
printf -v NOW '%(%FT%H:%M)T' |
|
|
|
main() { |
|
|
|
if ! docker buildx ls |grep -q ^nocliplogs |
|
then |
|
docker buildx create --name nocliplogs \ |
|
--driver-opt env.BUILDKIT_STEP_LOG_MAX_SIZE=-1 \ |
|
--driver-opt env.BUILDKIT_STEP_LOG_MAX_SPEED=-1 |
|
fi |
|
|
|
if [[ ! -e "$HOME/.vscode-sysroot" ]] |
|
then |
|
docker buildx build --builder nocliplogs --progress=plain \ |
|
--build-arg NOBLEREL="$NOBLEREL" \ |
|
--build-arg CTVER="$CTVER" \ |
|
--build-arg GCCVER="$GCCVER" \ |
|
--build-arg GLIBCVER="$GLIBCVER" \ |
|
--build-arg ARCH="$ARCH" \ |
|
--target=export-sysroot --output=type=local,dest="$HOME" . |
|
|
|
fi |
|
|
|
if [[ ! -x "$HOME/.vscode-sysroot/bin/patchelf" ]] |
|
then |
|
pushd "$HOME/.vscode-sysroot" |
|
PEDL="https://github.com/NixOS/patchelf/releases/download/$PEVER/patchelf-$PEVER-$ARCH.tar.gz" |
|
curl --location "$PEDL" | |
|
tar --extract --gzip --wildcards '*/bin' '*/share' |
|
popd |
|
fi |
|
|
|
if [[ -e "$HOME/.ssh/environment" ]] |
|
then |
|
|
|
cp -p "$HOME/.ssh/environment" "$HOME/.ssh/environment.$NOW" |
|
grep -v VSCODE_SERVER_ "$HOME/.ssh/environment.$NOW" >"$HOME/.ssh/environment" ||: |
|
fi |
|
cat >>"$HOME/.ssh/environment" <<-EOF |
|
VSCODE_SERVER_CUSTOM_GLIBC_LINKER="$HOME/.vscode-sysroot/lib/ld-linux-${ARCH/_/-}.so.${GLIBCVER::1}" |
|
VSCODE_SERVER_CUSTOM_GLIBC_PATH="$HOME/.vscode-sysroot/usr/lib" |
|
VSCODE_SERVER_PATCHELF_PATH="$HOME/.vscode-sysroot/bin/patchelf" |
|
EOF |
|
|
|
# shellcheck disable=SC1091 |
|
source "$HOME/.ssh/environment" |
|
test -e "$VSCODE_SERVER_CUSTOM_GLIBC_LINKER" || |
|
echo "ERROR: Missing file VSCODE_SERVER_CUSTOM_GLIBC_LINKER: $VSCODE_SERVER_CUSTOM_GLIBC_LINKER" |
|
test -d "$VSCODE_SERVER_CUSTOM_GLIBC_PATH" || |
|
echo "ERROR: Missing file VSCODE_SERVER_CUSTOM_GLIBC_PATH: $VSCODE_SERVER_CUSTOM_GLIBC_PATH" |
|
test -x "$VSCODE_SERVER_PATCHELF_PATH" || |
|
echo "ERROR: Missing file VSCODE_SERVER_PATCHELF_PATH: $VSCODE_SERVER_PATCHELF_PATH" |
|
|
|
if ! grep '^PermitUserEnvironment yes$' /etc/ssh/sshd_config |
|
then |
|
echo 'Make sure /etc/ssh/sshd_config has PermitUserEnvironment yes' |
|
echo 'and sshd is restarted.' |
|
fi |
|
} |
|
|
|
main |
|
exit |