์ปจํ ์ด๋ (WSL, Docker, LXC ๋ฑ)์ ๊ฒฝ์ฐ ๊ฐ๊ธ์ ์ด ํฌ์คํธ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฉํ์ธ์.
AMD64 (x86-64) ์ด์ธ์ ์ํคํ ์ฒ์ ๊ฒฝ์ฐ ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
VS Code Server๊ฐ ์๊ธฐ์น ๋ชปํ ๋์์ ํ ์ ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
Could not establish connection to "(Server Name)":
The remote host does not meet the prerequisites for running VS Code Server.
์๊ฒฉ ํธ์คํธ๊ฐ VS Code Server๋ฅผ ์คํํ๊ธฐ ์ํ ํ์ ๊ตฌ์ฑ ์์๋ฅผ ์ถฉ์กฑํ์ง ์์ต๋๋ค.
์ธํธ๋ก
๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋๋ Remote - SSH, WSL, Docker ์ปจํ
์ด๋ ๋ฑ์ผ๋ก์ ํธ๋ฆฌํ ์ฐ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ 2025๋
3์ ๋ฆด๋ฆฌ์ฆ๋ 1.99 ๋ฒ์ ๋ถํฐ๋ Ubuntu 18.04 ๋ฑ ๊ตฌ๋ฒ์ ๋จธ์ ์ผ๋ก์ ์ฐ๋์ด ๋ถ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ด๋ ์ฐ๋์ ์ํ VS Code Server์ ์๊ตฌ์ฌํญ ์ค glibc
์ต์ ๋ฒ์ ์ด ๊ธฐ์กด 2.27์์ 2.28๋ก ์ฌ๋ผ๊ฐ์, ๊ธฐ์กด ๋ฐฉ์๋๋ก๋ VS Code Server์ ์ค์น๊ฐ ์๋๊ธฐ ๋๋ฌธ์
๋๋ค. Ubuntu 18.04 LTS์ ๋ด์ฅ glibc
์ ๋ฒ์ ์ 2.27์
๋๋ค.
๋คํ์ค๋ฝ๊ฒ๋ VS Code ๊ณต์ ๋ฌธ์์ workaround๊ฐ ์ ์๋์ด ์์ต๋๋ค. ๋ฐฉ๋ฒ์ ์ฆ VS Code ๋ฒ์ ์์ฒด๋ฅผ ๋ฎ์ถ๊ฑฐ๋, Crosstool-ng์ ์ด์ฉํ ์ปค์คํ sysroot์ ๋น๋, ๊ทธ๋ฆฌ๊ณ ์ด ์ปค์คํ sysroot๋ฅผ ํ๊ฒฝ ๋ณ์๋ก ์ง์ ํ์ฌ VS Code Server๊ฐ ์ด๋ฅผ ์ด์ฉํ๊ฒ๋ ๋ง๋๋ ๊ฒ์ธ๋ฐ์, ๋ฌธ์ ๋ ํด๋น ๋ฌธ์์ ์ผ๋ถ ๋๋ฝ๋ ๋ด์ฉ๊ณผ ํจ๊ป, ํน์ดํ ๋ฒ๊ทธ(๋ก ์ถ์ ๋๋ ๋ฌด์ธ๊ฐ)๋ก ์ธํด ๊ทธ๋๋ก ๋ฐ๋ฅด๋ฉด ์ ์ฉ์ด ์ ๋๋ก ์๋๋ค๋ ์ ์ ๋๋ค.
ํ์ฌ, ์ด๋ฒ ํฌ์คํธ์์๋ VS Code์ Remote - SSH๋ก Ubuntu 18.04 LTS ๋จธ์ ์ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ์ด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฐธ๊ณ ๋ก ์ VS Code ์ค์น ํ๊ฒฝ์ Windows 11 Pro์ด๋ฉฐ, VS Code Server ์ฐ๋ ๋์ ๋จธ์ ์ Ubuntu 18.04 LTS๊ฐ ๊ตฌ๋๋๋ VM์ ๋๋ค.
์๋ ์๊ฐํด๋๋ฆด ๋ฐฉ๋ฒ์ ์์ ์ปค๋๋ก ๊ตฌ๋๋๋ VM ๋ฐ ์ค์ OS๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์ปจํ ์ด๋ (WSL, LXC, Docker ๋ฑ)์ ๊ฒฝ์ฐ ์ด ํฌ์คํธ์ ๋ฐฉ๋ฒ๋๋ก ์ ์ฉํ์๊ธฐ๋ฅผ ๊ถํฉ๋๋ค.
Bash ์คํฌ๋ฆฝํธ
๋จผ์ , ์ฐ๋ ๋์ ๋จธ์ ์ SSH๋ก ์ ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค. ์ด์ ๋ถํฐ ์ด ์คํฌ๋ฆฝํธ๋ฅผ apply_vsc_server_vm.sh
๋ก ๋ถ๋ฅด๊ฒ ์ต๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ root๋ก ์คํํด์ผ ํ๋ฏ๋ก ์ฐธ๊ณ ํ์ฌ ์งํํด์ฃผ์ธ์.
#!/bin/bash
set -e
# 1) root ๊ถํ ์ฒดํฌ
if [ "$(id -u)" -ne 0 ]; then
echo "์ด ์คํฌ๋ฆฝํธ๋ root๋ก ์คํํด์ผ ํฉ๋๋ค. sudo ๋๋ su๋ฅผ ์ฌ์ฉํ์ธ์."
echo "Error: This script could ONLY be run by the root user. Try sudo or su."
exit 1
fi
# 1a) ์คํ ์๊ฐ ๊ด๋ จ ์๋ด ๋ฐ confirmation
echo "์๋ด: ์ด ์์
์ ํ๋ก์ธ์ ์ฑ๋ฅ์ ๋ฐ๋ผ 5-10๋ถ ์ ๋ ์์๋ฉ๋๋ค. ๊ณ์ํ ๊น์? (y/n)" >&2
echo "Info: This task may take between 5 to 10 minutes, depending on your processor performance. Proceed? (y/n)" >&2
read -r user_input
if [[ "$user_input" != "y" && "$user_input" != "Y" ]]; then
echo "์ค๋จํฉ๋๋ค. Aborting." >&2
exit 1
fi
# 2) ํ์ ํจํค์ง ์ค์น (bison ๋ฑ ์ถ๊ฐ)
apt update
apt install -y build-essential wget patchelf bison gawk m4 texinfo \
gcc g++ gdb gperf bison flex texinfo help2man make libncurses5-dev \
python3-dev autoconf automake libtool libtool-bin bzip2 xz-utils unzip \
tree gawk wget patch rsync meson ninja-build
# 3) glibc 2.28 ๋ค์ด๋ก๋ ๋ฐ ๋น๋ ์ค๋น
GLIBC_VERSION="2.28"
GLIBC_SRC="glibc-$GLIBC_VERSION"
INSTALL_PREFIX="/opt/$GLIBC_SRC"
cd /tmp
wget http://ftp.gnu.org/gnu/libc/$GLIBC_SRC.tar.gz
tar -xzf $GLIBC_SRC.tar.gz
mkdir -p $GLIBC_SRC/build
cd $GLIBC_SRC/build
# 4) configure & make
../configure --prefix=$INSTALL_PREFIX --disable-werror
make -j"$(nproc)"
make install
# 5) ํ๊ฒฝ๋ณ์ ๋ฑ๋ก - /etc/profile.d/vscode-glibc.sh
LINKER="$INSTALL_PREFIX/lib/ld-$GLIBC_VERSION.so"
LIBPATH="$INSTALL_PREFIX/lib"
PATCHELF="$(which patchelf)"
cat > /etc/profile.d/vscode-glibc.sh << EOF
# VSCode Server custom glibc ์ค์ - profile.d
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$LINKER
export VSCODE_SERVER_CUSTOM_GLIBC_PATH=$LIBPATH:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu
export VSCODE_SERVER_PATCHELF_PATH=$PATCHELF
EOF
chmod +x /etc/profile.d/vscode-glibc.sh
# ๋์ผ ์์
- /etc/environment
echo "VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$LINKER" >> /etc/environment
echo "VSCODE_SERVER_CUSTOM_GLIBC_PATH=$LIBPATH:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu" >> /etc/environment
echo "VSCODE_SERVER_PATCHELF_PATH=$PATCHELF" >> /etc/environment
# 6) ์๋ฃ ๋ฉ์์ง
echo "glibc $GLIBC_VERSION ์ค์น ์๋ฃ: $INSTALL_PREFIX"
echo "VS Code Server์ฉ ํ๊ฒฝ๋ณ์ ์ค์ ํ์ผ: /etc/profile.d/vscode-glibc.sh ๋ฐ /etc/environment"
echo " - VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$LINKER"
echo " - VSCODE_SERVER_CUSTOM_GLIBC_PATH=$LIBPATH:/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu"
echo " - VSCODE_SERVER_PATCHELF_PATH=$PATCHELF"
echo "์๋ก์ด SSH ์ธ์
์์ ์ด ์ค์ ์ด ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค."
์์ฑ ํ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
chmod ug+x apply_vsc_server_vm.sh
์ดํ ์๋์ ๊ฐ์ด ๊ถํ์ด ์ ์ ํ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํฉ๋๋ค.
์ด๋ก์จ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ํ ์ค๋น๋ฅผ ๋ชจ๋ ๋ง์น์ จ์ต๋๋ค.
์คํฌ๋ฆฝํธ ์คํ
์คํฌ๋ฆฝํธ๋ root
๋ก ์คํํด์ผ ํ๋ฏ๋ก, ์๋์ ๊ฐ์ด whoami
๋ฅผ ํตํด root
์์ ํ์ธํ ๋ค ์คํํด์ฃผ์ธ์.
์คํฌ๋ฆฝํธ ์คํ์ ๋ง์น ๋ชจ์ต์ ๋๋ค.
ํจ์น ํ์ธ
์คํฌ๋ฆฝํธ ์คํ์ ๋ง์ณค๋ค๋ฉด, ์๋์ ๊ฐ์ด cat /etc/environment
์ ํตํด ์ ์์ ์ผ๋ก ํ๊ฒฝ ๋ณ์ ์ธํ
์ด ๋์๋์ง ํ์ธํด์ฃผ์ธ์. ๋ํ, /opt/glibc-2.28/lib/ld-linux-x86-64.so.2
๋ฅผ ์คํํ์ฌ ๋ง์ปค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํด์ฃผ์ธ์.
VS Code์ Remote - SSH๋ฅผ ์ด์ฉํ ์ฐ๋
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ํจ์น๋ฅผ ๋ง์น ๋ค Remote - SSH๋ฅผ ์ด์ฉํ์ฌ ์ฐ๋ํ ์ ์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋์ ๊ฐ์ด Remotes (Tunnels/SSH)๋ฅผ ์ ํํฉ๋๋ค. ์ดํ ํด๋น ๋จธ์ ์ IP ์ฃผ์ ๋ฐ ํฌํธ๋ฅผ ์ด์ฉํ์ฌ ์ฐ๋ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, "๋น์ ์ ํ์ฌ ๋น์ฃผ์ผ ์คํ๋์ค ์ฝ๋๊ฐ ์ง์ํ์ง ์๋ OS ๋ฒ์ ์ ์ฐ๊ฒฐํ๊ณ ๊ณ์ญ๋๋ค."๋ผ๋ ๋ฉ์์ง๊ฐ ๋จ๋ฉด ์ฑ๊ณต์ ๋๋ค. ํ์ฉ (Allow)์ ๋๋ฅด๋ฉด ์ฐ๋์ด ๋๋ฉ๋๋ค.
๋๋ฒ๊น ๋ ๋ ์ด์ ์ปค๋งจ๋๋ผ์ธ์ด ์๋ VS Code์ ์ฐ๋ํ์ฌ ์ํํ ์ ์์ต๋๋ค.
์ถ๊ฐ ํ
๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ ๋, ๋๊ฐ ๋ด๋ ๋์ ์ป๊ณ ๋ด๋ ํ์ผ์ด ์๊ณ ์คํ๊ถํ(x)๋ ์๋๋ฐ ์ ๋ฐ ์๋ฆฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ด ๋ ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ 32๋นํธ ์ํคํ ์ฒ ํธํ์ฑ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 gcc-multilib
'IT > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ ํ์ธ์.
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!