kickstart實現批量安裝CentOS7.x系統

1.1 安裝系統的方法

單臺主機安裝系統方法:

        光盤:ISO文件,光盤的鏡像文件,還需要刻盤

  U盤:ISO鏡像上傳到U盤

批量安裝:

  並行安裝==網絡安裝

  自動化安裝

1.2 linux下批量安裝系統

kickstart是RedHat公司開源的軟件,所以對CentOS兼容性最好。

image.png

原理:

  我們將手動安裝的所有的詳細步驟記錄到一個文件中,然後kickstart通過讀取這個文件就可以實現自動         化安裝系統。

  kickstart是一個項目的名稱。沒有這個軟件。使用者水平是高中以上

  cobbler是對kickstart的所有組件的封裝。使用者水平是初中以上。本質上就是網頁版本的kickstart。

1.2.1 PXE說明

        image.png

  PXE,全名Pre-boot Execution Environment,預啓動執行環境;

  通過網絡接口啓動計算機,不依賴本地存儲設備(如硬盤)或本地已安裝的操作系統;

  由Intel和Systemsoft公司於1999年9月20日公佈的技術;

  客戶端/Server的工作模式;

  PXE客戶端會調用網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協議(DHCP)、小型文件傳輸協議(TFTP)等網絡協議;

  PXE客戶端(客戶端)這個術語是指機器在PXE啓動過程中的角色。一個PXE客戶端可以是一臺服務器、筆記本電腦或者其他裝有PXE啓動代碼的機器(我們電腦的網卡)

1.2.2 kickstart原理

 image.png

1.2.3 PXE請求順序說明

①  PXE 客戶端發送UDP廣播請求

  PXE 客戶端從自己的PXE網卡啓動,通過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP

②  DHCP服務器提供信息

  DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE 客戶端的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置

③  PXE客戶端請求下載啓動文件

  客戶端收到服務器的“迴應”後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

④  TETP服務器響應客戶端請求並傳送文件

  當服務器收到客戶端的請求後,他們之間之後將有更多的信息在客戶端與服務器之間作應答, 用以決定啓動參數。BootROM由TFTP通訊協議從tftp服務器下載啓動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核

⑤  請求下載自動應答文件

  客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。

⑥  客戶端安裝操作系統

  將ks.cfg文件下載回來後,通過該文件找到http鏡像,並按照該文件的配置請求下載安裝過程需要的軟件包。

  http鏡像和客戶端建立連接後,將開始傳輸軟件包,客戶端將開始安裝操作系統。

  安裝完成後,將提示重新引導計算機。


1.3 kickstart批量安裝系統實踐

  一般批量安裝操作系統最好一次安裝23臺機器最佳,主要因爲大部分交換機爲24口,安裝23臺服務器沒有太大的壓力

1.3.1 環境說明

防火牆與selinux必須關閉。

[root@kickstart ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@kickstart ~]# uname -r

3.10.0-693.el7.x86_64

[root@kickstart ~]# getenforce

Disabled

