天天看點

Linux Kickstart無人值守安裝

在我們的網絡維護生涯中,有不少朋友,感覺到自己在機械的做一件事情,在無聊、無趣和無奈中工作。尤其一些簡單重複的操作

更容易讓大家感到工作的無趣。今天将給大家介紹如何大規模的部署RedHat

Linux作業系統,避免了手工安裝的繁瑣。當然本方法也使用于一些特殊場合,譬如沒有光驅或光驅壞掉的計算機、手中沒有安裝CD光牒等情況。

在安裝

RedHat

Linux企業版的過程中,我們都知道它允許通過NFS、HTTP或FTP協定來進行網絡安裝。但是在一般情況下我們需要有一個安裝引導媒體(引導CD光牒、

引導軟碟、U盤等),有沒有一種方法不通過引導CD光牒方式來安裝呢,而直接通過網絡來進行安裝?答案是有,即通過PXE技術實作。  

一、基本原理

   那麼PXE到底是什麼呢?

PXE(Pre-boot Execution

Environment)是由Intel設計的協定,它可以使計算機通過網絡啟動。協定分為client和server兩端,PXE

client在網卡的ROM中,當計算機引導時,BIOS把PXE client調入記憶體執行,并顯示出指令菜單,經使用者選擇後,PXE

client将放置在遠端的作業系統通過網絡下載下傳到本地運作。

既然是通過網絡傳輸,就需要IP位址;也就是說在其啟動過程中,用戶端請求伺服器配置設定IP位址,之後PXE Client使用TFTP Client

通過TFTP(Trivial 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.0、pxelinux.cfg/default、vmlinuz、initrd.img等檔案。

   第四步:Boot Server響應用戶端請求并傳送檔案

當伺服器收到用戶端的請求後,他們之間之後将有更多的資訊在用戶端與伺服器之間作應答, 用以決定啟動參數。BootROM 由 TFTP

通訊協定從Boot

Server下載下傳啟動安裝程式所必須的檔案(pxelinux.0、pxelinux.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 Server、DHCP Server和NFS

Server運作在另外一台Linux Server上。Bootstrap檔案、配置檔案、Linux核心都放置在Linux

Server上TFTP伺服器的根目錄下。而Linux根檔案系統存放于NFS Server的共享目錄中。

PXE client在工作過程中,需要三個二進制檔案:bootstrap、Linux 核心和Linux根檔案系統。Bootstrap檔案是可執行程式,它向使用者提供簡單的控制界面,并根據使用者的選擇,下載下傳合适的Linux核心以及Linux根檔案系統。

二、配置過程

配置PXE安裝,要進行如下步驟:

① 配置DHCP,用于給用戶端提供IP位址及其它資訊

② 配置TFTP伺服器,用于提供用戶端PXE引導所必須的檔案

③ 配置NFS伺服器,用于存放安裝樹

④ 配置Kickstart,用于自動應答安裝

⑤ 使用PXE功能引導客戶機

   1、DHCP的安裝與配置

PXE引導安裝過程中,PXE用戶端通過DHCP擷取PXE伺服器位址,PXE引導檔案名稱;然後客戶機在使用TFTP協定從TFTP伺服器下載下傳引導檔案

并執行,進而啟動計算機安裝程式。引導檔案執行後,接着下載下傳安裝程式啟動安裝。RedHat

Linux使用了ISC的dhcpd軟體,完成它的安裝與配置。

1)安裝DHCP軟體包

[root@qiuri Server]# rpm -ivh dhcp-3.0.5-13.el5.i386.rpm

Preparing...                ########################################### [100%]

   1:dhcp                      ########################################### [100%]

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 dhcpd on

2、安裝配置TFTP伺服器

在PXE安裝過程中,客戶機在使用TFTP協定從TFTP伺服器下載下傳引導檔案并執行。我們主要通過配置TFTP伺服器和PXE的引導配置完成這個過程。

1)安裝配置TFTP伺服器

首先,安裝TFTP伺服器軟體包,RedHat提供了如下兩個軟體包:

tftp-server:服務端程式

tftp :用戶端程式

[root@qiuri Server]# rpm -ivh tftp-server-0.42-3.1.i386.rpm

   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 LinuxCD光牒中已提供,

我們隻要安裝了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 安裝CD光牒目錄中的 '''p_w_picpaths/pxeboot/{vmlinuz,initrd.img}''' 啟動檔案複制到某個安裝目錄,比如:'''/tftpboot/ ''':

[root@qiuri Server]# cp /media/rhel5/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /tftpboot/

[root@qiuri Server]# cp /media/rhel5/isolinux/*.msg /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

将CD光牒中的 '''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

  append initrd=initrd.img text

label ks

  append ks initrd=initrd.img

… …

3、安裝配置NFS伺服器

安裝媒體存儲在伺服器上的一個目錄中,可以使用各種網絡協定通路它,比如 HTTP,FTP,和NFS。

也就是我們前面提到的OS Server。這裡使用 NFS 服務來提供安裝媒體,隻需要将系統CD光牒内容拷貝放到共享目錄下即可。

建立共享目錄,并将CD光牒内容拷貝到共享目錄中:

[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+rx /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 --initabel

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裡改成從硬碟啟動。如果仍然從CD光牒啟動機器,又會重複前面的自動安裝步驟。

1.    關閉防火牆iptables和selinux

service iptables stop

chkconfig iptables off

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

kickstart伺服器排除

1、關閉防火牆,系統自帶的和IPTABLES都要關閉

2、 從網卡啟動,擷取不到IP位址檢查你的DHCP伺服器是否開機,使用#netstat  -tulnp | grep dhcpd ,來檢視是否在監聽67号端口。

3、擷取IP後,在TFTP那步卡住了。檢查你的DHCP配置檔案,next-server 是不是指的正确的tftp伺服器。TFTP伺服器是否開啟,是否運作正常。

可以在linux裡面使用這個方法來測試

#tftp 您的伺服器IP   登陸進入後

tftp>get pxelinux.0  

tftp>quit

檢視目前目錄是否有pxelinux.0這個檔案,有的話,證明你的tftp伺服器是正常的最後檢查你的網絡中是不是還有其他dhcp伺服器

3、核心成功加載後,系統有完成自動安裝,需要人工介入,那就證明你的kickstart腳本檔案出問題了,需要重新生成一個。

4、監控伺服器的/var/log/message檔案,尋找故障原因。

繼續閱讀