Lobsters

Deploying Guix images on Linode

Linode에 Guix 이미지 배포하기

Guix Cookbook의 Debian 이미지 변환 방식 대신, Guix 시스템 이미지를 직접 만들어 Linode에 올리는 절차를 설명합니다. 가상 디스크와 부팅 설정, 파일 시스템 확장, 네트워크·SSH 구성을 맞추고 `guix deploy`로 운영체제를 관리합니다.

AI 요약

Linode에서 Guix를 실행하려면 기존 안내처럼 Debian 이미지로 서버를 만든 뒤 Guix 시스템으로 바꿀 수도 있지만, 글쓴이는 처음부터 바로 배포할 수 있는 Guix 디스크 이미지를 만드는 방법을 정리합니다. 구성에는 부팅 과정에서 필요한 장치와 Linode의 네트워크 동작, 이미지 형식에 맞춘 부트로더 설치가 함께 들어갑니다.

운영체제 구성

Guix 운영체제 설정에서 initrd 모듈에 virtio_scsi를 추가합니다. Linode의 가상 디스크를 초기 RAM 디스크 단계에서 인식하기 위해서입니다. 루트 파일 시스템은 /dev/sda의 ext4 파티션에 연결하고, 스왑은 /dev/sdb를 사용합니다.

부팅 뒤 루트 파일 시스템이 Linode 볼륨 전체 공간을 쓰도록 resize2fs를 실행하는 Shepherd 서비스를 별도로 정의합니다. Guix의 resize-file-system-service는 이 환경의 장치 구성과 맞지 않아 사용할 수 없었다고 설명합니다. 서비스는 사용자 프로세스가 시작된 뒤 지정한 장치에 resize2fs를 실행합니다.

네트워크는 dhcpcd 서비스로 설정합니다. Linode의 IPv6 주소는 SLAAC로 할당되므로, 기본값인 private 대신 hwaddr를 지정해야 IPv6를 받을 수 있습니다. SSH는 공개키 인증만 허용하고 비밀번호 인증은 끕니다. 또한 wheel 그룹에는 비밀번호 없이 sudo를 사용할 권한을 줍니다. 이후 원격에서 guix deploy를 실행할 때 필요한 설정입니다. 방화벽은 nftables 서비스를 사용하며, Guix 데몬에는 다른 Guix 머신이 저장소 항목을 전송할 때 확인할 서명 키를 등록합니다.

이미지 생성과 변환

이미지는 guix system image에 mbr-raw 형식을 지정해 만듭니다. 다만 이 형식에는 MBR과 GRUB 설치 영역이 포함되며, 글쓴이가 확인한 Linode 업로드 이미지에는 루트 파티션만 필요합니다. Guix 이미지에서 루트 파티션은 시작 지점으로부터 1,048,576바이트 떨어져 있습니다. 셸 스크립트는 dd의 블록 크기를 128 KiB로 지정하고 skip=8을 적용해 앞부분을 건너뜁니다. 이어서 결과를 gzip으로 압축합니다. Linode는 업로드 이미지를 gzip 형식으로 요구합니다.

부트로더 설치도 기본 동작과 다르게 구성합니다. 기본 설정처럼 부팅 장치에 grub-install을 실행하지 않고, GRUB 글꼴과 모듈을 루트 파일 시스템의 /boot에 복사합니다. 글에서는 Linode 환경에서 기본 설치 방식이 동작하지 않아 디스크 이미지 생성 시 Guix가 사용하는 방식에 맞췄다고 설명합니다.

Linode에서 부팅

이미지를 업로드해 인스턴스를 만든 뒤에는 기본 설정 프로필로 부팅할 수 없습니다. 글쓴이는 서버를 중지하고 Boot Settings에서 커널을 GRUB 2로 선택한 다음, 파일 시스템 및 부팅 관련 헬퍼 옵션을 모두 끕니다. 설정을 저장하고 다시 부팅하면 SSH로 접속해 guix deploy를 사용한 운영체제 업데이트를 진행할 수 있습니다. 글은 이 과정을 Guix Cookbook에 추가하는 편이 좋겠다고 언급하지만, 별도의 문서 수정 계획은 밝히지 않습니다.

원문: 개인 블로그 / 번역·요약: Trawling