系统自动化安装kickstart
自動化安裝的方法:
Kickstart
Cobbler
1.簡介
1.1 什么是PXE
PXE,全名Pre-boot Execution Environment,預啟動執行環境;
通過網絡接口啟動計算機,不依賴本地存儲設備(如硬盤)或本地已安裝的操作系統;
由Inter和Systemsoft公司于1999年9月20日公布的技術;
Client/Server的工作模式;
PXE客戶端會調用網絡協議(IP)、用戶數據協議(UDP)、動態主機設定協議(DHCP)、小型文件傳輸協議(TFTP)等網絡協議;
PXE客戶端(Client)這個術語是指機器在PXE啟動過程中的角色,一個PXE客戶端可以是一臺服務器,筆記本電腦或其他裝有PXE啟動代碼的機器我們電腦的網卡)。
1.2PXE的工作過程
PXE+Kickstart無人值守安裝操作系統完成過程
PXE工作示意圖
PXE Client向DHCP發送請求
PXE Client從指甲的PXE網卡啟動,通過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下周啟動安裝程序所需的文件(pxelinux0、pxelinux.conf/default)。default文件下載完成后,會根據該文件中定義的引導順序,啟動linux安裝程序引導內核
請求下載自動應答文件
客戶端通過(pxelinux.cfg/default)文件成功的引導Linux安裝內核后,安裝程序首先必須確定你通過什么安裝介質來安裝linux,如果是通過網絡安裝(NFS,FTP,HTTP),則會在這個時候初始化網絡,并定位安裝源位置,接著會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
這里有個問題,在第2部和第5部初始化2次網絡了,這是由于PXE獲取的是安裝用的內核以及安裝程序等,而安裝程序要獲取的是安 裝系統所需的二進制包
以及配置文件,因此PXE模塊和安裝程序時相對獨立的,PXE的網絡配置并不能傳遞給安裝程序,從而進行兩次 獲取IP地址過程,但IP地址在DHCP租期是
一樣的。
將ks.cfg文件下載回來后,通過該文件找到OS Server,并按照該文件的配置請求下載安裝過程需要的軟件包,OS Server和安裝端建立連接后,將開始傳輸軟件包,客戶端將開始安裝操作系統,安裝完成后,將提示重新引導計算機。
1.3 批量裝機軟件介紹
Redhat系統主要由兩種Kickstart和Cobbler。
Kickstart是一種無人值守的安裝方式,它的工作原理是在安裝過程中記錄人工干預填寫的各種參數,并生成一個名叫ks.cfg的文件。如果在自動安裝過程中出現要填寫的情況,安裝程序首先會去查找ks.cfg文件,如果找到合適的參數,就采用所找到的參數;如果沒有找到合適的參數,便會彈出對話框讓安裝者手工填寫,所以,如果ks.cfg文件涵蓋了安裝過程中所有需要填寫的參數,那么安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件,然后就去忙自己的事情,等安裝完畢,安裝程序會根據ks.cfg中的設置重啟/關閉系統,并結束安裝。
Cobbler幾種和簡化了通過網絡安裝操作系統所需要使用到的DHCP、TFTP和DNS服務的配置。Cobbler不僅有一個命令行界面,還提供了一個Web界面,大大降低了使用者的入門水平,Cobbler內置了一個輕量級配置管理系統,但它也支持和其它配置管理系統集成,如Puppet,暫時不支持SaltStack。
簡單的說,Cobbler是對kickstart的封裝,簡化安裝步驟,使用流程,降低使用者的門檻。
1.4 系統環境準備
[root@linux-node1 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@linux-node1 ~]# uname -r 2.6.32-504.el6.x86_64 [root@linux-node1 ~]# getenforce Disabled [root@linux-node1 ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@linux-node1 ~]# hostname linux-node1.example.com [root@linux-node1 ~]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=linux-node1.example.com [root@linux-node1 ~]# hostname -I 172.16.100.10 192.168.190.1282.1 DHCP簡介
DHCP(Dynamic Host Configuration Protocol,動態主機配置協議) 通常被應用在大型的局域網絡環境中,主要作用是集中的管理、分配IP地址,使網絡環境中的主機動態的獲取IP地址、網關地址、DNS服務器地址等信息,并能夠提升地址的使用率。
DHCP工作過程的六個主要步驟
2.2 DHCP服務安裝配置
[root@linux-node1 ~]# yum -y install dhcp [root@linux-node1 ~]# rpm -ql dhcp /etc/dhcp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd6.conf [root@linux-node1 ~]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # see 'man 5 dhcpd.conf' # [root@linux-node1 ~]# vim /etc/dhcp/dhcpd.conf subnet 172.16.100.0 netmask 255.255.255.0 {range 172.16.100.30 172.16.100.80;option subnet-mask 255.255.255.0;default-lease-time 21600;max-lease-time 43200;next-server 172.16.100.10;filename "/pxelinux.0"; } # 注釋 range 172.16.100.30 172.16.100.80; # 可分配的起始IP-結束IP option subnet-mask 255.255.255.0; # 設定netmask default-lease-time 21600; # 設置默認的IP租用期限 max-lease-time 43200; # 設置最大的IP租用期限 next-server 172.16.0.10; # 告知客戶端TFTP服務器的ip filename "/pxelinux.0"; # 告知客戶端從TFTP根目錄下載pxelinux.0文件 [root@linux-node1 ~]# /etc/init.d/dhcpd start Starting dhcpd: [ OK ] [root@linux-node1 ~]# netstat -tunlp | grep dhcp udp 0 0 0.0.0.0:67 0.0.0.0:* 3730/dhcpd本來軟件裝完后都要加入開機自啟動,但這個Kickstart系統就不能開機自啟動,而且用完后服務都要關閉,防止未來重啟服務器自動重裝系統了。
如果機器數量過多的話,主要dhcp服務器的地址池,不要因為耗盡IP而導致dhcpd服務器沒有IP地址release的情況。
3.1 TFTP簡介
TFTP(Trivial File Transfer Protocl,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。
3.2 TFTP安裝配置
[root@linux-node1 ~]# yum -y install tftp-server [root@linux-node1 ~]# vim /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 = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /var/lib/tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4 } [root@linux-node1 ~]# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@linux-node1 ~]# netstat -tunlp | grep 69 udp 0 0 0.0.0.0:69 0.0.0.0:* 3817/xinetd可以用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。 [root@linux-node1 ~]# yum -y install httpd [root@linux-node1 ~]# sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf [root@linux-node1 ~]# /etc/init.d/httpd start Starting httpd: [ OK ] [root@linux-node1 ~]# mkdir /var/www/html/CentOS-6.6 [root@linux-node1 ~]# mount /dev/cdrom /var/www/html/CentOS-6.6/ [root@linux-node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 1.1G 18G 6% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 93M 26M 63M 29% /boot /dev/sr0 4.4G 4.4G 0 100% /var/www/html/CentOS-6.6 # 不管怎么弄,只要把光盤內容通過web發布即可。因為是演示,如果復制鏡像有點浪費時間。但生產環境就一定要復制了,光盤讀取速度有限。
瀏覽器訪問http://172.16.100.10/CentOS-6.6/ 檢驗配置是否正確。
5.1 PXE引導配置(bootstrap)
syslinux是一個功能強大的引導加載程序,而且兼容各種介質。SYSLINUX是一個小型Linux操作系統,它的目的是簡化首次安裝Linux的時間,并建立維護或其它特殊用途的啟動盤。如果沒有找到pxelinux.0這個文件,可以安裝一下。 [root@linux-node1 ~]# yum -y install syslinux [root@linux-node1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # 復制啟動菜單程序文件 [root@linux-node1 ~]# cp -a /var/www/html/CentOS-6.6/isolinux/* /var/lib/tftpboot/ # 新疆一個pxelinux.cfg目錄,存放客戶端的配置文件。 [root@linux-node1 ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg [root@linux-node1 ~]# cp /var/www/html/CentOS-6.6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
5.2 PXE配置文件default解析
配置虛擬機演示講解default文件,新建一個虛擬機,注意內存需要給1G。
打開電源后,顯示如下
接下來的畫面就是我們熟悉的界面,輸入ESC可以進入命令行界面。
1、新建一臺空白虛擬機,也不要掛載ISO鏡像,打開電源。
擴展:DELL R710服務器開機后,根據提示按F12,進行PXE啟動,物理服務器有4個網卡,所以還會讓選擇從哪個網卡啟動。
2、選擇第一個選項
3、選擇英語
4、選擇美式鍵盤
5、選擇URL方式安裝
注:使用NFS的寫法nfs:172.16.100.10:/data/sys/kickstart/ks.cfg
6、應用IPv6
7、輸入http的地址
8、接下來和光盤安裝一樣
通常,我們在安裝操作系統的過程中,需要大量的和服務器交互操作,為了減少這個交互過程,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配置文件。
7.1 查看anaconda-ks.cfg
[root@linux-node1 ~]# cat anaconda-ks.cfg # Kickstart file automatically generated by anaconda.#version=DEVEL install cdrom lang zh_CN.UTF-8 keyboard us network --onboot no --device eth0 --bootproto dhcp --noipv6 network --onboot no --device eth1 --bootproto dhcp --noipv6 rootpw --iscrypted $6$mAHRjL5hBQzn2KFf$YNGDhgtcVl6PNmZBWAeSek.z70mycWEfDxzQPJ.F5A3Bqc.mRm8r0ddMDIgcDiYgo5kZglJPjvhqyBN9ahKJ5. firewall --service=ssh authconfig --enableshadow --passalgo=sha512 selinux --enforcing timezone --utc Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart --none#part /boot --fstype=ext4 --asprimary --size=100 #part / --fstype=ext4 --size=20480 #part swap --size=1024repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100%packages @chinese-support @core @server-policy @workstation-policy %end7.2 ks.cfg詳解
官網文檔
CentOS5:http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-options.html
CentOS6:https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installaction_Guide/s1-kickstart2-options.html
官網自帶中文版,選一下語言即可
ks.cfg文件組成大致分為3段
命令段
鍵盤類型,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷并提示用戶選擇此項的選項。
軟件包段br/>%packages
@groupname:指定安裝的包租
package_name:指定安裝的包
-package_name:指定不安裝的包
在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關系。
腳本段(可選)
關鍵字 含義
install 告知安裝程序,這是一次全新安裝,而不是升級upgrade。通過FTP或HTTP從遠程服務器上的安裝樹中安裝。
url url --url="http://172.16.100.10/CentOS-6.6/"
url=" " 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=172.16.100.100 --netmask=255.255.255.0 --gateway=172.16.100.254 --nameserver=172.16.100.254請注意所有配置信息都必須在一行上指定,不能使用反斜線來換行。
??--ip=,要安裝的機器的IP地址。
??--gateway=,IP地址格式的默認網關。
??--netmask=,安裝的系統的子網掩碼。
??--hostname=,安裝的系統的主機名。
??--onboot=,是否在引導時啟用該設備。
??--noipv6=,禁用此設備的IPv6。
??--nameserver=,配置dns解析。
timezone 設置系統時區。timezone --utc Asia/Shanghai,系統認證信息。authconfig --enableshadow --authconfigpassalgo=sha512設置加密方式為sha512 ??啟用shadow文件。
rootpw root密碼
clearpart 清空分區。clearpart --all --initlabel
??--all從系統中清楚所有分區,
??--initlable初始化磁盤標簽磁盤分區。
part part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 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關機。
7.3 編寫ks文件
先生存一個密碼備用
[root@linux-node1 ~]# grub-crypt Password:smoke520 Retype password:smoke520 $6$pw0xCNxgak/9Phl4$Hj85dqWQ5V6wg5AlPmilTKbJK.DhnDKMvtwG5aA.0fs8uIWjpuLHe3jhf6EvTAVWyrZhddfR3tRFthZe6eE0Q/ [root@linux-node1 ~]# mkdir /var/www/html/ks_config [root@linux-node1 ~]# vim /var/www/html/ks_config/CentOS-6.6-ks.cfg # Kickstart Configurator for CentOS 6.6 by hao jiang install url --url="http://172.16.100.10/CentOS-6.6/" 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$pw0xCNxgak/9Phl4$Hj85dqWQ5V6wg5AlPmilTKbJK.DhnDKMvtwG5aA.0fs8uIWjpuLHe3jhf6EvTAVWyrZhddfR3tRFthZe6eE0Q/ clearpart --all --initlabel part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 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 wget -O /tmp/optimization.sh http://172.16.100.100/ks_config/optimization.sh &> /dev/null /bin/sh /tmp/optimization.sh %end7.4 開機優化腳本
[root@linux-node1 ~]# vim /var/www/html/ks_config/optimization.sh#!/bin/bash ############################################################ # File Name: /var/www/html/ks_config/optimization.sh # Version: V1.0 # Author: hao jiang # Organization: www.smoke.com # Create Time: 2018-12-06 22:15:00 # Description: Linux system initialization ############################################################. /etc/init.d/funcationsIp=172.16.100.10 Port=80 ConfigDir=ks_config# Judge Http server is ok? PortNum=`nmap $Ip -p $Port 2> /dev/null | grep open | wc -l` [ $PortNum -lt 1 ] && {echo "Http server is bad!"exit 1 }# Defined result function function Msg(){if [ $? -eq 0 ];thenaction "$1" /bin/trueelseaction "$1" /bin/falsefi }# Defined IP function function ConfigIP(){Suffix=`ifconfig eth0|awk -F "[ .]+" 'NR==2 {print $6}'`cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<-ENDDEVICE=eth0TYPE=EthernetONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=noneIPADDR=172.16.100.$SuffixPREFIX=24GATEWAY=172.16.100.254DNS1=172.16.100.254DEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"ENDMsg "config eth0" }# Defined Yum source Functions function yum(){yumDir=/etc/yum.repos.d[ -f "$YumDir/CentOS-Base.repo" ] && cp $YumDir/CentOS-Base.repo{,.ori}wget -O $YumDir/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/CentOS-Base.repo &> /dev/null && \wget -O $YumDir/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/epel.repo &> /dev/null && \Msg "YUM source" }# Defined Hide the system version number Functions function HideVersion(){[ -f "/etc/issue" ] && > /etc/issueMsg "Hide issue"[ -f "/etc/issue.net" ] && > /etc/issue.netMsg "Hide issue.net" }# Defined OPEN FILED Functions function openfiles(){[ -f "/etc/security/limits.conf" ] && {echo '* - nofile 65535' >> /etc/security/limits.confMsg "open files"} }# Defined Kernel parameters Functions function kernel(){KernelDir=/etc[ -f "$KernelDir/sysctl.conf" ] && /bin/mv $KernelDir/sysctl.conf{,ori}wget -O $KernelDir/sysctl.conf http://$IP:$Port/$ConfigDir/sysctl.conf &> /dev/nullMsg "Kernel config" }# Defined System Startup Services Functions function boot(){for oldboy in `chkconfig --list | grep "3:on" | awk '{print $1}' | grep -vE "crond|network|rsyslog|sshd|sysstat"`dochkconfig $oldboy offdoneMsg "BOOT config" }# Defined Time Synchronization Functions function Time(){echo "#time sync by haojiang at $(date +%F)" >> /var/spool/cron/rootecho '*/5 * * * * /usr/sbin/ntpdate time.nist.gov &> /dev/null' >> /var/spool/cron/rootMsg "Time Synchronization" }# Defined main Functions function main(){ConfigIPyumHideVersionopenfileskernelbootTime }main # rz上傳CentOS-Base.repo、epel.repo、sysctl.conf7.5 整合編輯default配置文件
#最精簡配置
打開系統電源,過會系統就自動安裝好了;
轉載于:https://blog.51cto.com/smoke520/2325660
總結
以上是生活随笔為你收集整理的系统自动化安装kickstart的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HanLP二元核心词典详细解析
- 下一篇: 星云精准测试之用例魔方