Linux Kickstart無人值守安裝

Linux Kickstart大規模部署安裝
   在我們的網絡維護生涯中,有不少朋友,感覺到自己在機械的做一件事情,在無聊、無趣和無奈中工作。尤其一些簡單重複的操作更容易讓大家感到工作的無趣。今天將給大家介紹如何大規模的部署RedHat Linux操作系統,避免了手工安裝的繁瑣。當然本方法也使用於一些特殊場合,譬如沒有光驅或光驅壞掉的計算機、手中沒有安裝光盤等情況。

   在安裝RedHat Linux企業版的過程中,我們都知道它允許通過NFSHTTPFTP協議來進行網絡安裝。但是在一般情況下我們需要有一個安裝引導介質(引導光盤、引導軟盤、U盤等),有沒有一種方法不通過引導光盤方式來安裝呢,而直接通過網絡來進行安裝?答案是有,即通過PXE技術實現。

一、基本原理

      PXE到底是什麼東東?
PXE(Pre-boot Execution Environment)是由Intel設計的協議,它可以使計算機通過網絡啓動。協議分爲clientserver兩端,PXE client在網卡的ROM中,當計算機引導時,BIOSPXE client調入內存執行,並顯示出命令菜單,經用戶選擇後,PXE client將放置在遠端的操作系統通過網絡下載到本地運行。
既然是通過網絡傳輸,就需要IP地址;也就是說在其啓動過程中,客戶端請求服務器分配IP地址,之後PXE Client使用TFTP Client通過TFTPTrivial File Transfer Protocol)協議下載啓動安裝程序所需的文件。
簡單地說PXE網絡安裝,客戶機通過支持PXE的網卡向網絡中發送請求DHCP信息的廣播請求IP地址等信息,DHCP服務器給客戶端提供IP地址和其它信息(TFTP服務器、啓動文件等),之後請求並下載安裝需要的文件。在這個過程中需要一臺服務器來提供啓動文件、安裝文件、以及安裝過程中的自動應答文件等。下圖中介紹了Linux中自動安裝系統的詳細工作過程:

第一步:PXE Client向DHCP發送請求
首先,將支持PXE的網絡接口卡(NIC)的客戶端的BIOS設置成爲網絡啓動,通過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向網絡中的DHCP服務器索取IP地址等信息。
第二步:DHCP服務器提供信息
DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客戶端請求下載啓動文件
客戶端收到服務器的“迴應”後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0pxelinux.cfg/defaultvmlinuzinitrd.img等文件。
第四步:Boot Server響應客戶端請求並傳送文件
當服務器收到客戶端的請求後,他們之間之後將有更多的信息在客戶端與服務器之間作應答,用以決定啓動參數。BootROM TFTP通訊協議從Boot Server下載啓動安裝程序所必須的文件(pxelinux.0pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核。
第五步:請求下載自動應答文件
客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。或許你會說,剛纔PXE不是已經獲取過IP地址了嗎?爲什麼現在還需要一次?這是由於PXE獲取的是安裝用的內核以及安裝程序等,而安裝程序要獲取的是安裝系統所需的二進制包以及配置文件。由於它們需要的內容不同造成PXE模塊和安裝程序是相對獨立的,PXE的網絡配置並不能傳遞給安裝程序。從而進行兩次獲取IP地址過程。
接着會讀取該文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
第六步:客戶端安裝操作系統
ks.cfg文件下載回來後,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟件包。
OS Server和客戶端建立連接後,將開始傳輸軟件包,客戶端將開始安裝操作系統。安裝完成後,將提示重新引導計算機。這個時候注意,在重新引導的過程中一定要將BIOS修改回從硬盤啓動,不然的話又會重複的自動安裝操作系統。
在上面介紹中PXE client是需要安裝Linux的計算機,TFTP ServerDHCP ServerNFS Server運行在另外一臺Linux Server上。Bootstrap文件、配置文件、Linux內核都放置在Linux ServerTFTP服務器的根目錄下。而Linux根文件系統存放於NFS Server的共享目錄中。
PXE client在工作過程中,需要三個二進制文件:bootstrapLinux內核和Linux根文件系統。Bootstrap文件是可執行程序,它向用戶提供簡單的控制界面,並根據用戶的選擇,下載合適的Linux內核以及Linux根文件系統。 

 二、配置過程

 配置PXE安裝,要進行如下步驟:
 ① 配置DHCP,用於給客戶端提供IP地址及其它信息
 ② 配置TFTP服務器,用於提供客戶端PXE引導所必須的文件
 ③ 配置NFS服務器,用於存放安裝樹
 
 ④ 配置Kickstart,用於自動應答安裝
 ⑤ 使用PXE功能引導客戶機
   1、DHCP的安裝與配置
PXE引導安裝過程中,PXE客戶端通過DHCP獲取PXE服務器地址,PXE引導文件名稱;然後客戶機在使用TFTP協議從TFTP服務器下載引導文件並執行,從而啓動計算機安裝程序。引導文件執行後,接着下載安裝程序啓動安裝。RedHat Linux使用了ISCdhcpd軟件,完成它的安裝與配置。
1)安裝DHCP軟件包

