bootable custom ubuntu 20.04 iso 만들기

ubuntu 20.04 live server용 이미지 다운로드

# wget https://releases.ubuntu.com/20.04.4/ubuntu-20.04.4-live-server-amd64.iso

해당 이미지의 파일로 다운 받는다. 그렇지 않으면 cloud-init이 동작하지 않을 수 있다.

 

iso 파일의 내부 파일을 디렉토리로 복사

# mkdir iso-mount
# mkdir iso-files

# mount ubuntu-20.04.4-live-server-amd64.iso iso-mount
# rsync -rtlv iso-mount/ iso-files/

 

iso를 재구성하기 위한 패키지 설치

apt install -y p7zip-full xorriso isolinux

 

 

iso-files 디렉토리의 파일을 신규 iso로 만드는 방법

만들어진 go(golang) 패키지에 go.mod(Modules) 추가하기 (1.15 이하 버전을 1.16이상 버전으로 컨버팅)

go(golang) 1.16 버전 이후, go.mod를 사용하도록 강제되었다.
이런 이유로 1.15 버전으로 만들어진 패키지를 실행하기 위해서 패키지를 설치하면 아래와 같은
오류가 잔뜩 발생한다.

 % go run read_config.go
read_config.go:4:5: no required module provides package gopkg.in/gcfg.v1: go.mod file not found in current directory or any parent directory; see 'go help modules'

 

그렇다고 필요 패키지를 설치하려면 오류가 발생해서 workaround로 아래 설정해주려니 잠시는 되어도 호환성 문제가 발생한다.

ubuntu iso 부팅(grub)으로 OS 설치 시, 디스크 재구성 실패 해결하기

ubuntu의 ISO를 디스크에 저장해서 grub로 부팅해보면 ISO 파일이 위치한 디스크를 재구성이 불가능하게
비활성화가 된다.

이런 경우 설치 메뉴에서 console로 전환하여 아래와 같이 명령어를 실행해서 /iosdevice를 umount하면 ISO
파일이 위치한 디스크 재구성이 가능하다.

# umount -f -l /isodevice

 

만약 grub -> 디스크 -> ISO-> cloud-init로 시스템을 구성한다면 아래와 같이 "early-commands"를 통해서
umount를 구현할 수 있다.

간단한 방법으로 cloud-init(autoinstall)에 사용할 user-data 정보 구하기

ubuntu 설치 자동화(autoinstall)를 위한 user-data를 만들어 내려면 문법 하나만 잘못해서 오류가 많이 난다.
특히 스토리지 설정은 아주 까다로워서 단어 하나 숫자 계산하나만 틀려도 오류를 뿜어 내면서 재설치를 해야
하는 경우가 생긴다.

그런 이런 "user-data를 쉽게 뽑아낼 수 있는 방법은 없는 것인가?"에서 이것도 방법이 존재한다.
일단 ubuntu로 시스템에 OS를 설치한다.

그리고 "/var/log/installer/" 디렉토리가 생성되어 있는데 해당 디렉토리에는 설치 시, 사용한 설정 파일과
각종 로그가 저장되어 있다.

ubuntu에서 grub를 통한 ISO 부팅

ubuntu를 설치할 경우가 있다. 특히 처음 설치가 필요하거나 재설치가 필요한 경우에 간단하게 ISO 파일만으로
재설치해보고 싶은 경우도 있다. 이런 경우 iso를 다운 받아서 해당 iso를 grub와 적절히 설정해주면 부팅 시
설정된 ISO를 통해 부팅이 가능하다.

이런 경우 하드웨어 및 Linux에 대해서 좀 알 필요가 있는데, 일반적으로 아래와 같은 예제로 하면 된다.

 

디스크 구성 현황

/dev/nvme0n1          - OS 디스크
  - /dev/nvme0n1p1    - OS 설치 파티션

/dev/sda              - 데이터 저장
  - /dev/sda1         - GPT 파티션 (/data)

/dev/sda              - 데이터 저장
  - /dev/sdb1         - GPT 파티션 (/data1)