天天看點

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

本文目錄:

1.1 PXE說明

1.2 PXE流程

1.3 部署環境說明

1.4 部署DHCP

1.5 部署TFTP

1.6 提供pxe的bootloader和相關配置檔案

1.7 利用原版安裝鏡像擷取Linux核心檔案

1.8 選項設定

1.9 從網卡安裝系統-開機測試

1.10 通過http/ftp/nfs來提供系統安裝檔案

1.11 kickstart+PXE無人值守大量部署Linux

1.1 PXE說明

所謂的PXE是Preboot Execution Environment的縮寫,字面上的意思是開機前的執行環境。

要達成PXE必須要有兩個環節:

(1)一個是用戶端的網卡必須要支援PXE使用者端功能,并且開機時選擇從網卡啟動,這樣系統才會以網卡進入PXE用戶端的程式;

(2)一個是PXE伺服器必須要提供至少含有DHCP以及TFTP的服務!

且其中:

· DHCP服務必須要能夠提供用戶端的網絡參數,還要告知用戶端TFTP所在的位置;

· TFTP則提供用戶端的boot loader及kernel file下載下傳路徑。

還要加上NFS/FTP/HTTP(選擇一樣即可)等提供安裝檔案(安裝鏡像的解壓檔案),才算是比較完整的PXE伺服器。一般TFTP和DHCP服務都由同一台伺服器提供,且大多數時候還提供NFS/FTP/HTTP服務,是以PXE伺服器一般是提供3合一的服務。

1.2 PXE流程

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

(1).Client向PXE Server上的DHCP發送IP位址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC位址),如果合法則傳回Client的IP位址,同時将pxe環境下的Boot loader檔案pxelinux.0的位置資訊傳送給Client。

(2).Client向PXE Server上的TFTP請求pxelinux.0,TFTP接收到消息之後再向Client發送pxelinux.0大小資訊,試探Client是否滿意,當TFTP收到Client發回的同意大小資訊之後,正式向Client發送pxelinux.0。

(3).Client執行接收到的pxelinux.0檔案。

(4).Client向TFTP請求pxelinux.cfg檔案(其實它是目錄,裡面放置的是是啟動菜單,即grub的配置檔案),TFTP将配置檔案發回Client,繼而Client根據配置檔案執行後續操作。

(5).Client向TFTP發送Linux核心請求資訊,TFTP接收到消息之後将核心檔案發送給Client。

(6).Client向TFTP發送根檔案請求資訊,TFTP接收到消息之後傳回Linux根檔案系統。

(7).Client加載Linux核心(啟動參數已經在4中的配置檔案中設定好了)。

(8).Client通過nfs/ftp/http下載下傳系統安裝檔案進行安裝。如果在4中的配置檔案指定了kickstart路徑,則會根據此檔案自動應答安裝系統。

1.3 部署環境說明

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

1.4 部署DHCP

首先安裝dhcp服務端程式。

yum -y install dhcp

DHCP主要是提供用戶端網絡參數與TFTP的位置,以及boot loader的檔案名。同時,我們僅針對内網來告知TFTP的相關位置,是以可以編輯/etc/dhcp/dhcpd.conf在subnet的區塊内加入兩個參數即可。其中PXE上專門為PXE用戶端下載下傳的boot loader檔案名稱為pxelinux.0。

vim /etc/dhcp/dhcpd.conf

ddns-update-style none;

default-lease-time 259200;

max-lease-time 518400;

option routers172.16.10.10;

option domain-name-servers 172.16.10.10;

subnet172.16.10.0 netmask 255.255.255.0{

range172.16.10.11 172.16.10.100;

option subnet-mask 255.255.255.0;

next-server 172.16.10.10; # 就是TFTP的位置

filename"pxelinux.0"; # 告知得從TFTP根目錄下載下傳的boot loader檔案名

}

重新開機dhcp。

service dhcpd restart

1.5 部署TFTP

從流程圖中可以看出,boot loader檔案pxelinux.0以及核心相關的配置檔案(目錄pxelinux.cfg下)主要都是由TFTP來提供的!

TFTP的安裝很簡單,直接使用yum即可。不過要告訴用戶端TFTP的根目錄在哪裡,這樣用戶端才能找到相關檔案。另外要注意,TFTP是由xinetd這個super daemon所管理的,是以設定好TFTP之後,要啟動的是xinetd。

