XenServer 6.2 PXE 자동 설치 하기

XenServer 6.2 PXE 자동 설치 하기

 

작성일 : 2012-12-01

작성자 : 서진우 (alang@clunix.com)

 

1. XenServer PXE install 환경 구추

– Xenserver 설치 ISO 로 부터 PXE 부팅 관련 이미지 복사

PXE 서버에 아래와 같이 XenServer 에 대한 PXE 설치 환경을 적용한다.

# mount -o loop XenServer-6.2.0-install-cd.iso /mnt

# mkdir /tftpboot/linux-install/xenserver62

# cp /mnt/install.img /tftpboot/linux-install/xenserver62
# cp /mnt/boot/vmlinuz /tftpboot/linux-install/xenserver62
# cp /mnt/boot/xen.gz /tftpboot/linux-install/xenserver62
# cp /mnt/boot/pxelinux/mboot.c32 /tftpboot/linux-install

– 설치 constants.py 수정

# mkdir /tftpboot/linux-install/xenserver62/tmp/install -p
# cp /mnt/install.img /tftpboot/linux-install/xenserver62/tmp/install.img.gz
# cd /tftpboot/linux-install/xenserver62/tmp
# gzip -d install.img.gz
# cd install && cpio -i -d < ../install.img
# vi opt/xensource/installer/constants.py
DOM0_MEM, root_SIZE 수정
# (find . | cpio –quiet -c -o) > ../install.img.gz
# cd ..
# cp install.img.gz ../install.img

– tftp 설정 수정

# vi /tftpboot/linux-install/pxelinux.cfg/default

label 12
menu label ^12) Install XenServer 6.2
kernel mboot.c32
append xenserver62/xen.gz dom0_max_vcpus=4 dom0_vcpus_pin dom0_mem=4096M,max:4096M root_size=40960 com1=115200,8n1 console=com1,vga — xenserver62/vmlinuz xencons=hvc console=hvc0 console=tty0 answerfile=nfs://192.168.201.1:/home/clunix/OS/xenserver62/answerfile.xml install — xenserver62/install.img
만일 NIC가 여러개인 서버에서는 PXE 부팅 후, answerfile 을 받기위해 새롭게 dhcp를 할당받는데,
ethxx -> eth0 순으로 한참을 dhcp 송신 가능한 nic를 찾게 된다. 만일 eth0 에 Lan 선을 장착했다면
꽤 오랜 시간 waiting 해야 한다.

이때 append 설정에서 answerfile 을 다운받는데 사용되는 nic device를 지정할 수 있다.

answerfile 옵션 앞 문장에 answerfile_device=eth0 설정을 포함시켜 준다.
– 자동 응답 파일 생성

# cat /home/clunix/OS/xenserver62/answerfile.xml
<?xml version=”1.0″?>
<installation mode=”fresh” srtype=”lvm”>
<bootloader>extlinux</bootloader>
<primary-disk gueststorage=”yes”>sda</primary-disk>
<keymap>us</keymap>
<hostname>XenServer-Alang</hostname>
<root-password>root///</root-password>
<source type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver62</source>
<script stage=”filesystem-populated” type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver62/post-scripts.sh</script>
<admin-interface name=”eth0″ proto=”static”>
<ip>192.168.201.134</ip>
<subnet-mask>255.255.255.0</subnet-mask>
<gateway>192.168.201.254</gateway>
</admin-interface>
<name-server>192.168.123.86</name-server>
<timezone>Asia/Seoul</timezone>
<time-config-method>ntp</time-config-method>
<ntp-server>time.bora.net</ntp-server>
</installation>

# cat /home/clunix/OS/xenserver62/post-scripts.sh
#!/bin/sh
touch $1/tmp/post-executed
cat /proc/cmdline > $1/tmp/cmdline

