KickStart
리눅스 설치 자동화
PXE 부팅을 이용하여 원격에서 자동으로 부팅하고 설치는 Kickstart 와 네트워크 설치를 이용하여 자동화
kickstart를 이용하여 설치 후 필요한 작업까지 넣어두면 좀더 편리한 서버작업이 가능함
KickStart에 필요한 파일 내용 정리
1. DHCP ( Dynamic Host Configuration Protocol )
-> PXE 부팅 시 kickstart 서버와 연결되기 위해 동적으로 IP 할당
-> IP 할당 후 인터넷이되어야지 kickstart서버에서 Image 를 받아 올수 있음
2. tftp-server ( Trival File Transfer Protocol )
-> PXE 부팅 후 리눅스 커널 이미지를 전송할 때 사용
-> pxelinux.0, menu.c32, vmlinuz, initrd.img
3. nfs ( Network File System ) & httpd ( HyperText Transfer Protocol Daemon ) & vsftpd ( Very Secure FTP Daemon )
-> 네트워크로 파일 시스템 공유
-> kickstart.cfg 이나 OS 이미지(ISO) 설치 파일을 전송할 때 사용
4. nfs lock
-> 네트워크로 파일 시스템 공유 중일 때 다른 사람이 사용하지 못하도록 함
5. syslinux 파일
-> 리눅스 부트 메뉴 구성을 위한 파일을 제공 ( pxelinux 0, menu.c.32 )
※ syslinux는 리눅스 시스템 부팅을 위한 부트로더이며 isolinux, extlinux, memdisk 들이 포함됨
syslinux - MS-DOS, FAT, FAT32 파일시스템으로 포멧된 디스크 파티션에서 리눅스를 로드
extlinux - ext2/ext3/ext4 파일시스템으로 포멧된 디스크 파티션에서 리눅스를 로드
isolinux - ISO9600 파일시스템으로 포멧된 디스크 파티션이나, 시디롬으로 부터 리눅스를 로드
memdisk - 램드라이브로 부터 리눅스를 로드 하며 이것은 주로 플로피디스크 이미지를 램디스크로 로드하여 부팅
할때도 많이 사용되기 때문에 GRUB에서도 이모듈을 사용
6. pxelinux.0 파일
-> syslinux 패키지에 포함되어 있는 파일로 대부분의 시스템에는 기본적으로 설치가 되어 있음
pxelinux.0는 네트워크 부트 로더로 리눅스의 grub / lilo 와 같은 역활을 함
7. menu.c32 파일
-> pxe 설치 시 메뉴선택 할 수 있게 하는 파일
8. vmlinuz 파일
-> 리눅스 커널을 컴파일한 결과인 바이너리 파일
bzimage를 사용하여 gzip으로 압축해 놓고 리눅스 부팅시 압축을 해제하여 메모리에 로딩되어 리눅스의 운영이 시작
9. initrd.img 파일
-> 커널 모듈을 모아놓은 이미지로 커널이 로딩되기전에 메모리에 미리 로딩되어 짐 ( 마우스 드라이버,그래픽 카드 등 )
10. anaconda.cfg 파일
-> pxe 설치 시 리눅스 설정 파일
설치방법 ( 언어 / 키보드 / 마우스 / 이더넷 / 보안설정 / 시간 / 부트로드 / 파티션 / 패키지 / 설치 후 작업 )
KickStart 순서
1) DHCP 서버를 찾는다.
2) TFTP 서버를 통해 pxelinux.0 / menu.c32 파일을 받는다
3) 네트워크 부팅이 이루어지며 menu.c32 파일에 해당되는 anaconda.cfg 파일의 메뉴들이 나타난다.
4) 메뉴 목록 중 하나를 선택하면 설정되어 있는 vmlinuz 커널을 메모리에 로딩하며 초기 설치 화면이 나타난다
(initrd.img는 하드웨어 설정시 필요 모듈을 로드할때 쓰임)
5) anaconda.cfg 파일에 리눅스 설정이 제대로 들어가 있으면 자동으로 설치, 설정이 제대로 들어가지 않을 경우 일일이 선택항목을 선택하면서 진행
Kickstart 테스트
※ 서버 OS : REHL6.6
1) DHCP 설정
[root@localhost ~]# rpm -qa | grep dhcp
dhcp-libs-4.2.5-27.el7.x86_64
dhcp-common-4.2.5-27.el7.x86_64
[root@localhost ~]# yum install dhcp
Installed:
dhcp.x86_64 12:4.2.5-27.el7
Complete!
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
allow bootp;
allow booting;
class "pxeclients" {
match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.0.164;
filename "pxelinux.0";
}
max-lease-time 60;
default-lease-time 60;
option subnet-mask 255.255.255.0;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.2;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.0.100 192.168.0.150;
}
2) TFTP 설정
[root@localhost ~]# yum install xinetd
Installed:
xinetd.x86_64 2:2.3.15-12.el7
Complete!
[root@localhost ~]# yum install tftp*
Installed:
tftp.x86_64 0:5.2-11.el7
Complete!
Installed:
tftp-server.x86_64 0:5.2-11.el7
Complete!
[root@localhost xinetd.d]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /data/install
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
3) PXE boot 설정
1. 폴더 생성
[root@localhost xinetd.d]# mkdir /data
[root@localhost xinetd.d]# mkdir /data/install
[root@localhost xinetd.d]# mkdir /data/install/redhat
[root@localhost xinetd.d]# mkdir /data/install/pxelinux.cfg
[root@localhost xinetd.d]# mkdir /data/cfg
2. syslinux 설치
[root@localhost xinetd.d]# yum install syslinux
Installed:
syslinux.x86_64 0:4.05-8.el7
Complete!
3. pxelinux.0 복사
[root@localhost xinetd.d]# cp /usr/share/syslinux/pxelinux.0 /data/install/
4. menu.c32 복사
[root@localhost xinetd.d]# cp /usr/share/syslinux/menu.c32 /data/install
5. vmlinuz 복사
[root@localhost xinetd.d]# cp /iso/rhel7/images/pxeboot/vmlinuz /data/install/redhat/
6. initrd.img 복사
[root@localhost xinetd.d]# cp /iso/rhel7/images/pxeboot/initrd.img /data/install/redhat/
7. anaconda.cfg 복사
[root@localhost xinetd.d]# cp /root/anaconda-ks.cfg /data/cfg/anaconda-ks.cfg
8. pxelinux.0 파일을 읽어드릴 config 파일 생성
[root@localhost xinetd.d]# cat /data/install/pxelinux.cfg/default
default menu.c32
timeout 100
menu background splash.jpg
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color timeout_msg 0 #ffffffff #00000000
menu color timeout 0 #ffffffff #00000000
menu color cmdline 0 #ffffffff #00000000
menu tabmsg Press ENTER to Install or TAB to edit a menu entry
menu title #### OS Installer Boot Menu ####
label 0
menu label rhel6.6
kernel redhat/vmlinuz
append ksdevice=eth0 initrd=redhat/initrd.img network ks=nfs:192.168.0.164:/data/cfg/anaconda-ks.cfg
- timemout : 100초 동안 부트 메뉴를 띄어주고 메뉴 선택이 없으면 label 0 메뉴로 자동으로 부팅
- menu label : 메뉴 선택 라벨명
- kernel : /data/install 폴더에서 절대경로 vmlinuz 파일 위치 ( TFTP server_args 위치)
- ksdevice=eth0 : kickstart 부팅할 때 사용할 eth 장치명
- ksdevice link : kickstart 부팅할 때 link 잡히는 eth으로 설치
- initrd=intird.img : /data/install 폴더에서 절대경로 initrd.img 파일 위치
- network ks=nfs:192.168.0.130:/data/cfg/anaconda-ks.cfg : NFS서버 아이피 : anaconda.cfg 절대 경로
※ vmlinuz와 initrd.img 파일은 같은 버전 파일 이어야 함
4) NFS 설정
[root@localhost xinetd.d]# cat /etc/exports
/iso/rhel66 *(ro) //리눅스 설치 ISO 파일 절대 경로
/data/cfg/ *(ro) // anaconda.cfg 파일 절대 경로
# exportfs -v //nfs공유 설정 확인
5) anaconda.cfg 설정
[root@localhost xinetd.d]# chmod -R 777 /data/cfg/
[root@localhost xinetd.d]# cat /data/cfg/anaconda-ks.cfg
[root@localhost iso]# cat /data/cfg/anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$eI.Cksf02xWX.Emx$W3PchU7zWye8hAXyYm/jXKTzBrKnmnqb6rwT9DeanbfEKHsONsIBICoOoKlspxCwJd31II.nteQVD4hEMf9YQ/
nfs --server=192.168.0.164 --dir=/iso/rhel66
#firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Seoul
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# 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
clearpart --all --initlabel --linux
#volgroup VolGroup --pesize=4096 pv.008002
#logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=VolGroup --grow --size=2048 --maxsize=2048
part / --fstype=ext4 --size=4096 --ondisk=sda
part /boot --fstype=ext4 --size=500
part swap --size=4096 --ondisk=sda
#part pv.008002 --grow --size=1
%packages
@base
@client-mgmt-tools
@compat-libraries
@core
@basic-desktop
@desktop-debugging
@desktop-platform
@development
@ftp-server
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-browser
@legacy-x
@remote-desktop-clients
@server-platform
@server-platform-devel
@server-policy
@system-management
@x11
mtools
pax
python-dmidecode
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
jpackage-utils
libXmu
%end
reboot
%post
mkdir test
chkconfig NetworkManager off
chkconfig iptables off
6) 서비스 데몬 실행 순서
1.xinetd (tftpd)
2.dhcpd
3.nfs
2016-05-03 14:00 1차 수정//