[root@qiuri Server]# rpm -ivh dhcp-3.0.5-13.el5.i386.rpm
Preparing...                ########################################### [100%]
   1:dhcp                      ########################################### [100%]
[root@qiuri Server]#
2)配置DHCP
安裝完成後,複製DHCPD配置文件模版替換原配置文件/etc/dhcpd.conf
[root@qiuri Server]# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
接下來我們需要配置相關信息。爲了滿足我們的安裝需求,假設PXE服務器、DHCP服務器、TFTP服務器全部安裝在一臺爲192.168.1.1的計算機上。我們需要進行如下操作:
1)修改 /etc/dhcpd.conf文件,指定 IP 地址等信息。
2)在 '''/etc/dhcpd.conf'''中增加 tftp-server 需要推送給客戶端的啓動文件(bootstrap):filename "pxelinux.0";因爲 tftp的默認目錄是 /tftpboot,所以文件的絕對路徑就是: /tftpboot/pxelinux.0";當然也可以指定爲其它的路徑。
另外需要指定 next-server 參數,告訴客戶端在獲取到 pxelinux.0文件之後去哪裏獲取其餘的啓動文件: next-server 192.168.1.1;
最終的配置文件結果如下所示:
[root@qiuri Server]# vi /etc/dhcpd.conf  
ddns-update-style interim;
ignore client-updates;
allow booting; #定義能夠PXE啓動
allow bootp;  #定義支持bootp
subnet 192.168.1.0 netmask 255.255.255.0 {
        range  192.168.1.10 192.168.1.80;
        option routers                  192.168.1.1;
        option subnet-mask              255.255.255.0;
        default-lease-time 21600;
        max-lease-time 43200;
        next-server 192.168.1.1; #TFTP Server的IP地址
        filename "pxelinux.0";   #pxelinux啓動文件位置
}
配置完成後,重啓DHCP服務,並將它設爲開機自啓動。
[root@qiuri Server]# /etc/init.d/dhcpd start
啓動 dhcpd:                                               [確定]
[root@qiuri Server]# chkconfig --level 35 dhcpdon  
2、安裝配置TFTP服務器
在PXE安裝過程中,客戶機在使用TFTP協議從TFTP服務器下載引導文件並執行。我們主要通過配置TFTP服務器和PXE的引導配置完成這個過程。
1)安裝配置TFTP服務器
首先,安裝TFTP服務器軟件包,RedHat提供瞭如下兩個軟件包:
l tftp-server:服務端程序
l tftp :客戶端程序
[root@qiuri Server]# rpm -ivh tftp-server-0.42-3.1.i386.rpm
Preparing...                ########################################### [100%]
   1:tftp-server            ########################################### [100%]