[root@kickstart ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

Active: inactive (dead)

Docs: man:firewalld(1)

[root@kickstart ~]# hostname -I

10.0.0.201 172.16.1.201

1.3.2 第一個里程碑:安裝dhcp服務

安裝

yum install dhcp -y

配置DHCP服務

cat >>/etc/dhcp/dhcpd.conf<<EOF

subnet 172.16.1.0 netmask 255.255.255.0 {

range 172.16.1.100 172.16.1.199;

option subnet-mask 255.255.255.0;

default-lease-time 21600;

max-lease-time 43200;

next-server 172.16.1.61;

filename "/pxelinux.0";

}

EOF

配置文件說明:

range 172.16.1.100 172.16.1.199; # 可分配的起始IP-結束IP

option subnet-mask 255.255.255.0; # 設定netmask

default-lease-time 21600; # 設置默認的IP租用期限

max-lease-time 43200; # 設置最大的IP租用期限

next-server 172.16.1.201; # 告知客戶端TFTP服務器的ip

filename "/pxelinux.0"; # 告知客戶端從TFTP根目錄下載pxelinux.0文件

啓動DHCP服務

[root@kickstart ~]# systemctl start dhcpd.service

[root@kickstart ~]# systemctl status dhcpd.service

● dhcpd.service - DHCPv4 Server Daemon

檢測端口信息

[root@kickstart ~]# netstat -lntup |grep dhcpd

udp 0 0 0.0.0.0:43679 0.0.0.0:* 2090/dhcpd

udp 0 0 0.0.0.0:67 0.0.0.0:* 2090/dhcpd

udp6 0 0 :::58101 :::* 2090/dhcpd

查看其日誌信息: (日誌位置爲/var/log/messages)

[root@kickstart ~]# tailf /var/log/messages

Nov 13 19:01:40 clsn dhcpd: Listening on PF/eth1/00:0c:29:a8:59:b2/172.16.1.0/24

Nov 13 19:01:40 clsn dhcpd: Sending on LPF/eth1/00:0c:29:a8:59:b2/172.16.1.0/24

Nov 13 19:01:40 clsn dhcpd:

Nov 13 19:01:40 clsn dhcpd: No subnet declaration for eth0 (10.0.0.201).

Nov 13 19:01:40 clsn dhcpd: ** Ignoring requests on eth0. If this is not what

Nov 13 19:01:40 clsn dhcpd: you want, please write a subnet declaration

Nov 13 19:01:40 clsn dhcpd: in your dhcpd.conf file for the network segment

Nov 13 19:01:40 clsn dhcpd: to which interface eth0 is attached. **

注:配置dhcp的時候是可以配置監聽的網卡,指定監聽網卡

DHCPDARGS=eth1  # 指定監聽網卡

1.3.3 創建一個新的空白虛擬機

說明:Centos7.3之後安裝系統至少需要2G內存,低於2G將無法安裝,硬盤100G

 

   開啓虛擬機

 

日誌輸出

Nov 13 19:01:40 clsn dhcpd: Sending on Socket/fallback/fallback-net

Nov 13 19:01:40 clsn systemd: Started DHCPv4 Server Daemon.

Nov 13 19:12:16 clsn dhcpd: DHCPDISCOVER from 00:0c:29:64:7b:09 via eth1

Nov 13 19:12:17 clsn dhcpd: DHCPOFFER on 172.16.1.120 to 00:0c:29:64:7b:09 via eth1

Nov 13 19:12:18 clsn dhcpd: DHCPREQUEST for 172.16.1.120 (172.16.1.201) from 00:0c:29:64:7b:09 via eth1

Nov 13 19:12:18 clsn dhcpd: DHCPACK on 172.16.1.120 to 00:0c:29:64:7b:09 via eth1

Nov 13 19:12:54 clsn kernel: perf: interrupt took too long (6342 > 6262), lowering kernel.perf_event_max_sample_rate to 31000

1.3.4 安裝tftp服務

安裝tftp軟件

[root@kickstart ~]# yum install tftp-server -y

啓動服務

[root@kickstart ~]# systemctl start tftp.socket

[root@kickstart ~]# systemctl status tftp.socket

tftp根目錄

[root@kickstart ~]# cd /var/lib/tftpboot/

   再次啓動虛擬機

 

啓動發現又tftp但是沒找到要加載的系統。上面報錯是在TFTP服務的根目錄找不到啓動文件pxelinux.0

1.3.5 獲取pxelinux.0系統

通過安裝軟件獲得

[root@kickstart tftpboot]# yum install -y syslinux

複製pxelinux.0文件到tftp根目錄

[root@kickstart tftpboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@kickstart tftpboot]# ls

pxelinux.0


 image.png

    首先排除最簡單故障原因:selinux是否關閉,防火牆是否關閉

    上面的錯誤是因爲pxelinux.0這個小系統的配置文件(default不存在,或者文件名不對

1.3.6 添加pxelinux.0配置文件

1)給虛擬機添加上centos7的鏡像,注意實在kickstart服務端添加

 

2)將鏡像掛載上

特別說明:由於這是測試環境可以使用掛載,在生產環境中必須把鏡像中的文件複製到硬盤上,光驅速度太慢。

mkdir -p /var/www/html/CentOS7

mount /dev/cdrom /var/www/html/CentOS7

3)將鏡像中的相關文件複製到tftp根目錄

cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/

mkdir -p /var/lib/tftpboot/pxelinux.cfg

cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

4)修改default配置文件實現通過網絡安裝操作系統

CentOS7.X 網絡安裝的關鍵點,修改default文件

 

修改完成後,重啓pxe客戶端,就會有安裝界面,與使用光盤安裝一致,這裏就不是做詳細的記錄了。注意實現網路安裝需要將下一步完成(配置http服務)。

 

5)CentOS7實現自動化安裝的default文件

[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default

default ks

prompt 0

label ks

kernel vmlinuz

append initrd=initrd.img ks=http://172.16.1.201/ks_config/CentOS7-ks.cfg net.ifnames=0 biosdevname=0 ksdevice=eth1

1.3.7 配置httpd服務

安裝apache服務

[root@kickstart tftpboot]# yum install httpd -y

啓動apache服務

[root@kickstart tftpboot]# systemctl start httpd.service

[root@kickstart tftpboot]# systemctl status httpd.service

● httpd.service - The Apache HTTP Server

通過瀏覽器訪問,使用curl命令鏡像訪問。

http://10.0.0.201/CentOS7/

curl http://172.16.1.201/CentOS7/

 

1.4 ks文件說明

1.4.1 ks文件的作用

   通常,我們在安裝操作系統的過程中,需要大量的和服務器交互操作,爲了減少這個交互過程,kickstart就誕生了。使用這種kickstart,只需事先定義好一個Kickstart自動應答配置文件ks.cfg(通常存放在安裝服務器上),並讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了在安裝過程中多次的人機交互,從而實現無人值守的自動化安裝。

1.4.2 ks文件生成的三種方式

 這裏我採用第三種方式,自己編寫ks文件,第一種方法的文件僅供參考

方法1

  每安裝好一臺Centos機器,Centos安裝程序都會在root家目錄下創建一個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配置文件。

1.4.2 ks文件組成


1.4.3 centos7.4自動應答文件(ks)

# Kickstart Configurator for CentOS 7 by yao zhang #命令段

install #告知安裝程序,這是一次全新安裝,而不是升級

url --url="http://172.16.1.201/CentOS7/" #通過http下載安裝鏡像

text #以文本格式安裝

lang en_US.UTF-8 #設置字符集格式

keyboard us #設置鍵盤類型

zerombr #清除mbr引導(清空引導扇區)

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #指定引導記錄被寫入的位置

network --bootproto=static --device=eth0 --gateway=10.0.0.254 --ip=10.0.0.63 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate #配置eth0網卡(--activate開機自啓)

network --bootproto=static --device=eth1 --ip=172.16.1.63 --netmask=255.255.255.0 --activate #配置eth1網卡

network --hostname=Cobbler #設置主機名

#network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7            #可以使用dhcp方式設置網絡

timezone --utc Asia/Shanghai #設置時區

authconfig --enableshadow --passalgo=sha512 #設置密碼格式

rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/ #密文密碼

clearpart --all --initlabel      #清空分區

part /boot --fstype xfs --size 1024 #/boot分區

part swap --size 1024 #swap分區

part / --fstype xfs --size 1 --grow #根分區

firstboot --disable #負責協助配置redhat一些重要的信息

selinux --disabled #關閉selinux

firewall --disabled #關閉防火牆

logging --level=info #設置日誌級別

reboot #安裝完成重啓


%packages             #包組段表示方法:@表示包組

@^minimal

@compat-libraries

@debugging

@development

tree #軟件包

nmap

sysstat

lrzsz

dos2unix

telnet

wget

vim

bash-completion

%end

%post   #腳本段,可以放腳本或命令

systemctl disable postfix.service #關閉郵件服務開機自啓動

%end

方法一:如果有ks文件包,下載ks文件包後需要更改ks包每個文件中的ip

直接解壓就可以了,會默認創建目錄並覆蓋

tar xfP ks_config_for_CentOS7.tar.gz

vim /var/www/html/ks_config/CentOS7-ks.cfg

vim /var/lib/tftpboot/pxelinux.cfg/default

方法二:根據ks文件包內容修改

ks文件包內容:

vim /var/lib/tftpboot/pxelinux.cfg/default

default ks

prompt 0

label ks

  kernel vmlinuz

  append initrd=initrd.img ks=http://172.16.1.63/ks_config/CentOS7-ks.cfg net.ifnames=0 biosdevname=0 ksdevice=eth1

vim /var/www/html/ks_config/CentOS7-ks.cfg

# Kickstart Configurator for CentOS 7 by yao zhang

install

url --url="http://172.16.1.63/CentOS7/"

text

lang en_US.UTF-8

keyboard us

zerombr

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

network  --bootproto=static --device=eth0 --gateway=10.0.0.254 --ip=10.0.0.6 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate

network  --bootproto=static --device=eth1 --ip=172.16.1.202 --netmask=255.255.255.0 --activate

network  --hostname=Cobbler

#network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7

timezone --utc Asia/Shanghai

authconfig --enableshadow --passalgo=sha512

rootpw  --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/

clearpart --all --initlabel

part /boot --fstype xfs --size 1024

part swap --size 1024

part / --fstype xfs --size 1 --grow

firstboot --disable

selinux --disabled

firewall --disabled

logging --level=info

reboot

%packages

@^minimal

@compat-libraries

@debugging

@development

tree

nmap

sysstat

lrzsz

dos2unix

telnet

wget

vim

bash-completion

%end

%post

systemctl disable postfix.service

%end

補充:

rootpw:使用加密的密碼

生成隨機加密數字的3個方法:

python -c 'import crypt; print(crypt.crypt("123456"))'    #python的方法

openssh password -1 'george' '123456'

grub-crypt

%pre:安裝系統之前執行的命令或腳本(一般不使用)

%post:安裝完系統後執行的命令或腳本

1.4.4 PXE配置文件default

由於多個客戶端可以從一個PXE服務器引導,PXE引導映像使用了一個複雜的配置文件搜索方式來查找針對客戶機的配置文件。如果客戶機的網卡的MAC地址爲8F:3H:AA:6B:CC:5D,對應的IP地址爲10.0.0.195,那麼客戶機首先嚐試以MAC地址爲文件名匹配的配置文件,如果不存在就以IP地址來查找。根據上述環境針對這臺主機要查找的第一個配置文件就是 /tftpboot/pxelinux.cfg/01-8F:3H:AA:6B:CC:5D。如果該文件不存在,就會根據IP地址來查找配置文件了,這個算法更復雜些,PXE映像查找會根據IP地址16進制命名的客戶機配置文件。例如:10.0.0.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


說明:如同時安裝多個系統,在pxelinux.cfg目錄下,以每個客戶機的MAC地址爲文件名創建引導文件(默認爲default),並單獨對應一個ks文件

1.4.5 上面的事情做完以後就可以批量安裝系統了

[root@Cobbler ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 98G 1.5G 97G 2% /

devtmpfs 227M 0 227M 0% /dev

tmpfs 237M 0 237M 0% /dev/shm

tmpfs 237M 4.6M 232M 2% /run

tmpfs 237M 0 237M 0% /sys/fs/cgroup

/dev/sda1 1014M 135M 880M 14% /boot

tmpfs 48M 0 48M 0% /run/user/0

[root@Cobbler ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

Active: inactive (dead)

Docs: man:firewalld(1)

[root@Cobbler ~]# getenforce

Disabled

[root@Cobbler ~]# hostname -I

10.0.0.202 172.16.1.202

1.5 常見錯誤

1.5.1 網卡無法啓動解決

解決辦法:

   將NetworkManager服務停止,再重新啓動network服務

[root@CentOS7 ~]# systemctl disable NetworkManager

Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.

Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.

Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.

[root@CentOS7 ~]# systemctl stop NetworkManager

1.5.2 Could not find kernel image

image.png

報錯原因:selinux沒關


可參考:http://blog.oldboyedu.com/autoinstall-kickstart/


小夥伴們可以關注我的微信公衆號:linux運維菜鳥之旅

qrcode_for_gh_5ecc48d3d14a_258.jpg

關注“中國電信天津網廳”公衆號,首次綁定可免費領2G流量,爲你的學習提供流量! 

qrcode_for_gh_d20dccd1c74b_258.jpg

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