본문 바로가기

Work Sharing

[Linux] KickStart 실습

반응형

안녕하세요, level.11 입니다.

이번에는 Linux 설치할 때 편리한 KickStart를 연습해 봤습니다.

대량의 서버에 동일한 환경으로 Linux를 설차할 때 편리할 것 같아 연습을 해본 것을 적어보려고 합니다.

기본적인 Boot Process를 나타낸 것인데, 기본적으로 kernel과 initramfs는 설치 image에서 load됩니다.

UEFI와 BIOS(legacy)의 boot process가 다른데, 저는 UEFI로 실습을 진행했습니다.

/EFI/BOOT/grub.cfg에 OS설치시에 grub(bootloader)이 설치 시나리오를 정의해 주는데 여기서 해당 file을 수정해야 합니다.

참고로, images/pxeboot/inird.img는 EFI 설치시에 이용되는 ramFS입니다.

그리고 images/pxeboot/vmlinuz는 EFI 설치시에 이용되는 kernel입니다.

Linux 설치시에 USB나 IODD를 이용하게 되는데 설치 파일의 용량이 DVD의 용량을 넘어서는 경우가 많습니다.그래서 USB에 Linux image를 만들어 보려고 합니다.Rufus와 같은 tool을 이용하면 편리합니다.

Rufus를 이용하여, USB에 Linux 설치 image를 만듭니다.

쉽게 말해, DVD media를 USB에 만든다고 생각하시면 됩니다.

작업이 완료되고 USB를 꽂으면 위와 같이 폴더와 파일들이 보일겁니다.

아까 설명드렸던 EFI -> BOOT로 이동합니다.

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 'CentOS 7 x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 quiet
initrdefi /images/pxeboot/initrd.img
}
menuentry 'Install CentOS7-KS' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 quiet inst.ks=hd:LABEL=CENTOS\x207\x20X8:/linux_kickstart.cfg
initrdefi /images/pxeboot/initrd.img
}
menuentry 'Test this media & install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 rd.live.check quiet
initrdefi /images/pxeboot/initrd.img
}
submenu 'Troubleshooting -->' {
menuentry 'Install CentOS 7 in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 xdriver=vesa nomodeset quiet
initrdefi /images/pxeboot/initrd.img
}
menuentry 'Rescue a CentOS system' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 rescue quiet
initrdefi /images/pxeboot/initrd.img
}
}

대체로 이런 구성인데 이게 뭐냐면 OS booting 시에 나오는 menu를 표시하는 파일입니다.

이 화면 아시죠? 원래는 3개만 표시되는데 KickStart 용 memu를 넣어주기 위해서 파일을 수정하는 과정입니다.

빨간색 부분을 추가해주면 되는데요...

menuentry 'Install CentOS7-KS' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CENTOS\x207\x20X8 quiet inst.ks=hd:LABEL=CENTOS\x207\x20X8:/linux_kickstart.cfg
initrdefi /images/pxeboot/initrd.img
}

중요한 것은 글자에 색이 칠해져 있는 부분입니다.

노란색 부분은 실제 화면에 표시되는 메뉴 이름입니다. 저는 뒤에 KS를 추가헤서 이것을 선택하면 KickStart로 

설치한다고 적어놨습니다. 그리고 초록색 부분은 OS label인데 이것은 위에 있는 menu와 동일하게 입력해주면 됩니다.

그냥 복사해서 붙여넣으면 됩니다.

그리고 마지막에 있는 것은 KickStart 수행하는 파일인데, 저 파일에 들어가 있는 내용대로 OS를 설치하게 됩니다.파일 이름은 각자 알아서 정하시면 됩니다.

제가 작성한 KickStart 구성파일입니다.

이 파일의 원본은 이미 설치된 Linux의 /root/anaconda-ks.cfg 입니다.

#version=DEVEL

# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom

-> USB를 가상의 CDROM으로 인식시켜서 설치할 것이기 때문에 cdrom으로 입력했습니다. 

-> Cobbler를 이용한다면, URL을 적어야 합니다.

# Use graphical install
text

-> 설치과정이 text로 표시됩니다. GUI로 보실거면 graphical로 설정하시면 됩니다.

# Run the Setup Agent on first boot
firstboot --disable
ignoredisk --only-use=sda

-> sda가 local disk입니다.

# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'

# System language
lang en_US.UTF-8 --addsupport=ko_KR.UTF-8

firewall --disable
eula --agreed

-> 방화벽은 초기 설치라 disable로, eula는 license 관련인데 agree해야 설치를 할 수 있습니다.

# selinux setting
selinux --disabled

logging level=info

# Network information
network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network  --hostname=localhost.localdomain

repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability
repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage

# Root password
rootpw sep09sep

-> root password는 각자 편한 것으로 설정하면 됩니다.

# System services
services --disabled="chronyd"

# System timezone
timezone Asia/Seoul --isUtc --nontp

user --name=admin --password=sep09sep --gecos="admin"

# X Window System configuration information
xconfig  --startxonboot

# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda

# Partition clearing information
clearpart --all --initlabel --drives=sda

-> 설치할 disk에 내용이 있으면 삭제하는 절차입니다.