yum install tftp-server

預設TFTP服務的根目錄是/var/lib/tftpboot/,為了少寫些字母,将tftp的根目錄修改為/tftpboot/。修改tftp的配置檔案,主要是TFTP的根目錄。

vim /etc/xinetd.d/tftp

service tftp

{

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /tftpboot #重點在這裡!修改tftp的根目錄

disable = no

per_source = 11

cps = 100 2

flags = IPv4

}

建立tftp的根目錄。

mkdir /tftpboot

啟動TFTP并觀察之:

/etc/init.d/xinetd restart

chkconfig xinetd on

chkconfig tftp on

netstat -tulnp | grep xinetd

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

udp 0 0 0.0.0.0: 69 0.0.0.0:* 2238/ xinetd

接下來的檔案必須要放置于/tftpboot/目錄下。

1.6 提供pxe的bootloader和相關配置檔案

如果要使用PXE的開機引導的話,需要使用CentOS提供的syslinux包,從中copy兩個檔案到tftp的根目錄/tftpboot下即可。整個過程如下:

yum -y installsyslinuxcp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /tftpboot/

mkdir /tftpboot/pxelinux.cfgls -l /tftpboot/

-rw-r--r-- 1 root root 61796 Oct 16 2014menu.c32 # 提供圖形化菜單功能-rw-r--r-- 1 root root 26759 Oct 16 2014 pxelinux.0# boot loader檔案

drwxr-xr-x 2 root root 4096 Feb 24 20:02pxelinux.cfg # 開機的菜單設定在這裡-rw-r--r-- 1 root root 163728 Oct 16 2014 vesamenu.c32 # 也是提供圖形化菜單功能,但界面和menu.c32不同

pxelinux.cfg是個目錄,可以放置預設的開機選項,也可以針對不同的用戶端主機提供不同的開機選項。一般來說,可以在pxelinux.cfg目錄内建立一個名為default的檔案來提供預設選項。

如果沒有menu.c32或vesamenu.c32時,菜單會以純文字模式一行一行顯示。如果使用menu.c32或vesamenu.c32,就會有類似反白效果出現,此時可以使用上下鍵來選擇選項,而不需要看着螢幕去輸入數字鍵來選擇開機選項。經過測試,使用vesamenu.c32比menu.c32更加好看些。

這部分設定完畢後,就是核心相關的設定了。

1.7 從安裝鏡像擷取Linux核心檔案

要安裝Linux系統,必須提供核心檔案,這裡以64位版本的CentOS 6.6為例。

這裡計劃将核心相關檔案放在/tftpboot/centos6.6/目錄下。

既然要從安裝鏡像中擷取核心相關檔案,首先得要挂載鏡像。

mount /dev/cdrom /testmkdir /tftpboot/CentOS6.6

cp /test/isolinux/{vmlinuz,initrd.img} /tftpboot/CentOS6.6

cp /test/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

其實僅需要vmlinuz和initrd.img兩個檔案即可,不過這裡還将isolinux.cfg這個檔案拷貝出來了,這個檔案裡提供了開機選項,可以以它作為修改開機選項和菜單的模闆,這樣修改起來比較容易,也更便捷!

1.8 選項設定

修改開機配置檔案isolinux.cfg。由于拷貝它的時候重命名為default,是以修改default即可。修改的地方标紅色了。

vim /tftpboot/default

default vesamenu.c32#這是必須項,或者改為menu.c32

#prompt 1

timeout 10

display ./centos6.6/boot.msg

#這是為選項提供一些說明的檔案

menu background splash.jpg

menu title Welcome to CentOS 6.6!

menu color border 0 #ffffffff #00000000

menu color sel 7 #ffffffff #ff000000

menu color title 0 #ffffffff #00000000

menu color tabmsg 0 #ffffffff #00000000

menu color unsel 0 #ffffffff #00000000

menu color hotsel 0 #ff000000 #ffffffff

menu color hotkey 7 #ffffffff #ff000000

menu color scrollbar 0 #ffffffff #00000000

label linux

menu label ^Install your Linux

menu default #設定預設的光标停留在此label上

kernel ./centos6.6/vmlinuz

