自動化安裝系統
批量自動安裝軟體介紹
kickstart 是一種無人值守的安裝方式,工作原理是在安裝過程中記錄人工干預填寫的各種引數,並生成以個名為ks.cfg(自動應答檔案)的檔案,如果在自動安裝過程中出現要填寫引數的情況,安裝程式首先會去查詢ks.cfg檔案,如果找到合適引數,就採用,如果沒有找到,便會彈出對話方塊提示手動安裝, 所以,如果ks.cfg檔案涵蓋了安裝過程中所有需要填寫的引數,那麼安裝者完全可以只告訴安裝程式從何處下載,ks.cfg檔案。 cobbler 集中和簡化了通過網路安裝作業系統需要使用到的DHCP和TFTP和DNS服務的配置,cobbler不僅有一個命令列介面,還有web介面,大大降低了使用者的入門水平,是基於kickstart的二次開發
什麼是PXE?
PXE(preboot execute environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支援工作站通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統,在啟動過程中,終端要求伺服器分配IP地址, 再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟體包到本機記憶體中執行,由這個啟動軟體包完成終端(客戶端)基本軟體設定,從而引導預先安裝在伺服器中的終端作業系統。 PXE可以引導多種作業系統,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系統等。
通俗來講:PXE是預啟動環境,通過網路介面啟動計算機,不依賴本地儲存裝置,(如硬碟)或者本地已安裝的作業系統,為C/S工模式,PXE客戶端會呼叫網際協議-IP,使用者資料報協議-UDP,動態主機設定協議-DHCP,小型檔案傳輸協議-TFTP,
所以PXE是自動化安裝的前提!
PXE引導相關角色說明
PXE作用: 引導裝機
Kickstart作用: 將安裝系統的過程中通過ks.cfg檔案中的配置資訊,實現自動安裝配置達到無人值守自動安裝;
TFTP: 支援PXE 引導的網絡卡中從tftp伺服器端下載pxelinux.0檔案、vmlinuz、initrd.img等核心引導檔案;
DHCP: PXE引導過程中獲首先獲取IP地址,並提供pxelinux.0檔案位置;
HTTP: 用於下載ks.cfg以及系統映象檔案
PEX工作流程
1.PXE客戶端向DHCP伺服器傳送UDP廣播請求ip地址
2.DHCP服務端提供相應資訊。這個響應資訊包含客戶端分配的IP地址,pxelinux啟動程式(TFTP伺服器的)位置,以及配置檔案
3.PXE客戶端向TFTP伺服器請求下載啟動檔案。客戶端收到服務端的迴應後,會迴應一個幀,以請求傳送啟動所需要的檔案,這些啟動檔案包括:pxelinux.0 pxelinux.cfg/default vmlinuz initrd.img等檔案
4.TFTP響應並傳送檔案。當伺服器端收到客戶端的請求後,他們之間將有更多資訊在客戶端與服務端之間作應答,用以決定啟動引數,bttorom由tftp通訊協議從boot server下載啟動安裝程式所必須的檔案,default下載完成後,會根據該檔案中定義的引導順序,啟動安裝
5.PXE向http伺服器請求自動應答檔案。客戶端通過pxrlinux.cfg/default檔案成功的引導linux安裝核心後,安裝程式首先必須確定你通過什麼安裝介質來安裝系統,如果是網路安裝,則會在這個時候初始化網路,並定位安裝位置,接著會讀取default檔案中指定的自動應答檔案,ks,cfg所在位置,根據該檔案位置請求下載該檔案
6.客戶端安裝作業系統。將ks.cfg檔案下載回來後,通過該檔案找到os server並按照指定該我就按的配置請求下載安裝過程中需要的軟體包,os server和客戶端建立連線後將開始傳輸軟體包
服務配置
首先關閉防火牆和selinux,並重啟(針對kickstart服務端)
DHCP服務配置
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)通常被應用在大型的區域網絡環境中,主要作用是集中的管理、分配IP地址,使網路環境中的主機動態的獲得IP地址、閘道器地址、DNS伺服器地址等資訊,並能夠提升地址的使用率。
yum install -y dhcp
rpm -ql dhcp |grep "dhcpd.conf" #檢視配置檔案位置
subnet 172.16.221.0 netmask 255.255.255.0 {
range 172.16.221.100 172.16.221.200; # 可分配的起始IP-結束IP
option subnet-mask 255.255.255.0; # 設定netmask
default-lease-time 21600; # 設定預設的IP租用期限
max-lease-time 43200; # 設定最大的IP租用期限
next-server 172.16.221.128; # 告知客戶端TFTP伺服器的ip
filename "/pxelinux.0"; # 告知客戶端從TFTP根目錄下載pxelinux.0檔案
}
systemctl start dhcpd.service #啟動dhcp服務
netstat -tunlp|grep dhcp #檢視是否啟動成功
** 本來軟體裝完後都要加入開機自啟動,但這個Kickstart系統就不能開機自啟動,而且用完後服務都要關閉,防止未來重啟伺服器自動重灌系統了。**
TFTP服務配置
TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協議)是TCP/IP協議族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。埠號為69。
udp協議,埠號69
yum -y install tftp-server
vim /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 #由原來的yes改為no
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl start tftpd #啟動tftp服務
netstat -tunlp|grep 69 #檢視是否啟動成功
HTTP服務配置
可以用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。
yum -y install httpd
sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
systemctl start httpd
mkdir /var/www/html/CentOS-7
mount /dev/cdrom /var/www/html/CentOS-7/
HTTP服務配置
可以用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。
yum -y install httpd
sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
systemctl start httpd
mkdir /var/www/html/CentOS-7
[[email protected] ~]# mount /dev/cdrom /var/www/html/CentOS-7/ #只要把安裝光碟內容能通過web釋出即可
mount: block device /dev/sr0 is write-protected, mounting read-only
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.4G 16G 14% /
tmpfs 491M 16K 491M 1% /dev/shm
/dev/sda1 190M 36M 145M 20% /boot
/dev/sr0 3.7G 3.7G 0 100% /var/www/html/CentOS-7
# 不管怎麼弄,只要把安裝光碟內容能通過web釋出即可。因為是演示,如果複製映象就有點浪費時間。但生產環境就一定要複製了,光碟讀取速度有限。
瀏覽器訪問http://10.0.0.7/CentOS-6.7/
檢驗配置是否正確。
配置支援PXE啟動的程式
syslinux是一個功能強大的引導載入程式,而且相容各種介質。SYSLINUX是一個小型的Linux作業系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。如果沒有找到pxelinux.0這個檔案,可以安裝一下。因為系統最小化安裝是沒有pxelinux.0這個文 件的,所以要安裝一下
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ tftp根目錄
# 複製啟動選單程式檔案
cp -a /var/www/html/CentOS-7/isolinux/* /var/lib/tftpboot/
ls /var/lib/tftpboot/
boot.cat grub.conf isolinux.bin memtest splash.jpg vesamenu.c32
boot.msg initrd.img isolinux.cfg pxelinux.0 TRANS.TBL vmlinuz
# 新建一個pxelinux.cfg目錄,存放客戶端的配置檔案。
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/CentOS-7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
虛擬機器中手動安裝演示
配合虛擬機器演示講解default檔案。新建一個虛擬機器,注意centos7.3以上記憶體需要給2G。,並且配置檔案default裡面還要修改一下
[[email protected] ~]# vim /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 # 預設載入一個選單 #prompt 1 # 開啟會顯示命令列'boot: '提示符。prompt值為0時則不提示,將會直接啟動'default'引數中指定的內容。 timeout 600 # timeout時間是引導時等待使用者手動選擇的時間,設為1可直接引導,單位為1/10秒。 display boot.msg # 選單背景圖片、標題、顏色。 menu background splash.jpg menu title Welcome to CentOS 6.7! 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指定在boot:提示符下輸入的關鍵字,比如boot:linux[ENTER],這個會啟動label linux下標記的kernel和initrd.img檔案。 label linux # 一個標籤就是前面圖片的一行選項。 menu label ^Install or upgrade an existing system menu default kernel vmlinuz # 指定要啟動的核心。同樣要注意路徑,預設是/tftpboot目錄。 #append initrd=initrd.img # 指定追加給核心的引數,initrd.img是一個最小的linux系統 append initrd=initrd.img method=http://172.16.221.128/CentOS-7/ #上面的是預設的 label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img 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 -
注意:url方式,使用NFS的寫法nfs:10.0.0.1:/data/sys/kickstart/ks.cfg
虛擬機器中自動安裝演示
#編寫自己適合裝機的ks.cfg檔案
install url --url="http://172.16.221.128/CentOS-7/" text lang en_US.UTF-8 keyboard us zerombr bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 timezone --utc Asia/Shanghai authconfig --enableshadow --passalgo=sha512 rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/ clearpart --all --initlabel #part /boot --fstype=ext4 --asprimary --size=200 part swap --size=4096 part / --fstype=ext4 --grow --asprimary --size=200 firstboot --disable selinux --disabled firewall --disabled logging --level=info reboot %packages @base @compat-libraries @debugging @development tree nmap sysstat lrzsz dos2unix telnet
#可選,就是系統安裝完成之後的系統優化。在post裡面也可以執行命令,後面必須加end %post wget -O /tmp/optimization.sh http://172.16.221.128/ks-config/optimization.sh &>/dev/null /bin/sh /tmp/optimization.sh %end
關鍵字 含義 install 告知安裝程式,這是一次全新安裝,而不是升級upgrade。 url --url=" " 通過FTP或HTTP從遠端伺服器上的安裝樹中安裝。 url --url="http://10.0.0.7/CentOS-6.7/" url --url ftp://<username>:<password>@<server>/<dir> nfs 從指定的NFS伺服器安裝。 nfs --server=nfsserver.example.com --dir=/tmp/install-tree text 使用文字模式安裝。 lang 設定在安裝過程中使用的語言以及系統的預設語言。lang en_US.UTF-8 keyboard 設定系統鍵盤型別。keyboard us zerombr 清除mbr引導資訊。 bootloader 系統引導相關配置。 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location=,指定引導記錄被寫入的位置.有效的值如下:mbr(預設),partition(在包含核心的分割槽的第一個扇區安裝引導裝載程式)或none(不安裝引導裝載程式)。 --driveorder,指定在BIOS引導順序中居首的驅動器。 --append=,指定核心引數.要指定多個引數,使用空格分隔它們。 network 為通過網路的kickstart安裝以及所安裝的系統配置聯網資訊。 network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 --bootproto=[dhcp/bootp/static]中的一種,預設值是dhcp。bootp和dhcp被認為是相同的。 static方法要求在kickstart檔案裡輸入所有的網路資訊。 network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 請注意所有配置資訊都必須在一行上指定,不能使用反斜線來換行。 --ip=,要安裝的機器的IP地址. --gateway=,IP地址格式的預設閘道器. --netmask=,安裝的系統的子網掩碼. --hostname=,安裝的系統的主機名. --onboot=,是否在引導時啟用該裝置. --noipv6=,禁用此裝置的IPv6. --nameserver=,配置dns解析. timezone 設定系統時區。timezone --utc Asia/Shanghai authconfig 系統認證資訊。authconfig --enableshadow --passalgo=sha512 設定密碼加密方式為sha512 啟用shadow檔案。 rootpw root密碼 clearpart 清空分割槽。clearpart --all --initlabel --all 從系統中清除所有分割槽,--initlable 初始化磁碟標籤 part 磁碟分割槽。 part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 --fstype=,為分割槽設定檔案系統型別.有效的型別為ext2,ext3,swap和vfat。 --asprimary,強迫把分割槽分配為主分割槽,否則提示分割槽失敗。 --size=,以MB為單位的分割槽最小值.在此處指定一個整數值,如500.不要在數字後面加MB。 --grow,告訴分割槽使用所有可用空間(若有),或使用設定的最大值。 firstboot 負責協助配置redhat一些重要的資訊。 firstboot --disable selinux 關閉selinux。selinux --disabled firewall 關閉防火牆。firewall --disabled logging 設定日誌級別。logging --level=info reboot 設定安裝完成後重啟,此選項必須存在,不然kickstart顯示一條訊息,並等待使用者按任意鍵後才重新引導,也可以選擇halt關機。ks.cfg含義
通常,我們在安裝作業系統的過程中,需要大量的和伺服器互動操作,為了減少這個互動過程,kickstart就誕生了。使用這種kickstart,只需事先定義好一個Kickstart自動應答配置檔案ks.cfg(通常存放在安裝伺服器上),並讓安裝程式知道該配置檔案的位置,
在安裝過程中安裝程式就可以自己從該檔案中讀取安裝配置,這樣就避免了在安裝過程中多次的人機互動,從而實現無人值守的自動化安裝。
生成kickstart配置檔案的三種方法: 方法1、 每安裝好一臺Centos機器,Centos安裝程式都會建立一個kickstart配置檔案,記錄你的真實安裝配置。如果你希望實現和某系統類似的安裝,可以基於該系統的kickstart配置檔案來生成你自己的kickstart配置檔案。(生成的檔名字叫anaconda-ks.cfg位於/root/anaconda-ks.cfg) 方法2、Centos提供了一個圖形化的kickstart配置工具。在任何一個安裝好的Linux系統上執行該工具,就可以很容易地建立你自己的kickstart配置檔案。kickstart配置工具命令為redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).網上有很多用CentOS桌面版生成ks檔案的文章,如果有現成的系統就沒什麼可說。但沒有現成的,也沒有必要去用桌面版,命令列也很簡單。 方法3、閱讀kickstart配置檔案的手冊。用任何一個文字編輯器都可以建立你自己的kickstart配置檔案。
ks.cfg檔案組成大致分為3段 命令段 鍵盤型別,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷並提示使用者選擇此項的選項 軟體包段
%packages @groupname:指定安裝的包組 package_name:指定安裝的包 -package_name:指定不安裝的包
指令碼段(可選)
%pre:安裝系統前執行的命令或指令碼(由於只依賴於啟動映象,支援的命令很少) %post:安裝系統後執行的命令或指令碼(基本支援所有命令)
整合編輯default配置檔案
# 最精簡配置
[[email protected] ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel vmlinuz
#append initrd=initrd.img ks=http://10.0.0.7/ks_config/CentOS-6.7-ks.cfg # 告訴安裝程式ks.cfg檔案在哪裡
append initrd=initrd.img ks=http://172.16.221.128/ks-config/ks.cfg ksdevice=link #這樣虛擬機器會自動載入來電的網絡卡
# ksdevice=eth0代表當客戶端有多塊網絡卡的時候,要實現自動化需要設定從eth1安裝,不指定的話,安裝的時候系統會讓你選擇,那就不叫全自動化了。
kickstart真機如何安裝
1.DEll R730伺服器開機後,根據提示按F12,進行PXE啟動。物理伺服器有4個網絡卡,所以還會讓選擇從哪個網絡卡啟動。 ks.cfg
2.關於kickstart分割槽指定特定硬碟的兩篇文章 1 2
3.官方文件
4.參考文章1 參考文章二