# Disk partitioning information
part /boot/efi --fstype="efi" --ondisk=sda --size=200 --fsoptions="umask=0077,shortname=winnt"
part pv.287 --fstype="lvmpv" --ondisk=sda --size=20480
part /boot --fstype="xfs" --ondisk=sda --size=500
volgroup rootvg --pesize=4096 pv.287
logvol swap  --fstype="swap" --size=2048 --name=swap --vgname=rootvg
logvol /  --fstype="xfs" --grow --maxsize=10240 --size=8192 --name=root --vgname=rootvg
logvol /home  --fstype="xfs" --size=8192 --name=home --vgname=rootvg

-> Linux의 각 partition size를 구성할 수 있습니다.

-> 각자 필요한 만큼 구성하시면 됩니다.

-> 특히, 색칠된 부분은 반드시 들어가야 합니다.

-> 먼저 설치된 OS의 /root/anaconda-ks.cfg 파일에는 해당 부분이 없기 때문입니다.

%packages --ignoremissing
@^graphical-server-environment
@backup-server
@base
@compat-libraries
@core
@desktop-debugging
@development
@dial-up
@dns-server
@file-server
@fonts
@ftp-server
@gnome-desktop
@guest-agents
@guest-desktop-agents
@ha
@hardware-monitoring
@identity-management-server
@infiniband
@input-methods
@internet-browser
@java-platform
@kde-desktop
@large-systems
@load-balancer
@mail-server
@mainframe-access
@mariadb
@multimedia
@network-file-system-client
@performance
@postgresql
@print-client
@print-server
@remote-system-management
@resilient-storage
@security-tools
@smart-card
@system-admin-tools
@virtualization-client
@virtualization-hypervisor
@virtualization-tools
@x11
kexec-tools

%end

-> 설치 bundle입니다. 저는 GUI 구성에 모든 package를 선택했습니다.

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

%end

#%post --log=/root/ks-post.log
%post --nochroot --log=/root/ks-post.log
#cd /run/media/sysadmin/RHEL-7_9\ SE/
cd /run/install/repo/
mkdir /mnt/sysimage/localrepo
cp -r /run/install/repo/* /mnt/sysimage/localrepo
echo "[Server]" > /mnt/sysimage/etc/yum.repos.d/local.repo
echo "name=Server" >> /mnt/sysimage/etc/yum.repos.d/local.repo
echo "baseurl=file:///localrepo" >> /mnt/sysimage/etc/yum.repos.d/local.repo
echo "enabled=1" >> /mnt/sysimage/etc/yum.repos.d/local.repo
echo "gpgcheck=0" >> /mnt/sysimage/etc/yum.repos.d/local.repo
%end

-> repository 구성입니다.-> 필요없으면 삭제하셔도 됩니다. 설치 후에 구성하셔도 되는 부분입니다.이렇게 구성 파일까지 준비되면 바로 설치가 가능합니다.제가 사용하는 Laptop PC에 VMware를 이용하여 실습을 해봤습니다.

File -> New Virtual Machine... 으로 가상서버를 생성해줍니다.

CPU는 2개, memory 2GB, disk는 25GB(SCSI)로 구성했습니다.

짜잔~

대충 만들어봤습니다. ㅎㅎㅎ

가상PC의 Option에서 Firmware Type을 UEFI로 설정해줍니다.

USB는 3.1로 설정합니다.

이렇게 기본적인 준비는 마쳤습니다.

가상 서버의 Power를 올려줍니다.

VMware 로고가 나올 때 ESC를 눌러줍니다.

Boot Manager 화면으로 들어가는데 USB가 안보이는 것을 확인할 수 있습니다.

다시 이 화면을 띄워서 Power 아래에 있는 Removable Devices에서 OS image가 있는 USB를 골라

connect를 선택합니다. 그러면 PC에서 보이던 USB가 사라지면 성공인겁니다.

다시 restart합니다. (Power Off를 하면 안됩니다. 그러면 USB 설정을 다시 해야 합니다.)

VMware 로고 나올 때 ESC를 누르면 아까와 똑같이 Boot Manager로 들어가는데

이번에는 USB device가 표시됩니다.

USB를 선택합니다.

초반에 설정했던 KickStart 설치 메뉴를 선택합니다.

USB로 booting되면서 KickStart 설치가 진행됩니다.

KickStart 구성 파일에 있는대로 설치가 진행됩니다.

Partition 할당이 자동으로 진행되면 바로 OS설치가 진행됩니다.

Bundle Package가 설치됩니다.

전부 선택한 관계로 양이 많습니다.

Bundle Package 설치가 종료되고 설치가 마무리됩니다.

모든 설치 과정이 종료되면 위와 같은 message가 표시됩니다.

enter를 치면 reboot이 되고 설치된 OS로 booting이 됩니다.

그리고 booting이 완료되면 미리 설정한 계정과 password로 login을 할 수 있습니다.

이렇게 Linux KickStart 실습이 마무리 되었습니다.

실전에서는 대량의 설치작업이 있지 않다면 많이 쓰일 작업은 아니나, Gold Image를 구성해놓고

모두 같은 구성으로 서버를 만들고자 한다면 USB 하나로 동일한 서버를 만들 수 있으니 편리할 것 같습니다.

긴 글 읽어주셔서 고맙습니다.

반응형