소개

  • 기존에 쓰던 방법은 버전이 너무 오래되었거나 자신의 환경에 맞게 설치하기가 어려웠다.

  • Windows 10, 11 에서 WSL2를 이용한 Alpine 설치를 최종 정리한다.

  • 설치 뿐만 아니라 필요한 환경(docker, git 등)을 자동으로 구성하도록 한다.

  • 기본적인 테스트를 하고 추가 패키지를 보완한 후 이미지를 백업한다.

  • 추후 Windows를 재설치하거나 기타 문제가 발생할 경우 백업 이미지를 복원한다.

  • 또는 다른 PC로 백업 이미지를 사용할 때도 유용하다.

  • 최소설치만 적용해서 설치파일이나 백업파일을 만들어 두면 빠른 백업, 복구를 할 수 있다.

  • 나머지는 모두 git으로 불러오면 그만이다.

  • Windows version: 11

  • WSL version: 2.5.9.0

  • alpine version: 3.22

  • docker version: 28.2.2

  • git version 2.49.0

설치: Install

  • 먼저 적당한 작업 폴더(ex D:\Linux)를 만들고 PowerShell을 실행한다.
  • 작업 폴더에 alpine minirootfs를 다운 받는다.
  • PowerShell에서 wsl로 설치한다.
  • 설치완료 후 바로 alpine으로 연결되고 # 프롬프트가 뜬다.
  • 이 경우 작업 폴더가 유지되므로 vi로 스크립트를 작성하고 실행해준다.
  • 또는 쉘 내에서 필요한 작업을 직접해도 된다.
  • 작업이 끝나면 wsl를 종료하고 재실행한다.
  • 추후에 재설치 작업을 할 경우 기존 wsl alpine을 제거하고 wsl 설치와 스크립트만 실행하거나 백업된 이미지를 복원하는 방식으로 진행하면 되겠다.

Alpine minirootfs 설치

  1. Alpine mini root filesystem (x86_64)를 다운로드
  2. wsl에 설치: PowerShell
    • --name <WSL 이름> --from-file <Alpine minirootfs파일 경로>
PS> wsl --install --name Alpine322 --from-file alpine-minirootfs-3.22.0-x86_64.tar.gz
  • wsl 설치 폴더: %userprofile%\AppData\Local\Packages\Canonical...\LocalState\ext4.vhdx
  • Windows 탐색기 경로: \\wsl$\Alpinexxx path
  • WSL Alpine에서 윈도우즈 파일 시스템 접근: cd /mnt/c/Users/XXXX

이후 패키지 설치 및 설정 작업

# ./install-alpine-wsl.sh
# exit
  • PowerShell에서 alpine 재실행
PS> wsl --shutdown
PS> wsl -d Alpine322
  • Install Setup Script: D:\Linux\install-alpine-wsl.sh
    • 다음을 참고해서 자신에게 필요한 내용을 첨삭하면 된다.
    • 아래의 경우는 User를 생성하고 Local Time을 KST로 했다.
    • Docker를 위해 openrc, docker설치 및 일반유저(borisu)에게 그룹권한 설정을 적용.
    • Shell은 최소한의 쉘 ash를 사용 (대부분의 사용환경은 Docker를 이용할 예정)
    • ssh, git 설치와 전에 사용 중이던 .ssh 폴더를 사용자 홈에 추가.
#!/bin/sh
# install-alpine-wsl.sh

# Var Set
HOST='Alpine322'
USER='borisu'
TZ='Asia/Seoul'
PKGS='tzdata doas git openssl openssh openrc docker'
WSLCONF='/etc/wsl.conf'

# HostName Set: $HOST: wsl change method
echo -e "[network]\nhostname = $HOST\n" > $WSLCONF

# TimeZone Set: Asia/Seoul
echo "---> Time Zone Set: $TZ"
cp /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone

# User Set
echo "---> User Set: ${USER} id:1000"
adduser -D -h /home/${USER} -s /bin/ash $USER
addgroup borisu docker
echo "permit nopass $USER as root" > /etc/doas.d/doas.conf
echo -e "[user]\ndefault = borisu\n" >> $WSLCONF

# Openrc Setup
echo "---> Openrc Setup for Docker of user $USER"
touch /etc/network/interfaces
rc-update add docker default
#rc-update
echo -e "[boot]\ncommand = \"openrc default\"\n" >> $WSLCONF

# Copy Files User Data
echo "---> Copy Files User Data: .profile .ashrc .gitconfig .ssh/ "
su - $USER -c "mkdir git"
su - $USER -c "tar xvf $PWD/user.tar"
  • default user setup: PowerShell (/etc/wsl.conf에 설정해서 넣어두면 아래 작업 불필요)
PS> wsl --manage Alpine322 --set-default-user borisu

백업: Export

  • 사용 중 어느 시점에서 백업하는 방법이다.
  • 현재 디렉토리에 Alpine322.tar로 백업된다.
  • 백업 전에 wsl -t로 alpine 중지.
PS> wsl -l -v
PS> wsl -t Alpine322
PS> wsl --export Alpine322 .\Alpine322.tar

제거: Unregister

  • 설치된 WSL을 제거하는 방법이다.
  • 제거 전에 반드시 백업이 되어 있는 지 확인한다.
PS> wsl -l -v
PS> wsl -t Alpine322 # optional
PS> wsl --unregister Alpine322
PS> wsl -l -v

복구: Import

  • 복구할 경우에는 아래 세 개의 인자가 있으므로 유의한다.

  • 복구할 때 기존 다른 WSL과 이름이 충돌하지 않도록 한다.

  • 복구 시 두 번째 인자(WSL_STORE_DIR)에 이미지가 저장되므로 유의하자.

  • usage: wsl --import <WSL_NAME> <WSL_STORE_DIR> <WSL_IMPORT_FILE_DIR>

  • Imported Folder : <WSL_STORE_DIR> (ex. c:\WSL\Alpine322\ext4.vhdx)

PS> wsl --import Alpine322 c:\WSL\Alpine322 .\Alpine322.tar