1. 程式人生 > >kickstart無人值守安裝之實踐篇

kickstart無人值守安裝之實踐篇

sta per 虛擬機網卡 希望 x86_64 -m protected sock 標簽

1、系統環境準備

涉及的服務有:

  1. DHCP服務
  2. TFTP服務
  3. PXE客戶端
  4. HTTP服務
[root@ks ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@ks ~]# uname -r
2.6.32-696.el6.x86_64
[root@ks ~]# getenforce 
Disabled
[root@ks ~]# /etc/init.d/iptables status
iptables:未運行防火墻。
[root@ks ~]# ifconfig eth0|awk -F "[ :]+" NR==2 {print $4}
10.0.0.230 [root@ks ~]# hostname ks

註:
使用阿裏雲的鏡像源:
Base源:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

註 :使用虛擬機做實驗

  • 虛擬機網卡采用NAT模式,不要使用橋接模式,因為稍後我們會搭建DHCP服務器,在同一局域網多個DHCP服務會有沖突。
  • VMware的NAT模式的dhcp服務也關閉,避免幹擾。

技術分享

2、安裝DHCP服務

yum -y install dhc[root@ks ~]# rpm -ql dhcp | grep dhcpd.conf

#查看配置文件

[root@ks ~]#rpm -ql dhcp | grep dhcpd.conf

/etc/dhcp/dhcpd.conf

/usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap

/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample

/usr/share/man/man5/dhcpd.conf.5[root@ks ~]# cat /etc/dhcp/dhcpd.conf

#在配置文件中添加參數

[root@ks ~]# cat /etc/dhcp/dhcpd.conf

#
# DHCP Server Configuration file.
#   see 
/usr/share/doc/dhcp*/dhcpd.conf.sample # see man 5 dhcpd.conf # # #以下是增添內容 # subnet 10.0.0.0 netmask 255.255.255.0 { range dynamic-bootp 10.0.0.1 10.0.0.100; option subnet-mask 10.0.0.255; default-lease-time 21600; max-lease-time 43200; next-server 10.0.0.230; filename "pxelinux.0"; }

上述參數註釋:

range 10.0.0.1 10.0.0.100;           # 可分配的起始IP-結束IP
option subnet-mask 255.255.255.0;    # 設定netmask
default-lease-time 21600;            # 設置默認的IP租用期限
max-lease-time 43200;                # 設置最大的IP租用期限
next-server 10.0.0.230;              # 告知客戶端TFTP服務器的ip
filename "/pxelinux.0";              # 告知客戶端從TFTP根目錄下載pxelinux.0文件
註:更過參數man dhcpd.conf

啟動dhcp服務

[root@ks ~]# /etc/init.d/dhcpd start
正在啟動 dhcpd:                                           [確定]
[root@ks ~]# netstat -tulnp | grep dhcp
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               2257/dhcpd 

DHCP指定監聽網卡(***多網卡默認監聽eth0,指定DHCP監聽eth1網卡***)

[root@ks ~]# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth1  # 指定監聽網卡
[root@ks ~]# /etc/init.d/dhcpd restart
[root@ks ~]# tailf /var/log/messages    #查看日誌

3、安裝TFTP服務

TFTP(簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69.

TFTP安裝配置

[root@ks ~]# yum -y install tftp-server
[root@ks ~]# vim /etc/xinetd.d/tftp 
#    workstations, download configuration files to network-aware printers, #    and to start the installation process for some operating systems.
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
}

[root@ks ~]# /etc/init.d/xinetd restart
停止 xinetd:                                              [確定]
正在啟動 xinetd:                                          [確定]
[root@ks ~]# netstat -tulnp | grep 69
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               2297/xinetd 

4、配置HTTP服務

[root@ks ~]# yum -y install httpd
[root@ks ~]# sed -i "277i ServerName 127.0.0.1:80"  /etc/httpd/conf/httpd.conf

[root@ks ~]# /etc/init.d/httpd start
正在啟動 httpd:

[root@ks ~]# mkdir /var/www/html/CentOS-6.9
[root@ks ~]# mount /dev/cdrom /var/www/html/CentOS-6.9/
mount: block device /dev/sr0 is write-protected, mounting read-only

[root@ks ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.6G  1.8G  6.4G  22% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       190M   35M  146M  19% /boot
/dev/sr0        3.7G  3.7G     0 100% /var/www/html/CentOS-6.9

註:這裏只是展示功能,生成環境中需要把光盤數據拷貝到機器中(磁盤的讀寫速度較快)

瀏覽器輸入IP進行訪問測試:

技術分享

5、配置支持PXE的啟動程序

[root@ks ~]# yum -y install syslinux
[root@ks ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/    #復制啟動菜單程序文件
[root@ks ~]# cp -a /var/www/html/CentOS-6.9/isolinux/* /var/lib/tftpboot/

[root@ks ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg/
[root@ks ~]# ls /var/lib/tftpboot/
boot.cat  grub.conf   isolinux.bin  memtest     pxelinux.cfg  TRANS.TBL     vmlinuz
boot.msg  initrd.img  isolinux.cfg  pxelinux.0  splash.jpg    vesamenu.c32

[root@ks ~]# cp /var/www/html/CentOS-6.9/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

編輯default配置文件

[root@ks ~]# vim /var/lib/tftpboot/pxelinux.cfg/default

default ks
prompt 0

label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.230/ks_config/CentOS-6.9-ks.cfg ksdevice=eth0

#ksdevice=eth0代表黨客戶端有多快網卡的時候,要實現自動化需要設置從eth0安裝,不指定的話,安裝的時候系統會讓選擇。

6、創建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詳解

官方文檔:

CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html

ks.cfg文件組成大致分為3段:

  • 命令段:鍵盤類型,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷並提示用戶選擇此項的選項。
  • 軟件包段
  • %packages
    @groupname:指定安裝的包組
    package_name:指定安裝的包
    -package_name:指定不安裝的包
    #在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關系
  • 腳本段(可選)
%pre:安裝系統前執行的命令或腳本(由於只依賴於啟動鏡像,支持的命令很少)
%post:安裝系統後執行的命令或腳本(基本支持所有命令)

相關參數詳解:

關鍵字             含義
install 告知安裝程序,這是一次全新安裝,而不是升級upgrade。 url
--url=" " 通過FTP或HTTP從遠程服務器上的安裝樹中安裝。 url --url="http://10.0.0.230/CentOS-6.9/" 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文件

# 先生成一個密碼備用
[root@ks ~]# grub-crypt
Password:123456
Retype password:123456
$6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
[root@ks ~]# mkdir /var/www/html/ks_config
[root@ks ~]# vim /var/www/html/ks_config/CentOS-6.9-ks.cfg
# Kickstart Configurator for CentOS 6.9 by yao zhang
install
url --url="http://10.0.0.230/CentOS-6.9/"
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=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
%end

kickstart無人值守安裝之實踐篇