原文發表於:2010-09-05 轉載至cu於:2012-07-21 一.原理簡介 PXE(preboot execute environment)工作於Client/Server的網路模式,支持工作站通過網路從遠端伺服器下載鏡像,並由此支持來自網路的操作系統的啟動。啟動過程中,終端由DHCP伺服器 ...
原文發表於:2010-09-05
轉載至cu於:2012-07-21
一.原理簡介
PXE(preboot execute environment)工作於Client/Server的網路模式,支持工作站通過網路從遠端伺服器下載鏡像,並由此支持來自網路的操作系統的啟動。啟動過程中,終端由DHCP伺服器分配IP地址,再用TFTP(trivial file transfer protocol)等協議下載存在於伺服器(NFS,FTP,HTTP等)的Liunx內核和根文件系統等到本機記憶體中並執行,由此完成終端基本軟體設置,從而引導預先安裝在伺服器中的終端操作系統。
Kickstart 是一種無人職守安裝方式。它通過記錄典型的安裝過程中所需人工干預填寫的各種參數,並生成一個ks.cfg文件;在其後的安裝過程中單出現要求填寫參數的時候,安裝程式會查找kickstart文件,在能找到合適的參數情況下就不需要人工干預。
二.環境說明
os:
CentOS 5.4 i386
soft:
dhcp, nfs, tftp, kickstart(gnome 或者x-window)
可以使用yum安裝:
yum –y install dhcp* yum –y install nfs* yum –y install tftp* yum –y install system-config-kickstart*
ip:
eth0: 192.168.1.254
三.安裝配置過程簡介
1. 配置DHCP
more /etc/dhcpd.conf # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # # Location: Zhangjiang IDC # Date: 2010-08-01 ddns-update-style interim; ignore client-updates; allow booting; allow bootp; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.254; option subnet-mask 255.255.255.0; option domain-name-servers 192.168.1.254; option time-offset -18000; # Eastern Standard Time range dynamic-bootp 192.168.1.10 192.168.1.250; default-lease-time 21600; max-lease-time 43200; # Group the PXE bootable hosts # PXE-server configuration direction next-server 192.168.1.254; #指向nfs伺服器 filename "/pxelinux.0"; #/tftp根目錄下的啟動引導文件 # we want the nameserver to appear at a fixed address host ns { hardware ethernet 00:1C:25:80:F4:58; #張江機房的筆記本網卡mac fixed-address 192.168.1.2; } }
重啟dhcp服務:
/etc/init.d/dhcpd restart
2. 配置TFTP
more /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 = -u nobody -s /tftpboot #-s指定tftp根目錄 disable = no #預設yes,關閉 per_source = 11 cps = 100 2 flags = IPv4 }
重啟tftp服務:
/etc/init.d/xinetd.restart
查看tftp服務是否啟動:
chkconfig –list | grep tftp
3. 配置NFS
NFS需要向RPC註冊才能被客戶端調用,一般做埠映射的portmap是預設安裝的,沒有的話可以使用yum安裝:
yum –y install portmap*
可以直接使用掛載的鏡像,這裡是拷到伺服器上為了建立一個專門存放常用的鏡像文件建的目錄。
mount /dev/cdrom /mnt mkdir /ios/CentOS_5.4 cp –a /mnt/* /ios/CentOS_5.4
#共用tftp的根目錄,192.168.1.0/24網段的用戶有隻讀許可權 echo "/tftpboot 192.168.1.0/24(ro,sync)" > /etc/exports #共用存放鏡像文件的目錄,所有用戶有隻讀許可權 echo "/ios/CentOS_5.4 *(ro,sync)" >> /etc/exports
#不重啟nfs伺服器情況下配置生效 exportfs –arv #重啟服務 /etc/init.d/portmap restart /etc/init.d/nfs resart
查看共用目錄是否生效:
showmount –e localhost
4. 配置PXE啟動需要的文件
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
# pxelinux.0依賴於syslinux,沒有安裝使用yum:yum –y install syslinux*
# pxelinux.0是PXE啟動引導文件
cp /ios/CentOS_5.4/ioslinux/vmlinuz /tftpboot cp /ios/CentOS_5.4/ioslinux/initrd.img /tftpboot
# vmlinuz和initrd.img是不同版本的系統內核和系統引導文件,安裝不同版本系統時請使用各版本的vmlinuz和initrd.img
mkdir /tftpboot/pxelinux.cfg cp /ios/CentOS_5.4/ioslinux.cfg /tftpboot/pxelinux.cfg/default
到目前已經可以從網路安裝系統了。測試如下:
啟動伺服器,一般F12進入PXE網路啟動,向DHCP請求IP,DHCP響應包含IP地址和pxelinux啟動程式位置;PXE客戶端收到響應後,向伺服器請求傳送文件(pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img);客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程式首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網路安裝(NFS, FTP, HTTP),則會在這個時候初始化網路,並定位安裝源位置。(由於PXE獲取的是安裝用的內核以及安裝程式等,而安裝程式要獲取的是安裝系統所需的二進位包以及配置文件,它們需要的內容不同造成PXE模塊和安裝程式是相對獨立的,PXE的網路配置並不能傳遞給安裝程式,從而進行兩次獲取IP地址過程)。
5. 配置ks.cfg文件
ks.cfg文件可以由以下方法生成:
1. 每次裝好一臺CentOS(RedHat),安裝程式都會自動創建一個kickstart文件,文件記錄了真實的安裝配置,位置在/root/anaconda-ks.cfg,可以根據此配置來生成自己需要的ks.cfg文件;
2. 使用圖形化的kickstart配置工具,命令:system-config-kickstart;
3. 使用文本編輯器編輯。
以下是已經寫好的ks.cfg文件,僅供參考:
more /ios/ks.cfg # Kickstart file automatically generated by anaconda. install nfs --server=192.168.1.254 --dir=/ios/CentOS_5.4 #指出NFS的路徑和安裝文件的位置 lang en_US.UTF-8 keyboard us network --device eth0 --onboot yes --bootproto dhcp --hostname test #network --device eth0 --onboot yes –bootproto static --ip 192.168.1.10 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 8.8.8.8 --hostname test #一個網卡獲得地址的方式 network --device eth1 --onboot no --bootproto dhcp --hostname test rootpw --iscrypted $1$V26J9f5V$A7k9alSJs1GzG.qNBef6f/ #加密root密碼 firewall --disabled #--port=22:tcp authconfig --enableshadow --enablemd5 #使用md5認證 selinux --disabled timezone --utc Asia/Shanghai bootloader --location=mbr --driveorder=sda # 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 --linux part /boot --fstype ext3 --size=100 --ondisk=sda part swap --size=2048 --ondisk=sda part / --fstype ext3 --size=100 –grow --ondisk=sda #分區和選包是機房最頭疼的事,在這裡可以修改 #clearpart --linux --drives=sda #part /boot --fstype ext3 --size=200 #part pv.2 --size=0 --grow --ondisk=sda #volgroup VolGroup00 --pesize=32768 pv.2 #logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow #logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1000 --grow --maxsize=6144 #以上是一個LVM分區的示範 reboot #安裝完畢後重啟 %packages @development-libs @development-tools @admin-tools @editors #選包
將配置好的ks.cfg文件放在共用目錄內,這裡放到/ios下
echo "/ios 192.168.1.0/24(ro,sync)" >> /etc/exports exportfs –arv
修改/tftpboot/pxelinux.cfg/default配置:
more /tftpboot/pxelinux.cfg/default default ks #預設從標簽ks啟動 prompt 1 #顯示"boot:"提示符 timeout 30 #等待超時時間 display boot.msg #/tftpboot/boot.msg預設顯示boot.msg,可以根據實際情況編輯, F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg label linux #在boot:提示符後輸入linux(只是一個標簽),從下麵指出的內核啟動 kernel vmlinuz append initrd=initrd.img label text #在boot:提示符後輸入text,這裡是文字界面安裝 kernel vmlinuz append initrd=initrd.img text label ks #default預設,從ks.cfg讀取安裝信息,無需人工干預 kernel vmlinuz append ks=nfs:192.168.1.254:/ios/ks.cfg initrd=initrd.img ksdevice=link #ksdevice=link,從連接的網卡讀取安裝文件 label local localboot 1 label mem kernel memtest append -
6. 進階
由於機房目前常安裝的系統是RHEL4.7, RHEL4.7 x86_64, CentOS5.4, CentOS5.4 x86_64。可以將四種鏡像放在專門的目錄內。例如:
RHEL4.7:/ios/rhel4.7
RHEL4.7 x86_64: /ios/rhel4.7-x86_64
CentOS5.4: /ios/centos5.4
CentOS5.4 x86_64: /ios/centos5.4- x86_64
/tftp根目錄(這裡是/tftpboot下,各版本的內核和引導文件也需要改變位置:
RHEL4.7:/ios/rhel4.7/vmlinuz
/ios/rhel4.7/initrd.img
RHEL4.7 x86_64: /ios/ rhel4.7-x86_64/vmlinuz
/ios/ rhel4.7-x86_64/initrd.img
CentOS5.4: /ios/centos5.4/vmlinuz
/ios/centos5.4/initrd.img
CentOS5.4 x86_64: /ios/centos5.4- x86_64/vmlinuz
/ios/centos5.4- x86_64/ initrd.img
PXE引導文件(這裡是/tftpboot/pxelinux.cfg/default)修改:
default 3 prompt 1 timeout 300 display boot.msg F1 boot.msg F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg label 1 kernel rhel4.7/vmlinuz append initrd=rhel4.7/initrd.img label 2 kernel rhel4.7-x86_64/vmlinuz append initrd=rhel4.7-x86_64/initrd.img label 3 kernel centos5.4/vmlinuz append initrd=centos5.4/initrd.img label 4 kernel centos5.4-x86_64/vmlinuz append initrd=centos5.4-x86_64/initrd.img label 1-ks_** kernel rhel4.7/vmlinuz append ks=nfs:192.168.1.254:/ios/rhel4.7ks_**.cfg initrd=rhel4.7/initrd.img ksdevice=link label 2-ks_** kernel rhel4.7-x86_64/vmlinuz append ks=nfs:192.168.1.254:/ios/rhel4.7-x86_64ks_**.cfg initrd=rhel4.7-x86_64/initrd.img ksdevice=link label 3-ks_** kernel centos5.4/vmlinuz append ks=nfs:192.168.1.254:/ios/centos5.4ks_**.cfg initrd=centos5.4/initrd.img ksdevice=link label 4-ks_** kernel centos5.4-x86_64/vmlinuz append ks=nfs:192.168.1.254:/ios/centos5.4-x86_64ks_**.cfg initrd=centos5.4-x86_64/initrd.img ksdevice=link label local localboot 0 label mem kernel memtest append –
這裡由於選項太多,可以在tftp根目錄下啟用boot.msg與options.msg文件來說明安裝什麼樣的操作系統和怎樣安裝操作系統。如:
boot.msg Install RHEL4.7: 1 Install RHEL4.7 x86_64: 2 Install CentOS5.4: 3 Install CentOS5.4 x86_64: 4 Default: Graph mode. If you want to use text mode, type: [number] text F1: boot.msg F2: options.msg
options.msg Install RHEL4.7: 1 Install RHEL4.7 x86_64: 2 Install CentOS5.4: 3 Install CentOS5.4 x86_64: 4 Default: Graph mode. If you want to use text mode, type: [number] text If you want to use kickstart, the flowing list the different OS ks.cfg: 1-ks_**: RHEL4.7 2-ks_**: RHEL4.7 x86_64 3-ks_**: CentOS5.4 4-ks_**: CentOS5.4 x86_64 F1: boot.msg F2: options.msg
7. 小結
只要註意各操作系統的內核和引導文件的對應關係,就能擴展到多套系統。
kickstart文件能在原來的基礎上修改的就在原來的基礎上修改,稍加時日,就可以形成針對各業務不同的kickstart文件,這樣就方便IDC人員實現Linux操作系統的自動化安裝。