#設定核心檔案,注意相對路徑是從tftp的根路徑/tftpboot開始的

append initrd=./centos6.6/initrd.img quiet #設定init ramdom disk檔案,并設定啟動時文本方式啟動

label vesa

menu label Install system with ^basic video driver

kernel vmlinuz

append initrd=initrd.img xdriver=vesa nomodeset

label rescue

menu label ^Rescue installed system

kernel vmlinuz

append initrd=initrd.img rescue

label local

menu label Boot from ^local drive

localboot 0xffff

label memtest86

menu label ^Memory test

kernel memtest

append -

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

1.9 從網卡安裝系統——開機測試

設定Bios從網卡啟動。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6
centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6
centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6
centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

由于到這裡我還沒有提供Linux的安裝檔案,是以選擇URL從網際網路來擷取系統安裝。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

由于要從網際網路上擷取系統安裝檔案,是以需要設定IP等網絡參數,但要注意,這裡的網絡參數和前面設定的PXE網絡參數是無關的,這裡設定的IP僅是為了聯上網際網路。由于已經配置了DHCP,是以這裡選擇DHCP。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

設定一個擷取Linux系統的站點。上圖設定的是163的站點。

如果沒什麼問題,到這裡就開始進行安裝直到完成了。以下是進度圖檔。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

RHCE認證之無人值守安裝Linux系統(FTP+TFTP+DHCP+Kickstart+PXE) http://www.linuxidc.com/Linux/2013-10/91013.htm

1.10 通過http/ftp/nfs來提供系統安裝檔案

現在在本地伺服器上安裝http或ftp或nfs來作為系統檔案的來源。

首先挂載Linux的鏡像CD光牒(前文已經挂載過了),假設挂載到/mnt目錄上。

mount /dev/cdrom /mnt

注意,要提供的是鏡像中的所有檔案,而不是簡單的提供一個鏡像。是以将/mnt中的所有檔案複制出來,假設複制到目錄/install目錄下。

mkdir /install

