kickstart 서버를 이용하면 많은 수량의 서버를 동일한 구성으로 손쉽게 동시에 설치 할 수 있다.
이 문서는 pxe, dhcp, kickstart, tftp, http 등의 구성을 통해 네트워크로 Redhat Linux를 설치하는 것에 대한 설명이다.
Windows OS가 설치된 노트북에 VMWare Workstation을 설치하고 그 위에 Guest OS로 RHEL 6.5를 설치 한 뒤 구성하였다. 노트북을 사용한 이유는 이동의 편리함으로 필드에 적용하기가 쉽기 때문이다.
목차
1. 정보
1.1. 시스템 정보
♦ Host OS : Windows 8.1 Pro x86_64
♦ VMWare : VMWare Workstation 10.0.3
♦ Guest OS : RHEL 6.5 x86_64 (VMware Guest)
♦ IP : 192.168.0.140 (VMWare Bridge Mode)
1.2. 구성도
2. 설치
2.1. OS 설치
VMWare Workstation 10.0.3 build-1895310 에 RHEL 6.5 x86_64를 메모리 1G에 텍스트모드 형태로 설치한다.
- Network NIC 는 Bridge 모드로 설치 한다.
selinux과 iptables를 disable 시키고 ip 세팅 후 리부팅 한다.
2.2. 패키지 설치
$ yum install -y dhcp tftp-server httpd vsftpd syslinux
참고
♦ dhcp : pxe 부팅 시 IP 부여, kickstart 설치 시 IP 부여를 담당한다.
♦ tftp-server : pxe 부팅 직후 OS 를 설치할 시스템에 리눅스 커널 이미지를 전송할 때 사용된다.
♦ httpd : kickstart 파일, OS 설치 파일들을 전송 시 사용된다. nfs나 ftp를 이용해서 전송 할 수 도 있다.
♦ vsftpd : 제작한 iso 이미지 등을 전송 할 때 사용한다.
♦ syslinux : 부트 메뉴 구성을 위한 파일들을 제공한다.
3. 구성
3.1. yum repo 구성
서브스크립션 등록이 안되면 yum 서버로 부터 패키지를 받아 올 수 없으므로 dvd iso 이미지로 yum repo 구성을 한다.
VMWare Workstation에서 DVD ISO 파일을 Connect 하고 아래와 같이 마운트 한다음 repo config 파일 추가
$ mkdir /rhel5 $ mount mount -t iso9660 /dev/sr0 /rhel65 $ vim /etc/yum.repos.d/rhel-dvd.repo [rhel-dvd] name=Red Hat Enterprise Linux $releasever - $basearch - DVD baseurl=file:///rhel65/Server gpgcheck=0
3.2. tftp 디렉토리 구성
$ mkdir /tftpboot $ mkdir /tftpboot/redhat6.5 $ cp /rhel65/isolinux/initrd.img /tftpboot/redhat6.5 $ cp /rhel65/isolinux/vmlinuz /tftpboot/redhat6.5 $ cp /usr/share/syslinux/menu.c32 /tftpboot $ cp /usr/share/syslinux/vesamenu.c32 /tftpboot $ cp /usr/share/syslinux/pxelinux.0 /tftpboot
참고
OS를 설치 할 시스템은 PXE DHCP 서버로부터 IP를 부여 받은 후 tftp를 통해 /tftpboot/redhat.6.5 디렉토리내의 initrd.img 와 vmlinuz 파일을 가져온다. 이 파일들을 압축을 풀어 하드웨어 드라이버 등을 로딩하며 부팅 과정이 이루어 지고 kickstart가 진행되는 것이다. 그런데 만약 vmlinuz 파일에 OS를 설치하려는 시스템의 NIC 드라이버가 포함되어 있지 않다면 네트워크가 안되기 때문에 네트워크 방식의 kickstart는 하지 못 할 것이다. 그런 상황이라면 해당 NIC 드라이버를 포팅한 vmlinuz 파일을 사용해야 된다. 참고로 PXE는 일종의 VESA와 같은 표준 규격이다. 따라서 PXE 서버와의 통신은 표준 프로토콜이기 때문에 PXE를 지원하는 NIC라면 PXE 서버로 부터 IP를 할당받고 tftp 서버로부터 커널 이미지를 받는 것 까진 문제가 없다.
3.3. xinetd 설정
tfptd 는 xinetd 아래서 운영되며 아래 파일을 일부 수정해 준다.
$ vim /etc/xinetd.d/tftp disable = no server_args = -s /tftpboot # tftp 관련 파일들이 있는 디렉토리이다.
3.4. vsftpd 설정
vsftpd는 사용하지 않을 수도 있지만 iso 파일 등의 대용량 파일을 원격(Windows)으로 넘길 때 유용하다.
root도 ftp로 접속할 수 있게 config 파일 2개를 수정한다.
$ vim /etc/vsftpd/ftpusers #root # root 도 접근 가능하게 주석 처리한다. $ /etc/vsftpd/ftpusers # root # root 도 접근 가능하게 주석 처리한다
3.5. 메뉴 구성
PXE 부팅 후 보이게되는 메뉴를 구성하는 것이다.
$ mkdir /tftpboot/pxelinux.cfg $ vim /tftpboot/pxelinux.cfg/default timeout 50 menu title #### OS Installer Boot Menu #### label 0 menu label Boot local hard drive LOCALBOOT 0 label Redhat6.5 kernel redhat6.5/vmlinuz append ksdevice=link load_ramdisk=1 initrd=redhat6.5/initrd.img network ks=http://192.168.0.140/ks/ks65.cfg
label Redhat6.5 부분부터가 kickstart를 명시한 부분이다. 아래는 설명이다.
♦ timeout 50 : 5초간 부트 메뉴를 띄워준다. 메뉴를 건드리지 않으면 5초 이후에는 label 0 메뉴로 부팅이 된다.
♦ label 0 : 0번 메뉴가 기본 선택 - 따라서 Boot local hard drive 가 기본으로 선택된다.
♦ kernel redhat6.5/vmlinuz : /tftpboot/redhat6.5/vmlinuz 파일이다.
♦ initrd=redhat6.5/initrd.img : /tftpboot/redhat6.5/initrd.img 파일이다.
♦ ksdevice=link : NIC의 링크가 살아있는 장치로부터 cfg 파일을 받는다.
3.6. dchp 설정
한 네트워크에서 dhcp server 가 동시에 운영되면 충돌이 나므로 상황에 따라 라우터(공유기)의 dhcp server 를 off 하든, 리눅스 서버의 dhcp를 off 할 것.
$ vim /etc/dhcp/dhcpd.conf allow bootp; allow booting; max-lease-time 60; default-lease-time 60; ddns-update-style none; option domain-name-servers 168.126.63.1, 168.126.63.2; class "PXE" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.0.140; # Kick start 서버 ip filename "pxelinux.0"; } subnet 192.168.0.0 netmask 255.255.255.0 { option broadcast-address 192.168.0.255; option routers 192.168.0.1; # gateway 지정. 외부망 연결이 필요 없다면 없어도 되고, 만약 라우터의 dhcp 서버가 on 이면 충돌이 나므로 지정하지 않거나 router의 dhcp server를 off로 하고 지정한다. option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.0.2 192.168.0.99; # kickstart OS 설치 때 부여받는 dhcp ip 영역 default-lease-time 21600; max-lease-time 43200; pool { allow members of "PXE"; range 192.168.0.201 192.168.0.230; # pxe dhcp ip 영역 } }
3.7. httpd 설정
아래 두 줄을 맨 아래 추가한다.
$ vim /etc/httpd/conf/httpd.conf . . Alias /ks /tftpboot/kickstart # kickstart 관련 Alias /redhat6.5 /rhel65 # RHEL 6.5 DVD ISO
3.8. 데몬 start
각 데몬들을 올리고 재부팅 후에도 서비스가 될 수 있도록 한다.
$ /etc/init.d/xinetd restart # tftpd 는 xinetd 데몬 아래서 돌아가므로 restart 한다. $ /etc/init.d/dhcpd start $ /etc/init.d/httpd start $ /etc/init.d/vsftpd start $ chkconfig dhcpd on ; chkconfig httpd on; chkconfig vsftpd on
3.9. kickstart 파일 구성
서비스 환경에 맞게 내용을 수정해서 사용하면 된다.
install ## 인스톨 화면을 text 형태로 보여준다. text ## 설치 방법 url --url http://192.168.0.140/redhat6.5 #cdrom ##redhat subscription 설정 #key --skip은 skip, key 서브스크립션 넘버 등록 옵션 (RHEL 6.x의 경우 이 옵션을 안 넣으면 messages 파일에 warning으로 로깅된다. RHEL 5.x는 설치 도중 멈춰 버린다.) key --skip ## Lang 세팅 #lang en_US.UTF-8 lang ko_KR.UTF-8 #langsupport ko_KR --default=en_US #langsupport en_US --default=ko_KR ## 키보드 마우스 keyboard us #mouse none ## NIC 및 hostname 설정 # --device link 는 link가 살아있는 NIC의 네트워크 스크립트 설정파일에 적용하라는 뜻이다. # NIC가 여러개인 시스템에 어떤게 eth0 인지 모를때 적용하면 편리하다. network --device link --bootproto dhcp --noipv6 --hostname Sample-local ## root 비번 rootpw !test123 ## 보안 설정 firewall --disabled selinux --disabled authconfig --enableshadow --passalgo=sha512 ## 시간대 #timezone Asia/Seoul # 글로벌 서비스를 위한 서버의 경우 UTC를 GMT 기준으로 맞춘다. timezone --utc Etc/GMT ## bootloader 설정 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" ## OS가 설치될 sda disk를 초기화. OS 설치시 OS가 설치될 Disk를 제외한 다른 Disk는 모두 뺄것을 권장한다. # zerombr과 ignoredisk 옵션이 빠지면 새 disk의 경우 kickstart 도중 disk를 initialaze 하라는게 나와서 자동 진행을 방해한다. HP DL360 장비의 경우 디스크가 레이드컨트롤러 디바이스명인 /dev/cciss 로 잡히 므로 ignoredisk 에서 sda로 하면 kickstart 도중 에러가 발생한다. DL380 부터는 레이드볼륨이 /dev/sda로 잡히므로 괜찮다. # USB 메모리만 꽂았을 경우 USB 메모리가 지워지는 것을 방지 ignoredisk --only-use=sda zerombr #clearpart --initlabel --all clearpart --all --drives=sda ## Disk 파티셔닝 # UEFI 모드로 설치 시 아래 한 줄 추가. 설치 후 확인하면 vfat 형태의 파일시스템으로 보인다. #part /boot/efi --fstype=efi --grow --maxsize=200 --size=20 # 참고로 UEFI 모드로 설치가 되면 모든 파티션이 GPT 방식으로 파티셔닝 된다. part /boot --fstype ext4 --size=309 part pv.01 --size=1 --grow volgroup rootvg pv.01 logvol swap --fstype swap --vgname=rootvg --size=2048 --name=lv_swap logvol / --fstype ext4 --vgname=rootvg --size=40960 --name=lv_root logvol /var --fstype ext4 --vgname=rootvg --size=4096 --name=lv_var logvol /usr --fstype ext4 --vgname=rootvg --size=4096 --name=lv_usr logvol /tmp --fstype ext4 --vgname=rootvg --size=1024 --name=lv_tmp logvol /var/crash --fstype ext4 --vgname=rootvg --size=1024 --name=lv_crash logvol /home --fstype ext4 --vgname=rootvg --size=2048 --name=lv_home logvol /app_base --fstype ext4 --vgname=rootvg --size=5120 --name=lv_appbase logvol /data --fstype ext4 --vgname=rootvg --size=12492 --name=lv_data ## yum reposigory 설정. # %packages에 여러가지의 패키지가 정의되어 있을 경우 yum repository 서버가 필요할 수 있다. 아래처럼 지정. repo --name="Red Hat Enterprise Linux" --baseurl=http://192.168.0.140/redhat6.5 --cost=100 #repo --name="Red Hat Enterprise Linux" --baseurl=file:///mnt/source # RHEL 6.x Style #repo --name="Red Hat Enterprise Linux" --baseurl=cdrom:sr0 --cost=100 ## 설치 패키지 %packages @additional-devel @base @client-mgmt-tools @console-internet @core @debugging @development @directory-client @hardware-monitoring @java-platform @korean-support @large-systems @legacy-unix @network-file-system-client @performance @perl-runtime @server-platform @server-platform-devel @server-policy libXinerama-devel xorg-x11-proto-devel startup-notification-devel libgnomeui-devel libbonobo-devel libXau-devel libgcrypt-devel popt-devel libXrandr-devel libxslt-devel libglade2-devel gnutls-devel mtools pax python-dmidecode oddjob sgpio device-mapper-persistent-data systemtap-client jpackage-utils samba-winbind certmonger pam_krb5 krb5-workstation tcp_wrappers perl-DBD-SQLite %end ## 설치 후 전원 off # 설치가 모든 끝난 시스템은 꺼지도록해서 진행이 모두 끝났음을 쉽게 알아보기 위함이다. kickstart의 맨 마지막 작업으로 kickstart 설정 파일에서의 라인 위치에 상관 없이 마지막에 동작한다. poweroff ## OS 설치 후 작업 # 미리 만들어 놓은 쉘스크립트 파일을 다운 받아 돌린다. %post wget 'http://192.168.0.140/ks/basic_65.sh' --output-document=/root/basic_65.sh wget 'http://192.168.0.140/ks/firstcheck.sh' --output-document=/root/firstcheck.sh chmod 755 /root/basic_65.sh chmod 755 /root/firstcheck.sh sh /root/basic_65.sh rm -f /root/basic_65.sh
4. 테스트
구성도 대로 네트워크 구성을 하고, 서버들을 통해 설치를 해본다.
4.1. 서버 정보
CPU : Intel E3-1230V2
M/B : Supermicro X9SCL-F
Disk : Sandisk Ultra Plus 128G SSD
4.2. 진행 과정
진행 과정은 아래와 같다.
1) pxe dhcp 서버로 부터 ip를 할당 받는다.
2) tftp를 통해 /etc/dhcp/dhcpd.conf 에 명시된 대로 pxelinux.0 파일을 받고서, menu.c32, vesamenu.c32, default 파일을 받는다.
3) default 파일의 내용대로 선택 메뉴를 띄운다.
4.3. 진행 화면
1) 4.2. 진행과정 에서 1), 2) 과정이다.
2) 4.2. 진행과정 에서 3) 과정이다.
3) /tftpboot/redhat6.5 디렉토리 내의 initrd.img, vmlinuz 파일을 받아서 압축을 풀고 부팅한다.
4) ks65.cfg에 명시된 대로 파일시스템 등을 구성 하고, kickstart 서버로 부터 패키지를 받아 설치를 진행한다.
5) ks65.cfg 에 %post에 명시된 과정까지 모두 진행하고 시스템 전원이 꺼진다.
6) 설치가 끝난 서버를 다시 켠 후 ip, hostname, 외장 스토리지 연결, 서비스별 작업 등을 하면 되겠다.
PXE boot for EFI 참조 문서 :
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config-efi.html
이상으로 문서를 마친다.
안녕하세요.본문 내용에 /boot/efi 라는 파일시스템이 있는데 정확히 어떤 것을 하는 놈인가요? centos 설치시에도 /boot 를 만듦에도 불구하고 /boot/efi를 생성하라고 하더라구요. 답변 부타ㄱ드리ㅂ니다.
메인보드의 UEFI 펌웨어와 관련된 것이고, /boot/efi는 레드햇의 EFI 어플리케이션이 포함된 영역입니다.
참고로 아래 사이트를 참조 하세요~
https://access.redhat.com/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s2-grub-whatis-booting-uefi.html
정말 매우 땡큐 베리 감사합니다. ㅋ정리하는데 매우 큰 도움이 되었어요 ^^
^^