본문 바로가기

Engineering/Redhat Linux

[Redhat Linux] Kickstart 이미지 만들기

다수의 시스템을 설치하고자 할때, 기본적으로 공통되는 설정, 라이브러리, rpm 들이 있을 것이다.

그런 부분들을 OS 설치 후에 일일히 손으로 바꾸는 것은 너무 귀찮고 불필요한 리소스가 들어간다.

 

나에게 최적화된 OS 이미지를 한번 만들어보자.


[01] iso 파일 가져오기

 

$ mkdir /tmp/CustomISO  #custom할 이미지의 인스턴스들이 복사될 위치
$ mkdir /mnt/mntpoint   #참조할 iso 이미지의 마운트포인트

$ mount -o loop /tmp/ISO/Rocky-8.8-x86_64-dvd1.iso /mnt/mntpoint		#/tmp/ISO 디렉토리에 위치한 OS이미지 마운트
$ cp -aR /mnt/mntpoint/* /tmp/CustomISO					#마운트한 이미지의 인스턴스들을 복사

참조할 iso 이미지를 마운트하고, 이미지의 인스턴스들을 "모두" 복사한다. 숨겨진 파일까지.


[02] ks.cfg 파일 커스텀

위에서 복사했던 파일들 중 ks.cfg 파일이 있을 것이다. 해당 파일에는 기본설정, 설치방법, 부트로더 옵션, 파티션, 네트워크, 패키지 etc. 시스템의 전반적인 환경이 명시되어 있다. 해당 파일을 입맛대로 customizing 해준다.

 

참고로 해당 파일의 이름이 꼭 ks.cfg일 필요는 없다. 후에 나올 부트메뉴에서 파일이름과 일치하게 선언을 해주면 문제없다.

 

예시.

#version=RHEL8
# Use graphical install
graphical

firewall --disabled
firstboot --disabled

repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream

# Keyboard layouts
keyboard --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --hostname=localhost.localdomain

# Use CDROM installation media
cdrom

ignoredisk --only-use=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information

# System timezone
timezone Asia/Seoul --nontp

%packages

@^graphical-server-environment
@debugging
@development
@ftp-server
@system-tools
@web-server
kexec-tools
network-scripts
libnsl
compat-openssl10

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

%post
sed -i -e 's/^GRUB_CMDLINE_LINUX=\"\(.*\)"/GRUB_CMDLINE_LINUX=\"consoleblank=0 net.ifnames=0 biosdevname=0 selinux=0\"/'  /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg

systemctl disable bluetooth
systemctl disable firewalld
systemctl disable NetworkManager
systemctl disable ModemManager
systemctl disable cups
systemctl disable atd
systemctl disable libvirtd
systemctl enable network

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

 

 

 

작성한 ks.cfg에 오류가 없는지 검증할 수 있는 rpm이 있다.

yum install -y pykickstart

ksvalidator ./ks.cfg	#파일 문법 오류 검출 툴. 출력 결과가 없으면 ok

 

 

 

 

ks.cfg는 크게 네가지 section으로 구분된다.

 


 

01) Installation options

설치될 OS의 전반적인 설정을 한다. 방화벽, 언어, selinux 활성여부, 계정 생성, 파티션, 네트워크 등등.

 

나의 경우 방화벽 비활성화, firstboot(LA) 비활성화, graphical installation 등을 설정해주었다.

계정, 파티션, 네트워크 같은 요소는 설치하는 시스템 별로 달라질 수 있는 요소들이라서 설정하지 않았다.

 

02) Packages

시스템에 설치될 패키지들을 정의한다. "%packages" 로 시작하여 "%end"로 끝낸다.

 

03) Pre-installation Configurations

설치 이전에 필요한 사전작업을 정의한다. 이 section은 optional field이다.

나의 경우 설정하지 않았다.

 

04) Post-installation Configurations

설치 완료 후에 필요한 사후작업을 정의한다. 이 section도 역시 optional filed이다.

Kernel CMDLINE 선언, systemd 설정 등을 정의할 수 있다.

 

 


 

[03] 부트메뉴 커스텀

 

열심히 작성한 ks.cfg를 installation booting 과정에 적용을 시켜줘야 한다.

EFI/BOOT/grub.cfg 파일을 열어서 진입할 menuentry의 linuxefi 행 끝에 inst.ks=cdrom:/ks.cfg 를 추가한다.

menuentry 'Install Rocky Linux 8.8' --class fedora --class gnu-linux --class gnu --class os {
   linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Rocky-8-8-x86_64-dvd quiet inst.ks=cdrom:/ks.cfg
   initrdefi /images/pxeboot/initrd.img
}

 

Legacy boot는  isolinux/grub.conf 경로에 추가하면 된다.

 

동일한 위치에 BOOT.conf 파일의 내용이 grub.cfg 파일의 내용과 토씨하나 틀리지 않고 동일한 것을 발견했다. 이 파일은 어디에 쓰는 것일까? 같은 의문을 가진 사람은 나뿐만이 아니었다. 
 

What is the BOOT.conf file used for?

I am trying to create an custom install ISO for RHEL 8. On the installation ISO, there are 2 files in the EFI/BOOT/ directory: BOOT.conf and grub.cfg. The diff command doesn't show any difference b...

unix.stackexchange.com

 

요약하자면, 불필요한 파일처럼 보이며 RHEL 9버전에서는 해당 파일이 삭제되었다고 한다. 긁어 부스럼을 만들기보다는 두 파일 모두 수정해주자.

 


 

[04] iso 이미지 굽기

 

iso 이미지를 만들기 위해서 필요한 rpm이 있다.

yum install -y genisoimage

 

위 rpm을 설치하고 mkisofs 명령어를 통해 이미지를 구워보자.

 

$ mkisofs -o /home/ISO/Rocky-8.8-kickstart.iso -b isolinux/isolinux.bin -J -R -l -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -graft-points -joliet-long -V "Rocky-8-8-x86_64-dvd" .

# /tmp/CustomISO 경로에서 작업했던 파일들을 /home/ISO 디렉토리 밑에 Rocky-8.8-kickstart.iso을 생성

 99.89% done, estimate finish Thu Aug  8 17:00:05 2024
 99.97% done, estimate finish Thu Aug  8 17:00:05 2024
Total translation table size: 2048
Total rockridge attributes bytes: 1029610
Total directory bytes: 1736704
Path table size(bytes): 720
Max brk space used 81a000
6206605 extents written (12122 MB)

$ ls
Oracle-Linux-7.9-legacy-ks.iso  Rocky-8.8-ks.iso