mount -t nfs 192.168.201.1:/home/clunix/OS/xenserver62 $1/mnt
cp -a $1/mnt/clunix.package/* $1/root/
umount -l $1/mnt

# mkdir /home/clunix/OS/xenserver62/clunix.package

해당 폴더 밑에 기본적으로 복사하고 싶은것은 모두 복사해 둔다.
특히 xen_bin 패키지는 반드시 복사해 둔다.
(xenserver Patch, Nvidia driver, 10Gb Nic driver …)
xen_bin 안에 xen-network 와 sp1-patch 가 있음

# xen-network

기본 설치된 XenServer 의 네트워크 환경을 변경하는 스크립트이다.
————————————————————
ex) # xen-network [hostname] [ip] [netmask] [gateway] [dns]
————————————————————

# sp1-patch
기본 설치된 XenServer 에 XS62ESP1 Patch 를 적용하는 스크립트이다.

# xen-disk
기본적으로 sda 를 default SR로 잡는데, 여러개의 추가 디스크가 있는
경우 디스크 개별적으로 별도의 SR 을 생성하는 스크립트이다.
2. XenServer 설치 후 추가 작업 자동화
– 서버 기본 설정 반영 자동화 방법

Xenserver를 PXE로 자동 설치를 하면서 기본적인 설정을 반영하고자
할때 아래 방법을 이용할 수 있다.

기본 설정 및 작업 내역

hostname, ip, netmask, gateway, dns 설정
XenServer Patch Update
External Driver install
Disk 개별 SR 생성

우선 무인 응답 파일을 아래와 같이 수정한다.

# cat /home/clunix/OS/xenserver62/answerfile.xml
—————————————————————————
<?xml version=”1.0″?>
<installation mode=”fresh” srtype=”lvm”>
<bootloader>extlinux</bootloader>
<primary-disk gueststorage=”yes”>sda</primary-disk>
<keymap>us</keymap>
<hostname>XenServer-Alang</hostname>
<root-password>root///</root-password>
<driver-source type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver62/driver.bnx2x</driver-source>
<source type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver62</source>
<script stage=”filesystem-populated” type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver62/post-scripts.sh</script>
<admin-interface name=”eth0″ proto=”static”>
<ip>192.168.201.134</ip>
<subnet-mask>255.255.255.0</subnet-mask>
<gateway>192.168.201.254</gateway>
</admin-interface>
<name-server>192.168.123.86</name-server>
<timezone>Asia/Seoul</timezone>
<time-config-method>ntp</time-config-method>
<ntp-server>time.bora.net</ntp-server>
—————————————————————————–

post-scripts 에 설치 후 부가적으로 수행해야하는 작업들을 추가한다.
post-scripts 내용중 post-executed.sh 스크립트를 만드는 내용이 나오는데,
이 스크립트는 설치 후 첫번째 부팅 시 수행되는 작업 내용이다.

# cat /home/clunix/OS/xenserver62/post-scripts.sh
—————————————————————————–
#!/bin/sh

touch $1/tmp/post-executed
cat /proc/cmdline > $1/tmp/cmdline
mount -t nfs 192.168.201.1:/home/clunix/OS/xenserver62 $1/mnt
cp -a $1/mnt/clunix_bg.png $1/usr/share/splashy/themes/citrix-theme/background.png
cp -a $1/mnt/clunix_bg.png $1/usr/share/splashy/themes/default/background.png
cp -a $1/mnt/clunix_bg.png $1/usr/share/splash/background.png

cp -a $1/mnt/clunix.package/* $1/root/
umount -l $1/mnt

stringZ=`cat /proc/cmdline`
for service in $stringZ
do
if [ `expr match “$service” “xenip=”` -eq “6” ] ; then
IP=${service:6}
fi
if [ `expr match “$service” “xennm=”` -eq “6” ] ; then
NAME=${service:6}
fi
if [ `expr match “$service” “xengw=”` -eq “6” ] ; then
GW=${service:6}
fi

if [ `expr match “$service” “xendns=”` -eq “7” ] ; then
DNS=${service:7}
fi
done
cat <<make_scripts > $1/tmp/post-executed.sh
#!/bin/sh

sleep 60
/root/bin/xen-network $NAME $IP 255.255.255.0 $GW $DNS
sleep 1
/root/bin/xen-disk
sleep 5
/root/bin/sp1-patch
echo “XS62ESP1 Patch Completd.. Soon will be rebooted..”
sleep 5
rm -f /etc/rc3.d/S99xspostinstall
shutdown -r now
make_scripts

chmod 755 $1/tmp/post-executed.sh
ln -sf /tmp/post-executed.sh $1/etc/rc3.d/S99xspostinstall
——————————————————————————-

아래는 xen-network srcipts 내용이다.

# cat /home/clunix/OS/xenserver62/clunix.package/bin/xen-network
——————————————————————————-
#!/bin/sh

if [ $# -ne 5 ]
then
echo -n ”
————————————————————
ex) # xen-network [hostname] [ip] [netmask] [gateway] [dns]
————————————————————

exit;
fi

HTID=`xe host-list | grep uuid | awk -F “: ” ‘{print $2}’`
PIFID=`xe pif-list device=eth0 | grep ^uuid | awk -F “: ” ‘{print $2}’`

xe host-set-hostname-live host-uuid=$HTID host-name=${1}
xe pif-reconfigure-ip IP=${2} netmask=${3} gateway=${4} DNS=${5} mode=static uuid=$PIFID
xe host-param-set name-label=${1} uuid=$HTID
——————————————————————————–

아래는 xen-disk scripts 내용이다.

# cat /home/clunix/OS/xenserver62/clunix.package/bin/xen-disk
——————————————————————————–
#!/bin/sh
HTID=`xe host-list | grep uuid | awk -F “: ” ‘{print $2}’`
DLIST=`sfdisk -s | grep dev | cut -d : -f 1 | grep -v sda`

for DNAME in `echo $DLIST`
do

if [ -z $DNUM ] ; then
DNUM=1
fi

xe sr-create host-uuid=$HTID content-type=user device-config:device=$DNAME name-label=”VDI Storage ${DNUM}” shared=false type=lvm

DNUM=`expr $DNUM + 1`
done
——————————————————————————–

아래는 sp1-patch 스크립트 내용이다.

# cat /home/clunix/OS/xenserver62/clunix.package/bin/sp1-patch
——————————————————————————–
#!/bin/sh

HTID=`xe host-list | grep uuid | awk -F “: ” ‘{print $2}’`

cd /root
xe patch-upload file-name=./XS62ESP1.xsupdate
xe patch-apply host-uuid=$HTID uuid=0850b186-4d47-11e3-a720-001b2151a503
xe patch-list
———————————————————————————

만일 XenServer 설치 후 별도의 드라이브를 설치하고 싶은 경우
해당 드라이브 파일을 driver.<name> 형태 디렉토리에 복사해 둔다.
아래는 BCM 578710 10Gb driver 이다.

# mkdir /home/clunix/OS/xenserver62/driver.bnx2x
# ls -1
XS-PACKAGES
XS-REPOSITORY
bnx2-modules-kdump-2.6.32.43-0.4.1.xs1.8.0.835.170778-2.78.33-1.i386.rpm
bnx2-modules-xen-2.6.32.43-0.4.1.xs1.8.0.835.170778-2.78.33-1.i386.rpm
install
install.sh

– Splash 변경하기

CITRIX boot splash 를 변경하기

640×480 크기의 Png 파일을 아래 위치에 복사해 둔다.

/usr/share/splashy/themes/citrix-theme/background.png
/usr/share/splashy/themes/default/background.png
/usr/share/splash/background.png

3. PXE boot 후 XenServer 설치하기
이제 PXE Menu 가 나오면 해당 메뉴에서 [TAB] 를 누른다.

그럼..아래와 같이 append 뒤의 설정이 나타난다.

append xenserver62/xen.gz dom0_max_vcpus=4 dom0_vcpus_pin dom0_mem=4096M,max:4096M com1=115200,8n1 console=com1,vga — xenserver62/vmlinuz xencons=hvc console=hvc0 console=tty0 answerfile=nfs://192.168.201.1:/home/clunix/OS/xenserver62/answerfile.xml install — xenserver62/install.img

answerfile.xml install — xenserver62/install.img 구문중
answerfile.xml 과 install 키워드 사이에 아래 내용을 입력한다.

xenip=<ip> xennm=<hostname> xengw=<gateway> xendns=<dns>

그럼..네트워크 정보, Service Pack, network external driver 등이 자동으로 설치된다.
또한 장착된 개별 디스크를 개별 SR로 자동 추가한다.

주의) 설치 후 첫 번째 부팅 시, splash 화면이 지난 후 black screen 상태로 3~5분 정도
멈추어 있다. 이는 service pack 설치가 진행되는 과정으로 가만히 기다린다.

 

4. 기타 ..

Xenserver 7.0 기반의 PXE 환경 구현 시..

iso 파일을 mount 후 xenserver7.0 install 데이터를 source directory 로 copy 할때
최상위 경로에 dot hidden file 로 존재하는 .treeinfo 파일 도 반드시 복사해야 한다.
또한 answerfile.xml 도 약간 수정된 부분이 있다.

가장 대표적인 것이 bootloader 설정 부분이 제거되었다.

<bootloader>extlinux</bootloader>

아래는 7.0 에서 최종 성공한 answerfile 설정 내용이다.
< ?xml version=”1.0″?>
<installation mode=”fresh” srtype=”lvm”>
<primary -disk gueststorage=”yes”>sda</primary>
<keymap>us</keymap>
<hostname>XS70-HV00</hostname>
<root -password>root///</root>
<source type=”nfs”/>192.168.201.1:/home/clunix/OS/xenserver70/
<script stage=”filesystem-populated” type=”nfs”>192.168.201.1:/home/clunix/OS/xenserver70/post-scripts.sh</script>
<admin -interface name=”eth0″ proto=”static”>
<ipaddr>192.168.201.134</ipaddr>
<subnet>255.255.255.0</subnet>
<gateway>192.168.201.254</gateway>
</admin>
<name -server>192.168.123.86</name>
<timezone>Asia/Seoul</timezone>
<time -config-method>ntp</time>
<ntp -server>time.bora.net</ntp>
<ntp -server>time.nuri.net</ntp>
</installation>

 

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...