Kickstart HowTo #

Contents

1 Kickstart HowTo
1.1 문서요약
1.2 목적
1.3 Kickstart 서버 구축하기
1.3.1 필요한 것들
1.3.2 Kickstat 로 설치되는 과정의 이해
1.3.3 설치 및 설정
1.3.3.1 DHCP 서버 설치 및 설정
1.3.3.2 TFTP 서버 설치 및 설정
1.3.3.3 NFS 서버 설치 및 설정
1.3.3.4 PXE boot 설정
1.3.3.5 Kickstart config 파일 생성
1.4 마무리

작성자:김경민(stone@linuxstudy.pe.kr)
항상 그렇지만 존칭은 생략합니다..^^;

1.1 문서요약 #

Kickstart를 이용한 RedHat 계열 리눅스 네트워크 설치 자동화

1.2 목적 #

Kickstart system을 이용하여 리눅스 시스템을 자동 설치하며
네트웍 부팅을 이용한 설치로 리눅스 설치CD가 전혀 필요 없으며
새로운 버전이나 다양한 버전의 리눅스 설치시에 아주 유용하게 사용할 수 있다.
부팅만 시켜두면 이것저것 설정할 필요가 없으므로 아주 짧은 시간에 리눅스를 셋업할수 있다.

1.3 Kickstart 서버 구축하기 #

1.3.1 필요한 것들 #

  • DHCP 서버: 리눅스가 설치될 클라이언트에게 IP를 할당해주고 TFTP서버에서 이미지를 받게 해주는 역할을 한다.
  • TFTP 서버: PXE 부팅시 리눅스 부팅용 커널과 램디스크 이미지를 제공
  • NFS 혹은 FTP,HTTP 서버: 설치용 파일들을 제공.

1.3.2 Kickstat 로 설치되는 과정의 이해 #

1. 설치할 시스템 네트워크 부팅(왠만한 컴퓨터는 PXE 부팅을 지원한다. bios에서 설치 순서를 network로 가장 먼저 잡아준다.)
2. 시스템은 DHCP에 IP를 request 하고 IP를 할당 받음
3. DHCP 에 설정된 TFTP 서버에서 pxelinux.0 파일을 다운받아 실행함.
4. pxelinux.0 은 pxelinux.cfg 디렉토리에 설정된 파일(ex. /tftboot/pexlinux.cfg/default) 로딩
5. 커널 로딩 및 ks 파일 로딩
6. Kickstart config 파일에 설정된 대로 자동으로 리눅스 설치

1.3.3 설치 및 설정 #

1.3.3.1 DHCP 서버 설치 및 설정 #

1. yum install dhcp
2. vi /etc/dhcpd.conf
ddns-update-style ad-hoc;
allow booting;
allow bootp;
default-lease-time 60;
max-lease-time 60;
option subnet-mask              255.255.255.0;
option domain-name-servers      네임서버IP;
class "pxeclients" {
        match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server TFTP서버;
        filename "pxelinux.0";
}
#Windows 클라이언트 클래스 설정 
class "ms-clients" {
        match if substring (option vendor-class-identifier, 0, 4) = "MSFT";
}

# DHCP 서버가 돌고 있는 리눅스 머신 클래스 설정
class "linux-dhcp" {
        match if substring (option vendor-class-identifier, 0, 5) = "Linux";
}
subnet 네트워크주소(ex.192.168.0.0) netmask 255.255.255.0 {
        option routers  GATEWAY주소;
        option broadcast-address 브로드캐스트 주소;
        pool {
                deny members of "ms-clients";
                deny members of "linux-dhcp";                 
                range dynamic-bootp 192.168.0.1 192.168.0.10 ;(dhcp로 할당할 아이피 범위)
        }
}

3. DHCP 서버 구동
/etc/init.d/dhcp start

1.3.3.2 TFTP 서버 설치 및 설정 #

