kickstart模式實現批量安裝centos7.x系統

来源:http://www.cnblogs.com/clsn/archive/2017/11/14/7833333.html
-Advertisement-
Play Games

1.1 安裝系統的方法 l 光碟(ISO文件,光碟的鏡像文件) >>每一臺物理機都得給一個光碟機,如果用外置光碟機的話,是不是每台機器都需要插一下 l U盤:ISO鏡像刻錄到U盤==>>需要每台機器都需要插一下 l 並行安裝==>>網路安裝 l 自動化安裝 1.2 linux下批量安裝系統 kickst ...


1.1 安裝系統的方法

  l  光碟(ISO文件,光碟的鏡像文件)===>>每一臺物理機都得給一個光碟機,如果用外置光碟機的話,是不是每台機器都需要插一下

  l  U盤:ISO鏡像刻錄到U盤==>>需要每台機器都需要插一下

  l  並行安裝==>>網路安裝

  l  自動化安裝

1.2 linux下批量安裝系統

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

原理:

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

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

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

1.2.1 PXE說明

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

  通過網路介面啟動電腦,不依賴本地存儲設備(如硬碟)或本地已安裝的操作系統;

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

  客戶端/Server的工作模式;

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

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

1.2.2 kickstart原理

 

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.4.1708 (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.201;
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將無法安裝

 

   開啟虛擬機

 

日誌輸出

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 

 

 

    首先排除最簡單故障原因: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文件生成的三種方式

方法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配置文件。

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.202 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate  #配置eth0網卡
network  --bootproto=static --device=eth1 --ip=172.16.1.202 --netmask=255.255.255.0 --activate   #配置eth1網卡
network  --hostname=Cobbler  #設置主機名
#network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7
timezone --utc Asia/Shanghai  可以使用dhcp方式設置網路
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

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

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

 

報錯原因:selinux沒關

1.5.3 查考文檔

http://blog.oldboyedu.com/autoinstall-kickstart/

http://www.zyops.com/autoinstall-kickstart

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL-5.6.xx-winx64 免安裝版配置方法 1. 到Mysql官網下載mysql- 5.6.xx-winx64 2. 解壓MySQL壓縮包 將以下載的MySQL壓縮包解壓到自定義目錄下,如: D:\Program Files (x86)\MySQL\mysql-5.6.xx-winx6 ...
  • Apache Kafka是一個高度可擴展的消息傳遞系統,作為LinkedIn的中央數據管道起著至關重要的作用。 Kafka 是在2010年在LinkedIn開發的,它目前在1400多家經紀商處理超過1.4萬億條消息。Kafka 強大的耐用性和低延遲使我們能夠使用Kafka為LinkedIn提供一... ...
  • #!/bin/bash #作者:fafu_li #時間:2015.08.10 #mysql資料庫改名,官方沒有直接修改資料庫名稱的命令 #只有通過修改表名方式實現 source /etc/profile #載入系統環境變數 source ~/.bash_profile #載入用戶環境變數 set -... ...
  • 註:本人學的是Oracle,用mysql連接資料庫是一次嘗試。 一、下載JDBC mysql驅動,導入jar包 我自己下載的是connector-java-6.0.6.jar,如下圖所示,JDBC mysql驅動連接地址http://mvnrepository.com/artifact/mysql/ ...
  • Sysbench 基準壓測 my.cnf ============================================ [TOC] line: V1.1 mail: [email protected] date: 2017 11 10 一、Sysench測試前準備 1.1、壓測環境 配置 | ...
  • [20171113]修改表結構刪除列相關問題4.txt--//連續寫了3篇修改表結構刪除列的相關問題,鏈接如下:http://blog.itpub.net/267265/viewspace-2147158/http://blog.itpub.net/267265/viewspace-2147163/ ...
  • VMware14版本安裝Ubuntu16.04 LTS的詳細安裝過程 ...
  • postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟體。postfix是Wietse Venema想要為使用最廣泛的sendmail提供替代品的一個嘗試。在Internet世界中,大部分的電子郵件都是通過sendmail來投遞的,大約有100萬用戶使用se ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...