CentOS/Fedora Kickstart 자동 설치 가이드
요약
개요
IT 지원 업무에서 여러 대의 서버나 데스크탑에 동일한 설정을 반복 적용해야 할 때 Kickstart 자동 설치는 매우 유용합니다. Kickstart는 설치 옵션을 미리 정의한 텍스트 파일로, 무인 설치(데이터센터 또는 대량 배포)에 적합합니다. 이 글은 기존 예제를 통해 Kickstart 파일 구조와 설치 후 스크립트(%post)의 역할을 이해하고, 실전에서 응용하는 방법을 제공합니다.
중요 용어 1줄 정의: Kickstart — Red Hat 계열의 설치 옵션을 자동화하는 텍스트 구성 파일입니다.
기존 Kickstart 파일 확인 방법
설치 후에 생성되는 예제 파일을 참고하면 이해가 빠릅니다. 이미 설치한 시스템에서 /root/anaconda-ks.cfg 파일을 열어보면 설치 시 선택한 옵션들이 Kickstart 형식으로 기록되어 있습니다. 이 파일을 사례로 보면 어떤 옵션을 설정했는지 예제로 배울 수 있습니다.
예제 Kickstart 파일 (원본 유지)
아래는 필자가 Fedora 노트북 여러 대에 VMWare Player와 가상머신 이미지를 배포할 때 사용한 Kickstart 예제입니다. 주석을 포함한 실제 사용 예제로, 필요한 옵션을 추가/제거하여 환경에 맞게 조정할 수 있습니다.
text
install
cdrom
lang en_US.UTF-8
keyboard uk
timezone --utc Europe/London
rootpw --iscrypted $$nndedddewfooofcerd3r434
selinux --disabled
# Custom user added
user --name=kevinmitnick --groups=users --password=HackThePlanet
authconfig --enableshadow --passalgo=sha512 --enablefingerprint
firewall --service=ssh
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --drives=sda
ignoredisk --only-use=sda
part /boot --fstype=ext2 --asprimary --size=500
part /OtherOS --fstype=ext4 --asprimary --size=10240
part swap --asprimary --size=2048
part pv.fedora1000 --grow --asprimary --size=500
volgroup fedora --pesize=32768 pv.fedora1000
logvol /centosVM --fstype=ext4 --name=centosVM --vgname=fedora --size=30720
logvol /home --fstype=ext4 --name=home --vgname=fedora --size=81920
logvol / --fstype=ext4 --name=root --vgname=fedora --size=25600
logvol /windowsVM --fstype=ext4 --name=windowsVM --vgname=fedora --size=40960
bootloader --location=mbr --driveorder=sda --append="nomodeset rhgb quiet"
# setup the network with DHCP
network --device=eth0 --bootproto=dhcp
# packages that will be installed, anything starting with an @ sign is a yum package group.
%packages
@admin-tools
@authoring-and-publishing
@base
@core
@development-libs
@development-tools
@dial-up
@editors
@education
@electronic-lab
@engineering-and-scientific
@eclipse
@fedora-packager
@fonts
@gnome-desktop
@gnome-software-development
@graphical-internet
@graphics
@hardware-support
@input-methods
@java
@java-development
@kde-desktop
@kde-software-development
@legacy-fonts
@office
@online-docs
@printing
@sound-and-video
@system-tools
@text-internet
@x-software-development
@base-x
kpackagekit
system-config-network
scribus
xfsprogs
mtools
gpgme
gpm
rpmdevtools
koji
mercurial
lua
pylint
rpmlint
plague-client
cmake
mock
bzr
pptp
kdeedu-marble
minicom
opencv
yum-priorities
plotutils
openoffice.org-opensymbol-fonts
qtcurve-gtk2
gvfs-obexftp
glibmm24-devel
gnome-vfs2-devel
libsigc++20-devel
libart_lgpl-devel
kdepim
konversation
ImageMagick
digikam
kipi-plugins
kdegraphics
gypsy
gpsd
hdparm
m17n-db-tamil
m17n-db-gujarati
m17n-db-kannada
m17n-db-hindi
gok
m17n-db-oriya
m17n-db-bengali
m17n-contrib-sinhala
m17n-db-assamese
m17n-db-punjabi
iok
m17n-db-telugu
m17n-db-malayalam
xorg-x11-fonts-ISO8859-1-100dpi
urw-fonts
ghostscript-fonts
kdepim
vorbis-tools
amarok
jack-audio-connection-kit
kaffeine
kdemultimedia
vbetool
gssdp
geoclue
createrepo
radeontool
PackageKit-command-not-found
obexftp
enca
festival
ntpdate
xsel
gupnp
rdesktop
fuse
ncftp
mesa-libGLU-devel
xorg-x11-apps
xscreensaver-gl-extras
gdm
xscreensaver-extras
xscreensaver-base
xterm
xorg-x11-resutils
gitk
git-gui
dia
tftp
python-crypto
boost-devel
valgrind
subversion
cvs
thunderbird-lightning
python-sqlite2
asciidoc
glibc-static
tcllib
python-psycopg*
ssh*
perl-ExtUtils-MakeMaker
perl-Net-Telnet
perl-HTML-FromText
libICE.so.6
libSM.so.6
libXmu.so.6
libXp.so.6
libXpm.so.4
libXt.so.6
help2man
cscope
ctags
git
kernel-devel
tftp-server
texlive-latex
texi2html
cmake
transfig
alsa-lib
libXScrnSaver
qt
qt-x11
libasound.so.2
libXss.so.1
libQtDBus.so.4
libQtGui.so.4
pulseaudio
alsa-plugins-pulseaudio
pulseaudio-esound-compat
pulseaudio-libs
pulseaudio-libs-glib2
pulseaudio-module-zeroconf
pulseaudio-libs-zeroconf
xmms-pulse
pulseaudio-module-gconf
wine-pulseaudio
xine-lib-pulseaudio
pulseaudio-utils
pulseaudio-module-bluetooth
padevchooser
paman
paprefs
pavucontrol
pavumeter
ncurses-devel.i686
%end
%post --log=/root/my-post-log
exec < /dev/tty3 > /dev/tty3
chvt 3
echo
echo "################################"
echo "# Running Post Configuration #"
echo "################################"
# prevent future yum updates pulling down & install new kernels (and breaking VMware & video drivers).
echo "exclude=kernel*" >> /etc/yum.conf
# update the system
yum update -y
# install rpm fusion repo
rpm -Uvh \
http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm \
http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
# disable rpmfusion repo, to prevent a yum update contaminating the system with rpmfusion rpms.
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/rpmfusion-*
# install video drivers - enabling rpmfusion repos on the command line.
yum -y --enablerepo=rpmfusion-nonfree --enablerepo=rpmfusion-free --enablerepo=rpmfusion-free-updates --enablerepo=rpmfusion-nonfree-updates install kmod-nvidia xorg-x11-drv-nvidia-libs.i686 xorg-x11-drv-nvidia-libs.x86_64 akmod-nvidia
# start akmods on boot
chkconfig akmods on
# add pcadmin to sudoers
echo "kevinmitnick ALL=(ALL) ALL" >> /etc/sudoers
# set perms on vmware partitions so users in the users group can create vm's
chown :users /windowsVM && chmod 775 /windowsVM
chown :users /centosVM && chmod 775 /centosVM
# Make sure the system boots X by setting the system to run level 5
sed -i 's/id:3:initdefault:/id:5:initdefault:/g' /etc/inittab
# install openvpn & configure
wget ftp://$host/pub/VPN/OpenVPN/Linux/openvpnclient-custom-settings-1.6-3.i386.rpm
rpm -ivh openvpnclient-custom-settings-1.6-3.i386.rpm
cd /etc/openvpn/
rm client.conf-*
wget ftp://$host/pub/VPN/OpenVPN/Linux/64bit/client.conf-1
mv client.conf-1 client.conf-0
rm -f /openvpnclient-custom-settings-1.6-3.i386.rpm
# add Kevin Mitnick to group users
usermod -a -G users kevinmitnick
# pull down vmware images
cd /windowsVM/
wget --user=magicinstaller --password=hacktheplanet ftp://magicinstaller:fubar@ftp.$host.com/images/windowsVM.tar.gz
tar -xvzf windowsVM.tar.gz
cd /centosVM/
wget --user=magicinstaller --password=hacktheplanet ftp://magicinstaller:fubar@ftp.$host.com/images/centosVM.tar.gz
tar -xvzf centosVM.tar.gz
# create symlink as instructed
cd /usr/lib; ln -s libtinfo.so libtermcap.so.2
# confirm perms are set correctly
chown -R :users /windowsVM && chmod -R 775 /windowsVM
chown -R :users /centosVM && chmod -R 775 /centosVM
# swap to console 1
chvt 1
노트: 위 예제에는 실제 환경에서 제거해야 할 민감한 정보(예: 암호, 사용자명, FTP 자격증명)가 포함되어 있습니다. 배포 전 반드시 교체하세요.
%post 스크립트와 설치 후 구성
%post 섹션은 설치가 끝난 뒤 시스템에서 실행되는 스크립트를 담습니다. 이 영역에서 패키지 추가 설치, 리포지터리 설정, 권한 변경, 서비스 활성화 등을 자동으로 처리할 수 있습니다. 예제에서는 다음을 수행합니다:
- yum 업데이트 및 특정 커널 제외(exclude) 설정
- rpmfusion 리포지터리 설치 및 일시적 활성화로 그래픽 드라이버 설치
- akmods 자동 시작 설정
- 사용자 sudo 권한 추가 및 그룹 설정
- 가상머신 이미지 다운로드 및 압축 해제
- OpenVPN 클라이언트 설치 및 구성 파일 배치
- 파일 시스템 권한 설정
%post는 설치 환경(네트워크 접근, 저장소 경로, 호스트 이름 변수 등)에 민감하므로 배포 전에 스크립트를 환경별로 검증해야 합니다.
실무 팁 및 모범 사례
- 민감 정보 제거: Kickstart 파일에 평문 비밀번호, FTP 자격증명, 비밀 키를 직접 넣지 마십시오. 대신 배포 시 안전한 비밀 관리(예: 내부 패키지 서버, 구성 관리 툴)를 사용하세요.
- 테스트 반복: 가상머신에서 여러 차례 테스트하여 파티션, 네트워크 및 패키지 충돌을 확인하세요.
- 패키지 그룹 최소화: 불필요한 패키지 그룹은 제거하여 설치 시간을 단축하고 보안 표면을 줄이세요.
- 드라이버 주의: 커널 관련 패키지를 고정하거나 exclude로 제어하지 않으면 서드파티 드라이버가 깨질 수 있습니다.
- 하드웨어 다양성: 이미지 대신 Kickstart+스크립트를 사용하면 다양한 하드웨어에서 더 유연하게 동작합니다.
언제 Kickstart가 적합하지 않은가 (반례)
- 복잡한 이미지 수준의 맞춤 드라이버가 필수인 경우(특정 펌웨어/라이선스 수락 필요)에는 이미지 기반 배포가 더 빠를 수 있습니다.
- 완전한 디스크 복제가 필요한 경우(정확히 동일한 파티션 테이블/UUID 유지)에는 Ghost/WDS 같은 도구가 더 적합합니다.
- 네트워크가 불안정하여 설치 중 패키지 다운로드를 안정적으로 할 수 없는 환경에서는 오프라인 리포지터리 준비가 필요합니다.
배포 전 체크리스트
- Kickstart 파일에서 모든 평문 비밀번호/자격증명 제거
- 파티션 및 LVM 설정이 목표 하드웨어에 맞는지 확인
- %post 스크립트의 모든 경로와 변수($host 등)를 환경에 맞게 교체
- 외부 리포지터리 및 URL 접근성 점검
- 가상머신에서 최소 2회 이상 전체 설치 테스트
- 업그레이드/커널 정책(예: exclude=kernel*)을 팀과 합의
문제 해결 가이드 (간단)
- 설치가 멈추거나 네트워크 실패: 설치 매체 및 PXE 설정, DHCP 범위를 확인하세요.
- 패키지 충돌/의존성 오류: 특정 패키지를 제거하거나 로컬 리포지터리를 사용해 해결하세요.
- 그래픽 드라이버 오류: 커널 버전에 맞는 드라이버 패키지와 akmods/dkms 설정을 확인하세요.
결론
Kickstart는 대량 배포에서 강력한 자동화 도구입니다. 예제 파일을 참고해 자신의 요구에 맞게 옵션을 정리하면, 하드웨어에 구애받지 않는 유연한 설치 파이프라인을 구축할 수 있습니다. 설치 후 스크립트(%post)를 활용하면 추가 구성과 소프트웨어 배포를 자동화할 수 있습니다.
중요: VMWare Player 설치처럼 라이선스 동의가 필요한 단계는 자동화하기 어렵습니다. 해당 항목은 수동 또는 별도 자동화 방법(라이선스 키 적용 스크립트 등)을 고려하세요.
질문이나 공유는 아래 댓글로 남겨 주세요. 이 가이드는 www.netzensolutions.com에서 제공되었습니다.
요약 정리
- Kickstart는 무인 설치 자동화를 위한 파일 기반 구성입니다.
- %post는 설치 후 설정을 자동으로 수행합니다.
- 민감 정보 제거와 충분한 테스트는 필수입니다.