[root@qiuri Server]# 
配置tftp服務
tftp 服務由xinetd服務管理。編輯 '''/etc/xinetd.d/tftp''' 文件,將 '''disable = yes''' 改爲:disable = no。
[root@qiuri Server]# vi /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             = -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
從這裏看出,默認選擇/tftpboot爲TFTP服務器的根目錄位置,配置完成後重啓xinetd服務,使TFTP服務器生效。
[root@qiuri Server]# /etc/init.d/xinetd restart
2)PXE引導配置(bootstrap)
PXE啓動映像文件由syslinux軟件包提供,RedHat Enterprise Linux光盤中已提供,如果沒有此軟件包可以到syslinux 主頁:http://syslinux.zytor.com/下載rpm來安裝。
我們只要安裝了syslinux,就會生成一個pxelinux.0,將 pxelinux.0 這個文件複製到 '''/tftpboot''' 目錄即可:

[root@qiuri Server]# rpm -ql syslinux |grep "pxelinux.0"
/usr/lib/syslinux/pxelinux.0
[root@qiuri Server]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/


3)用於網絡啓動的內核文件
將 RedHat 安裝光盤目錄中的 '''images/pxeboot/{vmlinuz,initrd.img}''' 啓動文件複製到某個安裝目錄,比如:'''/tftpboot/ ''':
[root@qiuri Server]# cp /media/rhel5/images/pxeboot/{vmlinuz,initrd.img} /tftpboot/
由於多個客戶端可以從一個PXE服務器引導,PXE引導映像使用了一個複雜的配置文件搜索方式來查找針對客戶機的配置文件。如果客戶機的網卡的MAC地址爲'''88:99:AA:BB:CC:DD''',對應的IP地址爲192.168.1.195,那麼客戶機首先嚐試以MAC地址爲文件名匹配的配置文件,如果不存在就以IP地址來查找。根據上述環境針對這臺主機要查找的以一個配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。如果該文件不存在,就會根據IP地址來查找配置文件了,這個算法更復雜些,PXE映像查找會根據IP地址16進制命名的客戶機配置文件。例如:192.168.1.195對應的16進制的形式爲C0A801C3。(可以通過syslinux軟件包提供的gethostip命令將10進制的IP轉換爲16進制)
如果C0A801C3文件不存在,就嘗試查找C0A801C文件,如果C0A801C也不存在,那麼就嘗試C0A801文件,依次類推,直到查找C文件,如果C也不存在的話,那麼最後嘗試default文件。
總體來說,pxelinux 搜索的文件的順序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C0A801C3
/tftpboot/pxelinux.cfg/ C0A801C
/tftpboot/pxelinux.cfg/ C0A801
/tftpboot/pxelinux.cfg/ C0A80
/tftpboot/pxelinux.cfg/ C0A8
/tftpboot/pxelinux.cfg/ C0A
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
對於一臺需要支持很多安裝機器的安裝服務器來說,將配置寫在與IP地址對應的文件裏很不靈活。把所有配置都集中在default文件中是個不錯的主意,可以減輕配置文件維護負擔。接下來創建/tftpboot/pxelinux.cfg/ 目錄,該目錄用於存放客戶端的配置文件。
[root@qiuri Server]# mkdir /tftpboot/pxelinux.cfg
將光盤中的 '''isolinux/isolinux.cfg''' 文件複製爲 '''/tftpboot/pxelinux.cfg/default'''
[root@qiuri Server]# cp /media/rhel5/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
查看default文件內容:
以下內容根據原文件略加修改並做了註釋(注:該文件中的空行和以 '''#''' 開頭的行都將被忽略)
# 默認啓動的是 'label linux' 中標記的啓動內核
default linux      
# 顯示 'boot: ' 提示符。爲 '0' 時則不提示,將會直接啓動 'default' 參數中指定的內容。
prompt 1     
# 在用戶輸入之前的超時時間,單位爲 1/10 秒。
timeout 60         
#顯示某個文件的內容,注意文件的路徑。默認是在 /tftpboot 目錄下。也可以指定位類似 'install/rhel4.4-inst/boot.msg' 這樣的,路徑+文件名。
display boot.msg  
F1 boot.msg  #按下 'F1' 這樣的鍵後顯示的文件。注意路徑。默認是 /tftpboot。注:syslinux 官方網站上說目前只能使用 F1-F10。
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
# 'label' 指定你在 'boot:' 提示符下輸入的關鍵字。
# 比如:
# boot: linux[ENTER]
# 這個會啓動 'label linux' 下標記的 kernel 和 initrd.img 文件。
# 這裏還定義了其它幾個關鍵字:
#  boot: text
#  boot: ks
# kernel 參數指定要啓動的內核。同樣要注意路徑,默認是 /tftpboot 目錄。
# append 指定追加給內核的參數,能夠在 gurb 裏使用的追加給內核的參數,在這裏也都可以使用。
# 使用 kickstart 安裝。
# 可以在 ks 參數後直接指定 kickstart 文件的位置。
label linux
  kernel vmlinuz
  append ks=nfs:192.168.1.1:/mnt/install/ks.cfg initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
