설치 디스크 이미지를 마운트할 수 없는 서버에 사용자 지정 리눅스 배포판을 설치하는 방법

이 글에서는 설치 디스크 이미지를 마운트할 수 없는 서버에 원하는 리눅스 배포판을 설치하는 방법을 다룬다.

시작하기 전에

최소 요구 사항

  • 호스팅 사에서 VNC와 같은 원격 제어 솔루션을 제공해야 한다.
  • 복구 모드(Rescue Mode)로 부팅할 수 있거나 ISO 마운트가 가능한 호스팅 사의 경우, 설치 디스크 이미지 파일을 미리 만들고 dd를 통해 부팅 디스크를 덮어씌우는 방식이 더 편리하다.
    • 단, 이 방법을 사용하는 경우 충분한 메모리 용량이 있어야 한다.
  • 설치 디스크 파티션을 fdisk, resize2fs, split 등을 통해 관리하는 방법을 알고 있다고 가정한다.
  • 직접 내려받을 수 있는 설치 디스크 이미지의 링크(Direct Download Link)가 사전에 준비되어야 한다.

시연 환경 및 정보

  • CentOS 7 Minimal이 설치된 QEMU-KVM 기반의 가상 서버 환경에서 시연하였다.
  • IPv4를 사용하는 네트워크 환경임을 가정한다.
    • IPv6만 사용하는 환경에서는 일부 명령이 제대로 동작하지 않거나, curl을 통해 각종 파일들을 내려받을 때 프락시 사용이 요구될 수 있다.
  • DHCP를 사용하지 않는 네트워크 환경임을 가정한다.
  • 이 글은 AndersonIncorpinstall.md를 참고하여 투고하였다.

설치 과정

TinyCoreLinux 설치하기

우선 터미널에 아래 명령어를 입력하여 TinyCoreLinux 설치 디스크 이미지를 /boot/CorePure64-15.0.iso에 내려받자.

# TinyCoreLinux 설치 디스크 이미지 내려받기
curl http://www.tinycorelinux.net/15.x/x86_64/release/CorePure64-15.0.iso -o /boot/CorePure64-15.0.iso

설치 디스크 이미지를 내려받았다면 아래 명령어를 통해 /etc/grub.d/40_custom을 수정하자.

# /etc/grub.d/40_custom 파일 수정
vi /etc/grub.d/40_custom

/etc/grub.d/40_custom 파일을 다음과 같이 수정한다.

# 파티션 구성이 (hd0,msdos1)일 때 기준
menuentry "CorePure64-15.0.iso" {
    loopback loop (hd0,msdos1)/boot/CorePure64-15.0.iso
    linux (loop)/boot/vmlinuz64
    initrd (loop)/boot/corepure64.gz
}

아래 명령어 중 하나를 사용하여 Grub 설정 파일을 갱신한다.

# 둘 중 하나의 명령어가 사용됨
grub2-mkconfig -o /boot/grub2/grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg

이후 reboot을 사용하여 서버를 재가동하고, TinyCoreLinux로의 부팅을 진행한다.

네트워크 설정 및 파티션 테이블 백업하기

먼저 DHCP를 사용하지 않는 네트워크일 경우 아래 명령어를 통해 IP를 수동으로 지정한다.
이 강의에서 IP 주소는 192.0.2.1이라 가정한다.

# root 사용자 계정으로 변경
sudo su
# DHCP 클라이언트 중단
pkill udhcpc
# eth0 장치의 IP 설정, 이더넷 장치명이 eth0가 아닐 경우 ifconfig를 통해 확인 후 수정
ifconfig eth0 192.0.2.1 netmask 255.255.255.0
# 기본 게이트웨이 설정
route add default gw 192.0.2.1 eth0
# 기본 네임서버를 Cloudflare의 1.1.1.1로 설정
echo -e "nameserver 1.1.1.1\nnameserver 1.0.0.1" > /etc/resolv.conf
# eth0 활성화
ifconfig eth0 up
# google.com으로 ping을 보내 연결 테스트
ping -c 4 google.com
# 기본 사용자 계정으로 이동하기 위해 연결 종료
exit

이후 resize2fs가 포함된 e2fsprogsfdisk, sfdisk, cfdisk가 포함된 util-linux, wget이 포함된 openssl을 설치한다.

