簡介
安裝系統,聽起來是很簡單的事情,哪怕是完全沒有基礎,在網卡搜索一篇安裝教程,一步一步照着做,也可以把系統安裝好。當然,很多時候簡單的事,一旦數量多了之後,就會發現變得很難處理。只爲一臺電腦安裝系統容易,如果是一百臺呢,一千臺呢?如果有一天,老闆要求你把公司所有的電腦升級一下系統,難道還要拿着光盤或者U盤一臺一臺去安裝嗎?PXE的安裝環境,就是爲了解決這樣的問題出來的。
PXE(preboot execute environment)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持來自網絡的操作系統的啓動過程,其啓動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中並執行,可以直接就是內核,再由內核去找到網絡共享出來的yum源,加載安裝程序anaconda來安裝程序,如果再配合安裝自動應答文件Kickstart的話,就可以實現全自動安裝了。聽起來是不是很有意思,下面就來細細說明pxe全自動安裝環境的配置。
架構和流程
PXE自動部署操作系統啓動過程如下:
a) 客戶端計算機啓動,由於BIOS設置了網卡啓動,所以網卡PXE ROM中的程序被調入內存執行。
b) 客戶端在網絡中尋找DHCP服務器,然後請求一個IP地址;
c) DHCP服務器爲客戶端提供IP地址和其他網絡參數。
d) DHCP服務器聯繫到TFTP服務器爲此客戶端發送一個bootstrap(引導程序)。
e) 客戶端收到bootstrap(引導文件pxelinux.0)後執行,bootstrap會請求TFTP傳送bootstrap的配置文件(pxelinux.cfg/default);收到後讀配置文件,根據該配置文件內容和客戶情況,客戶端請求TFTP傳送內核映像文件(vmlinuz)和根文件系統文件(initrd.img)。
f) 啓動內核。
g) 內核根據bootstrap的配置文件,通過網絡獲取操作系統自動安裝腳本,並通過網絡服務(nfs/ftp/web)獲得系統所需安裝文件,按照自動安裝腳本的配置進行安裝。
DHCP服務器的配置
一、首先要先安裝好dhcp
yum install dhcp
二、然後要設置好dhcp服務的配置文件(/etc/dhcp/dhcpd.conf)
vim /etc/dhcp/dhcpd.conf option domain-name "test.org"; option domain-name-servers 172.16.139.1; default-lease-time 86400; max-lease-time 100000; log-facility local7; subnet 172.16.139.0 netmask 255.255.255.0 { range 172.16.139.10 172.16.139.20; option routers 172.16.139.1; next-server 172.16.139.1; filename "pxelinux.0"; }
option domain-name :指定搜索域
option domain-name-servers :指定DNS服務器
default-lease-time :指定IP地址租期
max-lease-time :指定最大租期的時間
log-facility local7 :指定日誌等級
range :地址池範圍
option routers :指定網關地址
next-server :指定下一個服務器地址,也就是指定pxe環境下的tftp服務器地址
filename :指定啓動文件的名字
想了解更多的dhcp的的選項,可以參考配置的例子/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample這個文件,或者用man dhcp
tftp服務器的配置
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號爲69。
在linux當中,tftp並不是一個獨立的服務,因爲它只是一個訪問量並不太的服務,所以它並沒有自己作爲獨立的守護進程,它會交給一個超級進程xinetd來管理,平時tftp服務並不啓動,由xinetd服務來負責監聽,當xinetd服務接受到請求的時候,它會喚醒tftp服務來處理,當tftp服務處理完請求之後,它又會停止服務。
我們現在配置tftp服務,主要是通過它來共享pxe啓動時所需要的引導程序和內核等等。
對於tftp服務,只要安裝好tftp-server程序包就可以了。
# yum install tftp-server 安裝程序包 # chkconfig tftp on 配置服務開機自動啓動 # service xinetd restart 啓動超級服務進程 # ss -unl | grep :69 查看服務有沒有在監聽
將pxe引導啓動所需要的文件複製到/var/lib/tftpboot/下面,然後啓動服務就可以了。
# yum install syslinux # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ pxe環境的引導文件 # cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ 內核文件 # cp /media/cdrom/isolinux/{splash.jpg,vesamenu.c32,boot.msg} /var/lib/tftpboot 用來顯示安裝選項界面 # mkdir /var/lib/tftpboot/pxelinux.cfg/ # cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default 引導文件的配置文件
kickstart文件的編寫
KickStart是一個自動應答文件。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種參數,並生成一個名爲ks.cfg的文件;在其後的安裝過程中(不只侷限於生成KickStart安裝文件的機器)當出現要求填寫參數的情況時,安裝程序會首先去查找KickStart生成的文件,當找到合適的參數時,就採用找到的參數,當沒有找到合適的參數時,才需要安裝者手工干預。
# yum install system-config-kickstart # system-config-kickstart kickstart文件的圖形化配置工具
ks文件的樣本
#version=DEVEL install url --url=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/ lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$CGsqab6d$Cd.PnnWtlL5XZAyr9J2zoMqyJH1QodcDp1pQp0uZ1f0Cq4eq9.TMkSQU6IfpvYZEYc32.lmF0lKuQwavnC49a0 # Reboot after installation reboot firewall --disabled authconfig --useshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet quiet" clearpart --all part /boot --fstype=ext4 --size=200 part pv.008002 --size=61440 volgroup vg0 --pesize=8192 pv.008002 logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480 logvol swap --name=swap --vgname=vg0 --size=2048 logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240 logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480 repo --name="CentOS" --baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/ --cost=100 repo --name="Fedora EPEL" --baseurl=http://172.16.0.1/fedora-epel/6/x86_64/ --cost=1000 %packages @Base @Core @base @basic-desktop @chinese-support @client-mgmt-tools @core @desktop-platform @fonts @general-desktop @graphical-admin-tools @legacy-x @network-file-system-client @perl-runtime @remote-desktop-clients @x11 ibus-table-cangjie ibus-table-erbi ibus-table-wubi lftp %end %post echo -e 'Mage Education Learning Services\nhttp://www.magedu.com\n' >> /etc/issue sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab [ ! -d /root/.ssh ] && mkdir /root/.ssh && chmod og=--- /root/.ssh cat >> /root/.ssh/authorized_keys << EOF ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlmq1z0G/7wbGuSUewfXlFnwzqCg/myqTi/AwP8LP+JJ49xzIKMzpeWXHD8RWIf5RlDzo+6N7uPK5O22x/QtMosi0egz4shavEJeUkO0EH+KygXXgBIGuMWmAsL+yzbgWXT9H3zdzXi/qWcrBeBv2nYB5mpYSf7o0xqdhCst1MTfcYLD8qxvkwC8RiqBA/1u9N6jeDFbHO+UzZYYCr9zgk9uz4Rrhb9BU7c1GhjUCgRwBDAuo47IHw/OT6KS9lb8lT2R/ujVoDARy/eOhw8cAFXo+QcvzNSW2qKf/Qo21uR/wz2u9SRV0lvUDNSvC2PYtR+iPlDwHY81md430yiNf9w== [email protected] EOF # Enable funcd sed -i 's@certmaster =.*@certmaster = 172.16.0.1@g' /etc/certmaster/minion.conf /sbin/chkconfig funcd off # Set the hostname ClientName=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F. '{print $NF}'` sed -i "s@HOSTNAME=.*@HOSTNAME=client$ClientName.magelinux.com@g" /etc/sysconfig/networks # set puppet agent sed -i '/\[main\]/a server=server.magelinux.com' /etc/puppet/puppet.conf /sbin/chkconfig puppet off # set hosts echo '172.16.0.1 server.magelinux.com server' >> /etc/hosts # yum repo %end
Yum源的共享
系統安裝過程必要要指定yum源,它可以通過光盤、ftp、http等等服務進行共享,這裏就以配置http服務來共享yum源,因爲httpd的共享配置相當簡單。
# yum install httpd # service httpd start # mkdir -pv /var/www/html/centos/6/x84_64 在http服務的目錄創建共享目錄 # mount --bind /media/cdrom /var/www/html/centos/6/x84_64 直接將已經掛載的安裝光盤再綁定到httpd服務的共享目錄下,這樣就可以共享yum源了
這時pxe環境就可以使用了,趕快找一臺去測試一下吧