… …
3、安裝配置NFS服務器
安裝介質存儲在服務器上的一個目錄中,可以使用各種網絡協議訪問它,比如 HTTP,FTP,和NFS。也就是我們前面提到的OS Server。這裏使用 NFS 服務來提供安裝介質,只需要將系統光盤內容拷貝放到共享目錄下即可。
創建共享目錄,並將光盤內容拷貝到共享目錄中:
[root@qiuri Server]#mkdir /mnt/install
[root@qiuri Server]#cp /media/rhel5/* /mnt/install
安裝NFS並將共享目錄發佈出去
[root@qiuri Server]# vi /etc/exports
/mnt/install *(ro,sync)
~
"/etc/exports" 1L, 25C written
重啓服務使配置生效。
[root@qiuri Server]# service portmap restart
停止 portmap:                                             [確定]
啓動 portmap:                                             [確定]
[root@qiuri Server]# service nfs start
啓動 NFS 服務:                                            [確定]
關掉 NFS 配額:                                            [確定]
啓動 NFS 守護進程:                                    [確定]
啓動 NFS mountd:                                      [確定]
檢查目錄/mnt/install是否被正確共享:
[root@qiuri Server]# shoumount –e locahost
Export list for localhost:
/mnt/install *
[root@qiuri Server]# chkconfig --level 35 nfs on
   4、配置Kickstart安裝
通常,我們在安裝操作系統的過程需要大量的人機交互過程,減少交互過程,爲了提高安裝效率Red Hat Linux開始支持一個稱爲 kickstart 的功能。使用這種方法,只需事先定義好一個Kickstart自動應答配置文件(通常存放在安裝服務器上),並讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了繁瑣的人機交互,實現無人值守的自動化安裝。
我們可以通過多種方法生成Kickstart配置文件,無論使用哪種方法無非就是創建一個應答文件,當你安裝好一臺Red Hat Linux機器,Red Hat Linux 安裝程序都會創建一個 kickstart 配置文件,記錄你的真實安裝配置。如果你希望實現和某系統類似的安裝,可以基於該系統的kickstart配置文件來生成你自己的kickstart配置文件。該文件位於/root/anaconda-ks.cfg
這裏我直接使用該文件,拷貝本文件到/mnt/install下。
[root@qiuri Server]#cp /root/anaconda-ks.cfg /mnt/install/ks.cfg
[root@qiuri Server]#chmod a+r /mnt/install/ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.1.1 --dir=/mnt/install   #這個選項告訴安裝程序:到服務器192.168.1.1的NFS共享目錄 /mnt/install下尋找安裝介質
key 2515dd4e215225dd
lang zh_CN.UTF-8
keyboard us
xconfig --startxonboot
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$3xvzZgwz$1jYjrh/XtXLblT00Mn3Ys0
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
… …
clearpart --all --drives=sda --initlabel
part / --fstype ext3 --size=130000
part swap --fstype swap --size=2048
part /backup --fstype ext3 --size=100 --grow
 
%packages
@office
@admin-tools
… …
emacs
gcc43-c++
libgfortran43
注意:關閉服務器端防火牆和SELINUX
5、配置客戶端PXE引導安裝
最後設置客戶端BIOS選擇從網卡啓動。具體方法因BIOS版本不同而異。

網卡中的PXE代碼會聯繫DHCP服務器來獲取IP地址以及啓動鏡像,然後啓動鏡像被載入並運行。

安裝完成後,安裝程序會提示你重新啓動機器。重新啓動機器時切記要在BIOS裏改成從硬盤啓動。如果仍然從光盤啓動機器,又會重複前面的自動安裝步驟。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章