# e2fsprogs, util-linux, openssl 설치
tce-load -wi e2fsprogs
tce-load -wi util-linux
tce-load -wi openssl

그다음 /boot 파티션을 마운트하고 파티션 테이블을 저장한다.
기존 OS가 설치된 디스크 및 파티션이 각각 /dev/vda, /dev/vda1이라고 가정한다.

# root 사용자 계정으로 변경
sudo su
# 현재 디스크 및 파티션 목록 확인
fdisk -l
# /mnt에 /dev/vda1 마운트
mount /dev/vda1 /mnt
# /dev/vda의 파티션 테이블을 /mnt/partition_table에 파일로 저장
# 복구 시 sfdisk /dev/vda < /mnt/partition_table 입력
sfdisk -d /dev/vda > /mnt/partition_table
# /mnt 마운트 해제
umount /mnt

파티션 관리 및 설치 디스크 이미지 내려받기

⚠️ 계속 진행하기 전에 파티션 관리 방법을 반드시 숙지한 상태여야 한다.
문제가 발생할 경우 위 과정을 처음부터 끝까지 다시 진행해야 할 수 있다.

이 장에서는 기존 OS가 설치된 파티션의 크기를 축소하고, 새 파티션을 만들어 설치 디스크 이미지를 내려받는다.

먼저 기존 OS가 설치된 파티션을 축소해야 한다면 다음 명령어를 수행한다. 파티션을 축소할 필요가 없다면 건너뛰어도 무방하다.

# /dev/vda의 파티션 목록 표시
fdisk -l /dev/vda
# 파티션 크기 조정 전 무결성 검증
e2fsck -f /dev/vda1
# /dev/vda1의 크기 조정 (K, M, G, ... 단위로 설정 가능)
resize2fs /dev/vda1 32G

이후 아래 명령어를 통해 파티션 테이블을 관리한다.

# /dev/vda의 파티션 목록 표시
fdisk -l /dev/vda
# 파티션 관리 도구 열람
fdisk /dev/vda
# 링크된 게시물과 같은 방법으로 파티션 테이블 관리
# ext4 서명 제거(Remove ext4 signature)를 묻는다면 'N'을 입력하여 거부
# 새 리눅스 배포판이 설치되는 파티션은 /dev/vda2으로 설정

wget을 통해 설치 디스크 이미지를 내려받고, 새 파티션으로 복사한다.
이 글에서는 AlmaLinux의 최신 Minimal 배포판 링크를 사용한다.

# 설치 디스크 이미지 URL 검증
wget --spider --server-response https://repo.almalinux.org/almalinux/9/isos/x86_64/AlmaLinux-9-latest-x86_64-minimal.iso -O /dev/null
# 새 파티션에 설치 디스크 이미지 내려받기
wget https://repo.almalinux.org/almalinux/9/isos/x86_64/AlmaLinux-9-latest-x86_64-minimal.iso -q -O -|dd of=/dev/vda2 bs=4M

Grub 설정 변경 후 설치 디스크 이미지로 부팅하기

여기까지 잘 따라왔다면 reboot을 사용하여 서버를 재가동하고, 기존 OS에서 /etc/grub.d/40_custom 파일을 다시 수정하자.

# /etc/grub.d/40_custom 파일 수정
vi /etc/grub.d/40_custom

이어서 /etc/grub.d/40_custom 파일을 다음과 같이 수정한다.

# RHEL 9 기반 OS, 새 파티션 구성이 (hd0,msdos2)일 때 기준
menuentry "/dev/vda2 AlmaLinux-9-latest-x86_64-minimal.iso" {
    linux (hd0,msdos2)/images/pxeboot/vmlinuz inst.stage2=hd:/dev/vda2
    initrd (hd0,msdos2)/images/pxeboot/initrd.img
}

마지막으로 아래 명령어 중 하나를 사용하여 Grub 설정 파일을 갱신하고, reboot을 통해 서버를 다시 재가동한다.

# 둘 중 하나의 명령어가 사용됨
grub2-mkconfig -o /boot/grub2/grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg

이후 설치 마법사를 따라 설치 과정을 마치고, 설치 이후 기존 파티션을 삭제하고 새 OS가 설치된 파티션을 확장하면 끝이 난다.