1. TFTP 서버 설치
yum install tftp-server
2. vi /etc/xinetd.d/tftp
service tftp
{
        disable = no
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
3. TFTP서버 데몬 구동
/etc/init.d/xinetd start or restart

1.3.3.3 NFS 서버 설치 및 설정 #

1.NFS 서버 설치
yum install nfs-utils
2. NFS 서비스를 위한 디렉토리 생성 및 CD 이미지 복사
각 버전별로 설치 지원을 위해서 디렉토리를 만들고 거기에 CD이미지를 복사해 준다.
mkdir /pub/CentOS/{4,5,6}
mkdir /ks //ks.cfg 파일을 저장할 디렉토리
cp -a CD이미지 /pub/CentOS/4 
3.NFS 서버 공유 설정
vi /etc/exports
/pub/CentOS *(ro) //읽기 전용으로 공유
/ks *(ro)
4. NFS 서버 시작
/etc/init.d/nfs start

1.3.3.4 PXE boot 설정 #

1. pxelinux.0 복사
설치할 시스템이 부팅되면서 dhcp에서 IP를 할당 받고 tftp 서버에서 pxelinux.0 파일을 읽게 된다.
pxelinux.0 파일은 syslinux 패키지에 들어있으며 대부분의 시스템에는 기본적으로 설치가 되어 있을것이다.
pxelinux.0 은 쉽게 생각하자면 grub 또는 lilo 와 같은 역할을 하는 파일로
네트웍 부팅을 위한 부트 로더 프로그램이다.
pxe boot 파일을 복사해 준다.
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
pxelinux 프로그램이 읽어들일 커널 이미지 및 램디스크 이미지 복사.
보통 설치CD/images/pxeboot/ 디렉토리에 네트워크 부팅을 위한 커널과 램디스크 이미지 파일이 있다.
필자는 여러 버전을 선택적으로 설치하게 하려고 디렉토리를 각각 설정했다.
cp /설치CD/images/pxeboot/vmlinuz /tftpboot/CentOS4/
cp /설치CD/images/pxeboot/initrd.img /tftpboot/CentOS4/

2. pxelinux.0 파일이 읽어들일 config 파일 생성.
pxelinux.0 프로그램은 기본적으로 클라이언트의 맥어드레스 또는 네트웍주소 등을 이용해서
config 파일을 로딩하게 된다.
설정을 보면 알겠지만 lilo 설정과 거의 같다.
00-0E-0C-66-FC-BE 형태의 클라이언트 맥어드레스 파일
또는 네트워크 주소의 HEX 값 예를 들면 192.168.0.0 네트웍에 있는 클라이언트들에게 제공할 pxelinux config 파일은 /tftboot/pxelinux.cfg/C0A800 이런식으로 파일을 만들어 주면 된다.
sh#ls -al /tftboot/pxelinux.cfg/
default(기본 부팅 셋업 파일)
C0A800(192.168.0.0 네트웍의 클라이언트를 위한 부팅 셋업 파일)
00-0E-0C-66-FC-BE (특정 맥어드레스를 가진 클라이언트를 위한 부팅 셋업 파일)
sh# printf "%02X%02X%02X" 192 168 0

vi /tftpboot/pxelinux.cfg/default
timeout=30
default CentOS4
label CentOS4
  kernel CentOS4/vmlinuz
  append ksdevice=link load_ramdisk=1 initrd=CentOS4/initrd.img network ks=nfs:NFS서버주소:/ks/ks.cfg
label CentOS5
  kernel CentOS5/vmlinuz
  append ksdevice=link load_ramdisk=1 initrd=CentOS5/initrd.img network ks=nfs:NFS서버주소:/ks/ks.cfg
ks= 항목은 kickstart config 파일의 위치를 잡아주면 된다.
위의 예제는 nfs 서버에 있는 ks 파일을 로딩하는 예제이며 ftp,http 등등을 사용할 수 있다.
필자의 경우에는 nfs를 이용했다

1.3.3.5 Kickstart config 파일 생성 #

ks= 이후에 있는 ks.cfg 파일의 내용이며 이 부분을 이해한다면 본인이 원하는 대로 셋업이 가능할것이다.
예제)vi /ks/ks.cfg nfs 서버에서 export 한 디렉토리에 생성한다
install //install 할것인지 upgrade 할 것인지 적어준다.
url --url nfs://NFS서버/pub/CentOS/5 //OS설치 이미지의 경로를 적어준다.
lang en_US.UTF-8 //기본적으로 사용할 언어 선택
langsupport --default=ko_KR.UTF-8 en_US.UTF-8 //기본 언어 이외에 추가할 언어 선택
keyboard us //키보드 선택
skipx //X-Windows 환경으로 설치하는것을 skip한다. 
network --device eth0 --bootproto static --ip 192.168.0.100--netmask 255.255.255.0 --gateway 192.168.0.1 --nameserver 192.168.0.200 --hostname www1.abc.com
//네트워크 설정 
rootpw --iscrypted $1$5yAFuaK5$w8CB23gcyKeSZzU/wZbuW1 //설치시 기본 root 패스워드
firewall --disabled //firewall 사용 안함
selinux --disabled //selinux 사용안함
authconfig --enableshadow --enablemd5 //shadow 패스워드 및 md5 사용
timezone Asia/Seoul //서버 시간 설정
bootloader --location=mbr //boot 로더를 어디에 설치할 것인지에 대한 내용이다 MBR 에 설치함.
clearpart --all //기존 모든 파티션을 삭제함. 
part / --fstype ext3 --size=1 --grow --ondisk=sda//grow 옵션은 사용가능한 공간을 모두 사용하겠다는 의미이다. ondisk 옵션은 파티션을 생성할 디스크명 이다.

part swap --size=4000 --ondisk=sda
part /var --fstype ext3 --size=1 --grow --ondisk=sdb

%packages --resolvedeps//설치할 패키지 또는 패키지 그룹
// - 표시는 설치하지 않겠다는 의미이며 앞에 @ 가 붙어있는것은 패키지 그룹을 의미한다.
e2fsprogs
grub
kernel
@ everything
-firefox

%post //패키지 설치 후에 실행할 스크립트
chmod 700 /usr/bin/wget
chkconfig --add mysqld

1.4 마무리 #

이제 모든 설정은 끝났으며 설치할 클라이언트를 네트웍 부팅을 하면 리눅스를 자동으로 설치할 수 있을것이다. 이제 수십대던 수백대던 한번에 셋업이 가능하게 되었다.^^;



처음 설치를 하는 사람도 이해할 수 있도록 설명해주시면 안될까요?ㅠㅠ
DHCP설정 시작부터 어디서 어떻게 하는지 이해를 못하겠어요 -- ㅠㅠ 2010-03-02

좋은 자료 감사합니다.
오래전 설정하고, 문서 정리를 안해서 몇가지 과정을 잊고 있었는데, 도움 되었습니다. -- 이진성 2010-09-16

좋은 데이터 감사합니다.
내용 블로그로 퍼갑니다.^^ -- 페두라 2011-04-15

감사합니다. ㅇ_ㅇ''' -- shint 2012-02-08
[[FootNote]]

captcha
Username:
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-02-08 23:33:57
Processing time 0.4616 sec