cp -a /mnt/*/install

其實也可以不用複制出來的,隻需要将鏡像挂載到某個目錄下,隻要nfs/http/ftp能夠找到它就行了。

(1). 使用NFS提供安裝檔案

yum -y install rpcbind nfs-utils

啟動rpcbind和nfs。

service rpcbind start

service nfs start

然後導出/install目錄給需要安裝系統的用戶端,這裡導出給整個網段。

exportfs -o ro,async,no_root_squash 192.168.100.0/24:/install

showmount -e

Export list for node1.longshuai.com:

/install 192.168.0.0/24

(2). 使用http提供安裝檔案

安裝httpd。

yum -y install httpd

service httpd start

由于http的DocumentRoot "/var/www/html",是以系統的安裝檔案需要在此目錄下或其子目錄才能找到,假設在/var/www/html/centos6.6目錄下,隻需要簡單的将鏡像挂載到此目錄即可。

mkdir /var/www/html/centos6.6

mount /dev/cdrom /var/www/html/centos6.6

(3). 使用vsftpd來提供安裝檔案

yum -y install vsftpd

由于這裡僅用來提供下系統的安裝檔案,是以就沒必要對vsftpd多多配置了,使用它最簡單的匿名使用者模式即可,但是匿名使用者的根目錄為/var/ftp,是以要将鏡像挂載到此目錄或此目錄下的子目錄下,假設放在/var/ftp/centos6.6。

mkdir /var/ftp/centos6.6

mount /dev/cdrom /var/ftp/centos6.6

(4). 測試并填寫安裝檔案的路徑位址

到此,就可以啟動虛拟機來測試了。和前面的一樣,直到下面這裡。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

對于ftp和http,直接填寫即可。

ftp://192.168.100.100/centos6.6

http://192.168.100.100/centos6.6

對于NFS寫這樣的路徑,因為在上面NFS的設定上是導出了/install目錄,安裝檔案也是複制到此檔案中的。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

然後就會進入安裝畫面,但是這樣還是有些地方需要手動指定的。無法實作非互動時無人值守的方式安裝。

是以下文就介紹kickstart實作無人值守的方式。

1.11 kickstart+PXE無人值守大量部署Linux

所謂的無人值守,就是自動應答,當安裝過程中需要人機互動提供某些選項的答案時(如如何分區),自動應答檔案可以根據對應項自動提供答案。但是,無人值守并不完全是無人值守,在設定bios從網卡啟動是必須人為設定的,且安裝完系統後設定不從網卡啟動也是需要人為設定的。此處之外,其他的都可以無人值守。

要配置無人值守的系統安裝,需要提供安裝過程中需要的各種選擇,這些選擇在kickstart的配置檔案中,一般正常安裝完Linux系統在root使用者的家目錄下有一個anaconda-ks.cfg,該檔案的配置說明見

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6

不難發現,裝系統時很多選項在這裡面都記錄了。

那麼,要使用kickstart來批量部署作業系統,就需要提供該檔案。以下是我提供的配置檔案/install/ks.cfg(因為我是使用NFS作為檔案提供源的,是以我将其放在nfs的導出目錄中,讓用戶端能夠找到)。其中rootpw的加密密碼要使用grub-crypt生成。

vim /install/ks.cfg

install

text

nfs --server=192.168.100.100 --dir=/install

#url --url=http://192.168.100.100/centos6.6

bootloader --location=mbr --driveorder=sda --append="crashkernel=autoquiet"

lang en_US.UTF-8

keyboard us

network --onboot no --device eth0 --bootproto dhcp --noipv6

rootpw --iscrypted

$6$x4u9sIfSQsO7ddk5$/.0Xe6tFBY0uUmFFtyvAeY9YVPtcn8zl21fFNgmAoYtepQHRYDthQ4T1ZE12kDfAT6O3oXfRb7uv214t3Bb3K1

firewall --service=ssh

authconfig --enableshadow --passalgo=sha512

selinux --disabled

timezone Asia/Shanghai

reboot #安裝結束後重新開機

#make partitions

zerombr

clearpart --all --initlabel

part /boot --fstype=ext4 --asprimary --size=250

part / --fstype=ext4 --asprimary --grow --size=2000

part swap --fstype=swap --size=2000

%packages

@base

@core

@debugging

@development

@dial-up

@hardware-monitoring

@performance

@server-policy

@workstation-policy

sgpio

device-mapper-persistent-data

systemtap-client

%post #結束後做的事

cat >>etc/yum.repos.d/base.repo<

[base]

name=163repo

baseurl=http://mirrors.163.com/centos/6/os/x86_64/

gpgcheck=0

enable=1

eof

sed "s/ONBOOT.*$/ONBOOT=yes/" /etc/sysconfig/network-scripts/ifcfg-eth0 #設定網卡為啟動

sed "s/rhgb //" /boot/grub/grub.conf #設定啟動系統時不使用圖形進度條方式

sed "s/HOSTNAME=.*$/HOSTNAME=xuexi.longshuai.com/" /etc/sysconfig/network #設定主機名

%end

然後修改defalut檔案,讓用戶端能夠找到ks.cfg檔案。

vim /tftpboot/pxelinux.cfg/default

label linux

menu label ^Install your Linux

menu default

kernel ./centos6.6/vmlinuz

append initrd=./centos6.6/initrd.imgks=nfs:192.168.100.100:/install/ks.cfg quiet

如果要使用LVM的分區方式,參考如下:

part /boot --fstype ext4 --size=100

part swap --fstype=swap --size=2048

part pv26 --size=100 --grow

volgroup VG00 --pesize=32768 pv26

logvol / --fstype ext4 --name=LVroot --vgname=VG00 --size=29984

logvol /data --fstype ext4 --name=LVdata --vgname=VG00 --size=100 --grow

如果覺得使用樣本的方式手工寫配置檔案比較麻煩,也可以使用圖形化工具來制作ks.cfg檔案。在linux中用yum安裝system-config-kickstart就行了(圖形化依賴于x-window),選項也有些限制(比如分區不能使用lvm)。

然後找台機器從網卡啟動就進入安裝模式了。

因為在ks.cfg中設定了安裝完成後reboot,是以要手動去修改bios不要再從網卡啟動,否則重新開機後又再次從網卡啟動然後又去自動應答裝系統了。當然,可以将reboot換成shutdown或者poweroff,這樣裝完就隻是關機了,等開機前人為設定不從網卡啟動。

centos6 PXE自動安裝Linux,PXE+Kickstart無人值守安裝CentOS 6