kickstart 통해서 NAVIX 9 OS 설치 자동화에 대해 알아본다.
이 문서에서는 KVM상의 VM을 통해서 kickstart OS 설치하는 방법을 다룬다.
NAVIX 9 KVM (tftp, kickstart 서버) 구성
Baremetal 서버에 KVM Host OS 설치
1) iso 다운로드 (https://dlnavix.navercorp.com/9.7/x86_64/BaseOS/iso/Navix-9.7-x86_64-boot.iso)
2) OS install - minimal로 설치
3) selinux, firewalld disabled
4) reboot
cockpit 설치 및 설정
- 계정 생성 및 wheel 그룹에 연동
[root@kvm ~]# useradd myuser
[root@kvm ~]# passwd myuser
[root@kvm ~]# usermod -aG wheel myuser
- 패키지 설치 및 구동, 서비스 등록
[root@kvm ~]# dnf install -y cockpit cockpit-machines libvirt
[root@kvm ~]# systemctl start cockpit
[root@kvm ~]# systemctl enable cockpit.socket
[root@kvm ~]# systemctl enable --now libvirtd
- cockpit web-console 서비스 listen 상태 확인
[root@kvm ~]# ss -lnptu | grep :9090
tcp LISTEN 0 4096 *:9090 *:* users:(("cockpit-tls",pid=1096,fd=3),("systemd",pid=1,fd=48))
tftp / httpd 설치 및 설정
- 패키지 설치
[root@kvm ~]# dnf install -y tftp-server httpd syslinux-tftpboot
- apache 설정
[root@kvm ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/home/linux" --> 수정
<Directory "/home"> --> 수정
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/home/linux"> --> 수정
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
- 서비스 시작 및 등록
[root@kvm ~]# systemctl enable --now tftp
[root@kvm ~]# systemctl enable --now httpd
repository 디렉토리 구성
[root@kvm ~]# mkdir -p /home/linux/navix
[root@kvm ~]# mkdir /home/iso
[root@kvm ~]# wget https://dlnavix.navercorp.com/9.7/x86_64/BaseOS/iso/Navix-9.7-x86_64-dvd1.iso -P /home/iso
[root@kvm ~]# mount -o loop /home/iso/Navix-9.7-x86_64-dvd1.iso /mnt
[root@kvm ~]# rsync -avr /mnt/ /home/linux/navix
[root@kvm ~]# umount /mnt
tftp 디렉토리 구성
- 공통 파일(커널이미지) 복사
[root@kvm ~]# cp /home/linux/navix/images/pxeboot/vmlinuz /var/lib/tftpboot
[root@kvm ~]# cp /home/linux/navix/images/pxeboot/initrd.img /var/lib/tftpboot
[root@kvm ~]# cp /home/linux/navix/images/install.img /var/lib/tftpboot
- EFI 관련 파일 복사
[root@kvm ~]# cp /home/linux/navix/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot
[root@kvm ~]# cp /home/linux/navix/EFI/BOOT/grubx64.efi /var/lib/tftpboot
[root@kvm ~]# cp /home/linux/navix/EFI/BOOT/grub.cfg /var/lib/tftpboot
- BIOS 관련 파일 복사
[root@kvm ~]# dnf install -y syslinux-tftpboot (관련된 파일이 /tftboot에 설치됨)
[root@kvm ~]# cp /tftpboot/pxelinux.0 /var/lib/tftpboot/
[root@kvm ~]# cp /tftpboot/ldlinux.c32 /var/lib/tftpboot/
[root@kvm ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
grub 설정
- EFI 관련 grub 설정
[root@kvm ~]# vim /var/lib/tftpboot/grub.cfg
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 'Navix-9-7-BaseOS-x86_64'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'kickstart - navix' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /vmlinuz \
ip=dhcp inst.repo=http://192.168.122.1/navix \
inst.ks=http://192.168.122.1/navix.ks
initrdefi /initrd.img
}
- BIOS 관련 grub 설정
[root@kvm ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default linux
prompt 1
timeout 50
label linux
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.122.1/navix/ inst.ks=http://192.168.122.1/navix.ks ip=dhcp
- 퍼미션 설정
[root@kvm ~]# chmod -R 755 /var/lib/tftpboot
dhcp 설정 (EFI 펌웨어 모드로만 동작)
[root@kvm ~]# virsh net-edit default
<network>
<name>default</name>
<uuid>8a0f5dc6-6a89-4198-832d-39984c327e1e</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:16:d0:e9'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<tftp root='/var/lib/tftpboot'/> --> 추가
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
<bootp file='BOOTX64.EFI' server='192.168.122.1'/> --> 추가
</dhcp>
</ip>
</network>
- 적용
[root@kvm ~]# virsh net-destroy default
[root@kvm ~]# virsh net-start default
- 적용 확인
[root@kvm ~]# virsh net-dumpxml default
-> dhcp 서버 역할을 qemu-kvm을 통해 동작
dhcp 설정 (EFI / BIOS 펌웨어 모드 모두 동작)
[root@kvm ~]# virsh net-edit default
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0' connections='1'>
<name>default</name>
<uuid>8a0f5dc6-6a89-4198-832d-39984c327e1e</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:16:d0:e9'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<tftp root='/var/lib/tftpboot'/> --> 추가
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
<dnsmasq:options> --> 추가 (아래 6개 라인 포함)
<dnsmasq:option value='dhcp-match=set:bios,option:client-arch,0'/>
<dnsmasq:option value='dhcp-match=set:efi64,option:client-arch,7'/>
<dnsmasq:option value='dhcp-match=set:efi64,option:client-arch,9'/>
<dnsmasq:option value='dhcp-boot=tag:bios,pxelinux.0,192.168.122.1'/>
<dnsmasq:option value='dhcp-boot=tag:efi64,BOOTX64.EFI,192.168.122.1'/>
</dnsmasq:options>
</network>
- 적용
[root@kvm ~]# virsh net-destroy default
[root@kvm ~]# virsh net-start default
- 적용 확인
[root@kvm ~]# virsh net-dumpxml default
-> 첫 라인에 network xmlns 선언을 해야 아래 dnsmasq:options가 반영된다.
ks(kickstart) 설정 파일 작성
- passwd hash 값 생성
[root@kvm ~]# openssl passwd -6
Password:
Verifying - Password:
--> passwd용 hash 값 출력
- kickstart config 생성
[root@kvm ~]# vi /home/linux/navix.ks
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
keyboard --vckeymap=kr --xlayouts='us'
lang en_US.UTF-8
repo --name="BaseOS" --baseurl=http://192.168.122.1/navix/BaseOS/
repo --name="AppStream" --baseurl=http://192.168.122.1/navix/AppStream/ --install
# Network information
network --bootproto=dhcp
network --hostname=pxe-ksinstall
%packages --ignoremissing --excludedocs
@^minimal-environment
%end
%pre
%end
# Generated using Blivet version 3.6.0
ignoredisk --only-use=vda
zerombr
# Partition clearing information
clearpart --all --initlabel --drives=vda
autopart --type=lvm
bootloader --boot-drive=vda
# System timezone
timezone Asia/Seoul --utc
# Root password
rootpw --iscrypted --allow-ssh ###여기에 openssl 명령으로 생성한 passwd hash 입력###
shutdown
VM 생성 및 설치 진행
cockpit web-console 접속
브라우저를 통해 http://cockpit-ip:9090 접근, myuser로 접속
우측 상단의 '제한된 접근'을 클릭 후 myuser의 암호 입력 - > 관리 접근으로 변경됨
cockpit 에서 vm 생성

-> 4G 미만의 메모리 할당 시, 설치 과정에서 메모리 부족으로 에러 발생 가능성 있음.
-> EFI 펌웨어 모드로 설치를 원한다면 '생성과 편집'을 눌러 BIOS -> UEFI로 변경

-> 저장 후 설치 버튼을 눌러 설치 진행
OS 설치 진행


설치 완료 후 부팅 순서 변경

-> OS 설치가 완료되면 navix.ks의 shutdown 설정에 의해 자동으로 vm이 종료된다. 종료된 vm의 '부팅 순서' 편집을 눌러 disk를 상단으로 올린다.
VM 부팅

kvm host에서 접속, 확인
[root@kvm ~]# virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-----------------------------------------------------------------------------------------------------------------
2026-05-27 19:44:50 52:54:00:b2:76:45 ipv4 192.168.122.53/24 pxe-ksinstall 01:52:54:00:b2:76:45
[root@kvm ~]# ssh 192.168.122.53
[root@pxe-ksinstall ~]# hostname -I
192.168.122.53
[root@pxe-ksinstall ~]# grep hostname /root/anaconda-ks.cfg
network --hostname=pxe-ksinstall
[root@pxe-ksinstall ~]# uname -r
5.14.0-611.5.1.el9_7.x86_64
[root@pxe-ksinstall ~]# cat /etc/redhat-release
Navix release 9.7 (Jeongja)