[Linux 리눅스] 리눅스 Kickstart ISO 파일 생성 - BIOS, UEFI 부팅 / Baremetal(USB), VM(CD-ROM) 설정 차이점 비교 (RHEL 8.x)
Environments
Red Hat Enterprise Linux 8.4
VMware vSphere
Kickstart (킥스타트) 설치 가이드
RHEL 8.4 dvd.iso 파일 마운트
vSphere 콘솔에서 CD/DVD 드라이브에 iso 파일이 연결된 것을 확인하고 mount 명령어를 실행한다.
1
2
[root@localhost ~]# mount /dev/sr0 /media
mount: /media: WARNING: device write-protected, mounted read-only.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost media]# ls -rtl
합계 48
-r--r--r--. 1 root root 103 7월 1 2022 media.repo
-r--r--r--. 1 root root 5134 7월 1 2022 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root 1669 7월 1 2022 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root 18092 7월 1 2022 GPL
-r--r--r--. 1 root root 8154 7월 1 2022 EULA
-r--r--r--. 1 root root 1455 7월 1 2022 extra_files.json
dr-xr-xr-x. 2 root root 2048 7월 1 2022 isolinux
dr-xr-xr-x. 3 root root 2048 7월 1 2022 images
-r--r--r--. 1 root root 1796 7월 1 2022 TRANS.TBL
dr-xr-xr-x. 3 root root 2048 7월 1 2022 EFI
dr-xr-xr-x. 4 root root 2048 7월 1 2022 BaseOS
dr-xr-xr-x. 4 root root 2048 7월 1 2022 AppStream
ks_rhel84 디렉토리 생성
킥스타트 파일을 만들어줄 위치에 폴더를 생성한다.
mkdir -p /tmp/ks_rhel84
디렉토리 전체 내용 복사
/media로 마운트된 이미지 파일 내용 전체를 킥스타트를 생성하려는 위치인 /tmp/ks_rhel84로 전체 복사한다.
cp -avp /media/. /tmp/ks_rhel84
ls -rtla
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-r--r--r--. 1 root root 103 7월 1 2022 media.repo
-r--r--r--. 1 root root 60 7월 1 2022 .discinfo
-r--r--r--. 1 root root 5134 7월 1 2022 RPM-GPG-KEY-redhat-release
-r--r--r--. 1 root root 1669 7월 1 2022 RPM-GPG-KEY-redhat-beta
-r--r--r--. 1 root root 18092 7월 1 2022 GPL
-r--r--r--. 1 root root 8154 7월 1 2022 EULA
-r--r--r--. 1 root root 1455 7월 1 2022 extra_files.json
-r--r--r--. 1 root root 1560 7월 1 2022 .treeinfo
dr-xr-xr-x. 2 root root 256 7월 1 2022 isolinux
dr-xr-xr-x. 3 root root 76 7월 1 2022 images
-r--r--r--. 1 root root 1796 7월 1 2022 TRANS.TBL
dr-xr-xr-x. 3 root root 18 7월 1 2022 EFI
dr-xr-xr-x. 4 root root 38 7월 1 2022 BaseOS
dr-xr-xr-x. 4 root root 38 7월 1 2022 AppStream
dr-xr-xr-x. 7 root root 259 7월 1 2022 .
drwxrwxrwt. 10 root root 4096 6월 27 16:35 ..
.discinfo
, .treeinfo
파일까지 복사되었는지 확인하자.
디렉토리 추가 생성
내부 디렉토리 구성은 원하는대로 하면 되는데, 여기서는 kickstart 경로에 ks.cfg 파일을 구성하고, Patch 경로에 커널 업데이트를 위한 패키지 저장을 하려고 다음과 같이 구성했다.
1
2
mkdir -p /tmp/ks_rhel84/kickstart # Kickstart file 저장을 위한 디렉토리
mkdir -p /tmp/ks_rhel84/Patch # 패치 패키지 저장을 위한 디렉토리
디렉토리 권한 추가
복사한 파일 전체에 user 쓰기 권한을 추가한다.
chmod -R u+w /tmp/ks_rhel84/.
패키지 파일 복사 (SFTP 사용)
미리 다운로드 받은 rpm 패키지 파일들을 SFTP 툴을 이용하여 /tmp/ks_rhel/Patch
경로에 복사하고 잘 업로드되었는지 확인한다.
cd /tmp/ks_rhel84/Patch
ls -rtl
1
2
-rw-r--r--. 1 root root 10520280 7월 3 16:14 kernel-4.18.0-305.el8.x86_64.rpm
..SKIP..
Repository 생성
createrepo
명령어를 통해 특정 디렉토리에 있는 RPM 패키지들을 이용해 YUM 리포지토리를 생성한다.
1
createrepo .
repodata 디렉토리가 생성된다.
ls -rtl
1
2
3
-rw-r--r--. 1 root root 10520280 7월 3 16:14 kernel-4.18.0-305.el8.x86_64.rpm
drwxr-xr-x. 2 root root 4096 7월 3 16:14 repodata
..SKIP..
킥스타트 설정 파일 생성
cd /tmp/ks_rhel84
mkdir kickstart && cd kickstart
아래 링크와 /root/ anaconda-ks.cfg를 참고하여 ks.cfg 파일을 작성하여 위 경로에 생성한다.
- https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/performing_an_advanced_rhel_8_installation/creating-kickstart-files_installing-rhel-as-an-experienced-user
- https://access.redhat.com/solutions/60959
repo 구성, yum 패키지 설치, 디렉토리 권한, systemd 서비스 활성화 등 원하는 설정대로 /root/anaconda-ks.cfg 파일을 기반으로 작성하면 된다.
작성할 때 주의할 점은, VM 환경인지 Baremetal 환경인지에 따라 명령어 구성을 다르게 해줘야 한다.
이제 필요한 내용을 변경/삭제/추가하여 커스터마이징 할 것이다.
1
cp /root/anaconda-ks.cfg /tmp/ks_rhel84/kickstart/ks.cfg
1
chmod 644 /tmp/ks_rhel84/kickstart/ks.cfg
테스트한 내용은 실제 고객사 환경이므로 anaconda-ks.cfg 기본 파일에 이해하기 쉽도록 내용을 일부만 추가했다. (#####을 붙인 라인은 VM 설치 환경이고 Baremetal 설치와 비교되는 내용은 파일 아래에 추가 설명있음)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Use CDROM installation media
##### cdrom
harddrive --partition=LABEL=RHEL-8-4-0-KS-x86_64 --dir=/
#version=RHEL8
# Use graphical install
graphical
url --url file:///mnt/intsall/repo/BaseOS
repo --name="AppStream" --baseurl=file:///mnt/install/repo/AppStream
%post --nochroot
cp -r /mnt/install/repo/TEST /mnt/sysroot/mnt/
%end
%post
##### chroot /mnt/sysimage
##### mount -t iso9660 /dev/sr0 /media
##### cat > /etc/yum.repos.d/rhel.repo <<'EOF'
##### [RHEL84_Appstream]
##### name=RHEL84_APP
##### baseurl=file:///media/AppStream
##### enabled=1
##### gpgcheck=0
##### [RHEL84_BaseOS]
##### name=RHEL84_BASE
##### baseurl=file:///media/BaseOS
##### enabled=1
##### gpgcheck=0
##### EOF
##### yum clean all
##### yum update -y
##### yum -y install kernel-4.18.0-513.9.1.el8_9.x86_64
systemctl set-default multi-user.target
systemctl daemon-reload
%end
%packages
@^workstation-product-environment
@backup-client
@container-management
@development
@dotnet-core
@gnome-apps
@graphical-admin-tools
@headless-management
@internet-applications
@legacy-unix
@network-server
@office-suite
@remote-desktop-clients
@rpm-development-tools
@scientific
@security-tools
@smart-card
@system-tools
kexec-tools
kernel-4.18.0-513.9.1.el8_9.x86_64
%end
# Keyboard layouts
keyboard --xlayouts='kr'
# System language
lang ko_KR.UTF-8
# Network information
network --bootproto=dhcp --device=ens192 --ipv6=auto --activate
network --hostname=localhost.localdomain
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# System bootloader configuration
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part /boot/efi --fstype="efi" --ondisk=sda --size=600 --fsoptions="umask=0077,shortname=winnt"
part /boot --fstype="xfs" --ondisk=sda --size=1024
part pv.111 --fstype="lvmpv" --ondisk=sda --size=69760
volgroup rhel --pesize=4096 pv.111
logvol /home --fstype="xfs" --size=5120 --name=home --vgname=rhel
logvol swap --fstype="swap" --size=4056 --name=swap --vgname=rhel
logvol / --fstype="xfs" --size=60568 --name=root --vgname=rhel
# System timezone
timezone Asia/Seoul --isUtc --nontp
# Root password
..skip..
%addon com_redhat_kdump --enable --reserve-mb='auto'
%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
명령어 비교 (VM (CD-ROM) / Baremetal (USB))
Installation Media (Load 위치)
- cdrom
- harddrive –partition=LABEL=RHEL-8-4-0- –dir=/
Repository 설정
- repo 파일 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 cat > /etc/yum.repos.d/rhel.repo <<'EOF' [RHEL84_Appstream] name=RHEL84_APP baseurl=file:///media/AppStream enabled=1 gpgcheck=0 [RHEL84_BaseOS] name=RHEL84_BASE baseurl=file:///media/BaseOS enabled=1 gpgcheck=0 EOF
url –url file:///mnt/intsall/repo/BaseOS
repo –name=”AppStream” –baseurl=file:///mnt/install/repo/AppStream
Packages 설치
yum update -y kernel-4.18.0-513.9.1.el8_9.x86_64
%packages에 패키지명 작성
1 2 3 4 %packages kernel-4.18.0-513.9.1.el8_9.x86_64 ...packages... %end시스템 파일시스템 구조
chroot /mnt/sysimage
명령어를 사용하여 설치된 시스템의 루트 파일 시스템을 새로운 루트 파일 시스템으로 설정, 즉 임시 환경에서 작업
1 2 3 4 5 %post chroot /mnt/sysimage mount -t iso9660 /dev/sr0 /media ..SKIP %end
--nochroot
옵션을 사용하여 설치 중인 시스템의 루트 파일 시스템(/mnt/sysroot
)을 직접 접근하여 작업
1 2 3 %post --nochroot cp -r /mnt/install/repo/TEST /mnt/sysroot/mnt/ %end
USB 부팅 디스크는 설치 환경에 마운트되어 있기 때문에
%post --nochroot
스크립트 내에서 직접 접근하기 어렵다.이 외에 필요한 내용 구성도, CD-ROM / USB 구성 별로 사용 명령어가 다른 점을 이해하고 작성해야 한다.
Booting 항목 파일 수정
Legacy BIOS 부팅 방식인지, UEFI 부팅 방식인지에 따라 수정해야할 파일이 다르다.
Legacy BIOS 부팅
BIOS 부팅 방식의 경우, isolinux.cfg
파일 수정
vi /tmp/ks_rhel84/isolinux/isolinux.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
default vesamenu.c32
timeout 600
display boot.msg
# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png
menu title Red Hat Enterprise Linux 8.4
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
# Border Area
menu color border * #00000000 #00000000 none
# Selected item
menu color sel 0 #ffffffff #00000000 none
# Title bar
menu color title 0 #ff7ba3d0 #00000000 none
# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none
# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none
# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none
# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none
# Help text
menu color help 0 #ffffffff #00000000 none
# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none
# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.
menu tabmsg Press Tab for full configuration options on menu items.
menu separator # insert an empty line
menu separator # insert an empty line
label linux
menu label ^Install Red Hat Enterprise Linux 8.4 Kickstart VM
kernel vmlinuz
append initrd=initrd.img init.ks=cdrom:/kickstart/ks.cfg quiet
menu separator # insert an empty line
# utilities submenu
menu begin ^Troubleshooting
menu title Troubleshooting
label rescue
menu indent count 5
menu label ^Rescue a Red Hat Enterprise Linux system
text help
If the system will not boot, this lets you access files
and edit config files to try to get it booting again.
endtext
kernel vmlinuz
append initrd=initrd.img inst.rescue quiet
label returntomain
menu label Return to ^main menu
menu exit
menu end
OS 부팅 시 나오는 menu를 표시하는 파일이다.
64번째 라인: inst.ks 지시문을 추가 하여 새 부팅 항목을 추가한다.
ex) append initrd=initrd.img init.ks=cdrom:/kickstart/ks.cfg quiet
80번째 라인: append initrd=initrd.img inst.rescue quiet로 변경한다.
- 구조변경 모드로 직접 부팅하도록 지시 및 로그 메시지 최소화(quiet)
참고: USB를 만드는 경우 64번째 라인에서 CDROM을 대상으로 지정하는 대신 “inst.ks=hd:LABEL=RHEL-8-4-0-KS-x86_64:/kickstart/ks.cfg quiet“를 사용해야 한다. 다만, RUFUS로 USB 부팅디스크 생성시 Label이 잘려서
RHEL-8-4-0-
이름으로 진행함
UEFI 부팅
UEFI 부팅 방식의 경우, grub.cfg
파일 수정
1
vi /tmp/ks_rhel84/EFI/BOOT/grub.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
set default="1"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set timeout=60
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'RHEL-8-4-0-KS-x86_64'
### BEGIN /etc/grub.d/10_linux ###
menuentry '############## Warning: you enter KickStart Boot Menu #################' --class warning {
linuxefi /PRESS_ENTER_AND_GOING_BACK_TO_BOOT_MENU ks=/dev/sda1
initrdefi /hello
}
menuentry 'Install RHEL 8.4 Kickstart VM' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.ks=cdrom:/kickstart/ks.cfg quiet
initrdefi /images/pxeboot/initrd.img
}
submenu 'Troubleshooting -->' {
menuentry 'Rescue a Red Hat Enterprise Linux system' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.rescue quiet
initrdefi /images/pxeboot/initrd.img
}
}
OS 부팅 시 나오는 menu를 표시하는 파일이다.
20번째 라인: search –no-floppy –set=root -l ‘RHEL-8-4-0-KS-x86_64’ 로 변경
ISO 파일 생성 명령어 입력 시, ‘RHEL-8-4-0-KS-x86_64’ 지정한 라벨 필요
RUFUS를 이용하여 USB 부팅디스크를 만들면 라벨명이 ‘RHEL-8-4-0-‘ 로 잘릴 수 있음을 참고하자.
23~30번째 라인:
1 2 3 4 5 6 7 8 menuentry '############## Warning: you enter KickStart Boot Menu #################' --class warning { linuxefi /PRESS_ENTER_AND_GOING_BACK_TO_BOOT_MENU ks=/dev/sda1 initrdefi /hello } menuentry 'Install RHEL 8.4 Kickstart' --class fedora --class gnu-linux --class gnu --class os { linuxefi /images/pxeboot/vmlinuz inst.ks=cdrom:/kickstart/ks.cfg quiet initrdefi /images/pxeboot/initrd.img }33번째 라인: inst.rescue quiet로 변경
- 구조변경 모드로 직접 부팅하도록 지시 및 로그 메시지 최소화(quiet)
참고: USB를 만드는 경우 64번째 라인에서 CDROM을 대상으로 지정하는 대신 “inst.ks=hd:LABEL=RHEL-8-4-0-KS-x86_64:/kickstart/ks.cfg quiet“를 사용해야 한다. 다만, RUFUS로 USB 부팅디스크 생성시 Label이 잘려서
RHEL-8-4-0-
이름으로 진행함
ISO 파일 생성
킥스타트 설정 파일 토대로 genisoimage를 활용하여 ISO 이미지를 추출할 수 있다.
1
yum install genisoimage
여기서 -V 옵션(볼륨 이름)에 들어가는 내용은 위의 파일들에서 지정한 라벨명으로 해줘야한다. (RUFUS로 USB 부팅디스크 생성시 Label이 잘려서 RHEL-8-4-0-
이름으로 진행)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ks.cfg]
# Baremetal
harddrive --partition=LABEL=RHEL-8-4-0-KS-x86_64 --dir=/
# VM
None
=============================================================
[grub.cfg]
# Baremetal
search --no-floppy --set=root -l 'RHEL-8-4-0-'
# VM
search --no-floppy --set=root -l 'RHEL-8-4-0-KS-x86_64'
=============================================================
[isolinux.cfg]
# Baremetal
append initrd=initrd.img inst.repo=hd:LABEL=RHEL-8-4-0- inst.ks=hd:LABEL=RHEL-8-4-0-:/kickstart/ks.cfg quiet
# VM
append initrd=initrd.img inst.ks=cdrom:/kickstart/ks.cfg quiet
Baremetal 환경에 RUFUS로 USB 부팅디스크 생성 시 RHEL-8-4-0-
로 변경해서 실행했다.
1
mkisofs -o /tmp/rhel-8.4-kickstart.iso -V "RHEL-8-4-0-KS-x86_64" -input-charset utf-8 -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot -J -joliet-long -R -T /tmp/ks_rhel84
위 명령어를 실행하면 /tmp/ks_rhel84
디렉토리에 있는 파일들을 기반으로 부팅 가능한 ISO 이미지 파일인 /tmp/rhel-8.4-kickstart.iso
가 생성되며, 이 ISO 파일은 BIOS 및 UEFI 기반 시스템에서 모두 부팅 가능하다.
- 옵션 설명
-o [File name]
: 생성될 ISO 파일의 출력 경로와 파일명 지정-V
: ISO 볼륨 이름 설정(위에서 지정한 라벨명)-input-charset utf-8
: 입력 파일 시스템의 문자 인코딩 지정-b
: 부팅 이미지 지정
- isolinux/isolinux.bin 파일을 사용하여 BIOS 기반 시스템에서 부팅할 수 있게 함
-c
: 부팅 카탈로그 파일 경로 지정-no-emul-boot
: 실제 하드웨어와 같은 방식으로 부팅하도록 설정-boot-info-table
: 부팅 정보 테이블을 생성하여 ISO 이미지에 포함시킴-boot-load-size 4
: 부팅 이미지의 로드 크기를 4섹터로 설정-eltorito-alt-boot
: 두 번째 부팅 이미지를 지정할 수 있게 하는 옵션-e
: EFI 시스템 파티션 이미지 지정
- images/efiboot.img 파일을 사용하여 UEFI 기반 시스템에서 부팅할 수 있게 함
-J
: Joliet 확장 활성화로 Windows에서 긴 파일 이름 지원-R
: Rock Ridge 확장을 활성화하여 유닉스 파일 속성(파일 소유권, 심볼릭 링크 등)을 지원-T
: 파일 트리 정보 포함/tmp/ks_rhel84
: ISO 이미지에 포함될 파일들이 있는 디렉토리 경로 지정
1
2
3
4
5
6
7
8
9
10
11
...
99.70% done, estimate finish Thu Jul 4 14:06:24 2024
99.78% done, estimate finish Thu Jul 4 14:06:24 2024
99.86% done, estimate finish Thu Jul 4 14:06:24 2024
99.95% done, estimate finish Thu Jul 4 14:06:24 2024
Total translation table size: 2450633
Total rockridge attributes bytes: 1108291
Total directory bytes: 1675264
Path table size(bytes): 564
Max brk space used 9ef000
6003280 extents written (11725 MB)
이렇게 완료가 되면, 파일이 잘 생성된 것을 확인할 수 있다.
1
2
[root@localhost tmp]# ls -rtl /tmp/rhel-8.4-kickstart.iso
-rw-r--r--. 1 root root 12294717440 7월 4 14:06 /tmp/rhel-8.4-kickstart.iso
알아둘 점
BIOS, UEFI 부팅 모드가 다른 경우는, 각각 변경해줘야 하는 파일(isolinux.cfg, grub.cfg)이 다르기 때문에 하나의 iso 파일에 2가지 모드를 동시에 설정해 줄 수 있다. (부팅모드를 모르면 2개 파일을 다 구성하여 iso 파일을 만들면된다.)
Baremetal(USB)과 VM(CD-ROM)은 1개의 ks.cfg 파일 내에서 다르게 구성해야하므로, 동시에 설정을 못하고 각각 iso 파일을 따로 만들어야하며 변경해야할 요소가 더 많다.
Comments powered by Disqus.