這兩天學習kickstart的部署,採用 pxe + dhcp + tftp + nfs 的方式,下面把整個流程簡要地列出來。linux
我這裏用的系統是rhel6.5,對於rhel5/centos5系列的系統略有不一樣。ios
先簡單描述一下經過網絡啓動安裝的過程:centos
客戶端設置爲經過網絡啓動,可能須要在bios中設定開啓該功能bash
啓動以後在局域網內發出廣播服務器
dhcp服務器響應該廣播,客戶端得到IP地址,以及一些額外信息,好比tfpt服務器的IP,須要下載的文件等網絡
客戶端從tftp服務器中獲取須要的啓動文件(pxelinux.0)及其配置文件app
客戶端經過指定方式獲取自動應答文件(ks.cfg),而後開始自動化安裝dom
下面是完整過程:ssh
dhcp服務:socket
安裝
yum install -y dhcp
修改配置文件/etc/dhcp/dhcpd.conf,內容以下:
subnet 192.168.80.0 netmask 255.255.255.0 { range 192.168.80.100 192.168.80.110; option domain-name-servers 192.168.80.12; option domain-name "fhjjabba.com"; option routers 192.168.80.2; option broadcast-address 192.168.80.255; default-lease-time 600; max-lease-time 7200; next-server 192.168.80.12; filename "/pxelinux.0"; }
上面的配置中除了最後兩句以外,其它的配置項均可以直接從示例配置中複製過來修改,示例文件是/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample,關於dns的配置不是必須的(聽說是)。
next-server用於指定tftp服務器的地址,filename則指定要從該服務器下載的文件,其中的路徑"/"並不是指操做系統的根,而是tftp服務本身的根,下面講到tftp服務配置時再細說。
配置好了之後能夠啓動服務了
service dhcpd start
這裏須要注意的是,dhcpd.conf中必須至少有一個subnet與當前主機處於同一網段,不然dhcp服務將啓動失敗。根據以上配置,我當前的主機必須有一個192.168.80.0/24的地址。
tftp服務:
安裝
yum install -y tftp-server
由於tftp服務是由xinetd管理的,因此其配置文件是/etc/xinetd.d/tftp,修改後內容以下:
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
其實只是將disable = yes改爲了disable = no,而後重啓xinetd
service xinetd restart
檢驗tftp服務是否已經啓動
netstat -ulnp | grep :69
能看到結果說明tftp正常啓動了。
這裏重點關注一下tftp配置文件中的server_args項,後面的值是/var/lib/tftpboot,這就是tftp服務的根目錄,因此上面提到的"/pxelinux.0"文件的完整路徑應該是/var/lib/tftpboot/pxelinux.0。
接下來爲客戶端準備一些必要文件。
包括內核vmlinuz,內存映像initrd.img,引導程序pxelinux.0。
首先掛載系統光盤到/mnt/cdrom
mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom
複製其中的內核和內存映像
cp /mnt/cdrom/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot
另外還有不少教程說要複製/mnt/cdrom/isolinux/下的boot.msg和vesamenu.c32兩個文件,這些都不是必須的,boot.msg是系統啓動時輸出的一些提示信息,vesamenu.c32是一個菜單。這裏我就不復制了,待會修改配置時把它們去掉就好。
而後是引導程序pxelinux.0,它是由syslinux包提供的,因此要安裝syslinux
yum install -y syslinux
裝好後就能夠複製了
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
客戶端下載了pxelinux.0後還會下載其配置文件,該配置文件規定放在tftp根目錄下的名爲pxelinux.cfg的目錄中,因此先建立這個目錄
mkdir /var/lib/tftpboot/pxelinux.cfg
配置文件能夠直接複製/mnt/cdrom/isolinux下的isolinux.cfg,名稱默認爲default
cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
而後爲了修改這個配置文件,還須要修改其權限
chmod u+w /var/lib/tftpboot/pxelinux.cfg/default
個人配置以下:
#default vesamenu.c32 default linux prompt 0 #display boot.msg label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=nfs:192.168.80.12:/nfs_share/ks.cfg
有兩行以「#」開頭的是註釋,就是剛纔沒有複製到的兩個文件。
注意第二行default linux和下面的label linux,這兩項是對應的,表示默認就使用label linux下面的配置。重點關注label linux下面第四行的ks=...這一項,是我本身加上的,意思是指定系統安裝過程當中的自動應答文件,根據實際狀況本身填寫,若是是http或ftp的話格式就是http://ip/path/to/ks.cfg。
nfs服務:
安裝
yum install -y nfs-utils
而後設置須要共享的目錄,我設的是/nfs_share,配置文件是/etc/exports
mkdir /nfs_share echo "/nfs_share *(ro,async,nohide,crossmnt)" >> /etc/exports
exports文件說明了nfs須要共享的目錄,這裏建議加上nohide和crossmnt兩個選項,否則客戶端有可能沒法掛載。
而後在共享目錄中提供自動應答文件,我直接複製/root下的anaconda-ks.cfg了
cp ~/anaconda-ks.cfg /nfs_share/ks.cfg
而後手動編輯ks.cfg。
裏面具體每一項我就很少說了,下面是個人配置:
# Kickstart file automatically generated by anaconda. #version=DEVEL install text key --skip nfs --server=192.168.80.12 --dir=/nfs_share/cdrom lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$9ZnVhZodnRm03BDB$0bVVH1uMQeHmUbKTRuaNas2wrJYebJwIa6RQTcdqOFVn0Qw/fVwowbcdGx9zhs9xL7/kvSouyeVkUbAefZtO60 firewall --service=ssh authconfig --enableshadow --passalgo=sha512 selinux --permissive timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" reboot clearpart --all --drives=sda zerombr part /boot --fstype=ext3 --size=100 part / --fstype=ext3 --size=5120 part /usr --fstype=ext3 --size=10240 part /home --fstype=ext3 --size=5120 part swap --size=1024 %packages --nobase @core %end
注意nfs那一項,指定了nfs服務器的ip和系統鏡像所在的目錄(即系統安裝過程當中須要下載的各類安裝包),我把系統光盤掛在了/nfs_share/cdrom下,這裏就要指定這個目錄而不是/nfs_share。另外,由於這個目錄是/nfs_share的子目錄,因此在/etc/exports中就要指定nohide和crossmnt兩個選項。
由於此前系統光盤已經掛在了/mnt/cdrom下,因此能夠用下面的方式再次掛載
mount --bind /mnt/cdrom /nfs_share/cdrom
這樣就同時存在有兩個入口了。
還有那個rootpw項就是設置root密碼的,後面一長串是我設的密碼加密後的結果,你能夠根據本身須要設置,利用grub-crypt命令便可
# grub-crypt Password: Retype password: $6$eHcHyEchzEgZAkMl$dUvm9Ik06ZeYfIlFPeYsNhGqczu7SbkP19bupWj2RUQnZzjKrr9SJ03/Q9e8gHRTXCWDkcZHsExH6WtzIMiCe.
就是把最後的結果複製粘貼進去便可。
若是忘記作這一步,那麼登錄系統就要輸入我設置的密碼咯,因此你要改密碼,能夠在grub引導界面給內核添加一個啓動參數,在後面加上「1」或「s」便可,具體方法仍是去google一下吧,忘記root密碼的人太多了。。。
由於這個配置文件是從root的家目錄複製出來的,因此還要修改權限讓全部人可讀,不然客戶端將沒法下載該文件
chmod +r /nfs_share/ks.cfg
而後啓動nfs服務便可
service nfs start
好了,完整配置過程已經完成,接下來就能夠新建一臺機器作實驗了。
不過還有幾點須要說明一下:
新建的虛擬機要與dhcp服務器在同一個局域網中,並且儘可能不要出現多個dhcp服務器,因此最好就是把兩臺虛擬機放在host-only網絡中。
新建虛擬機時的虛擬磁盤要立刻分配足夠大小的空間,不然安裝時會出現沒法分配足夠磁盤空間的錯誤。例如個人ks.cfg中配置的分區加起來有21+G,那麼新建虛擬磁盤最好就當即分配25G,而後才能順利安裝。
若是客戶端得到ip地址後沒法鏈接tftp服務器,即出現鏈接超時的狀況,就把selinux和iptables都關掉。