linux中Kickstart自動化安裝教程

來源:互聯網
上載者:User


在 RHEL,CentOS,Fedora 等系統中,安裝系統使用的程式名叫 anaconda,它屬於 FedoraProject,由 Python 開發,能夠提供圖形或者文本介面用於系統安裝。 Anaconda 安裝程式最大的優點是:它可以用一個稱之為 Kickstart
的特性進行非互動式指令碼安裝。Kickstart 指令碼是一個用來指定安裝要求詳情的簡單 ASCII 文字檔。該指令碼可用常規文字編輯器編寫,或用 Kickstart 配置程式來產生。

Kickstart 指令碼通常有三個不同的部分。

命令部分
軟體包部分
指令碼部分
Anaconda 會忽略 Kickstart 指令碼中所有以“#”開始的行和空行。

一、Kickstart文法結構

1、命令部分

從檔案的最開始直到出現以%packages 開始的行,這一部分都屬於命令部分。命令列必須以可識別的關鍵字開始,並且所有與該關鍵字有關的參數都必須出現在同一行中。命令部分是用來指定安裝程式需要的除軟體選項外的所有標準資訊。關鍵字在命令部分可以以任意次序出現。

這部分中一般我們會指定安裝源、分區資訊、防火牆、使用者組等。如下:

# 鍵盤類型設定
keyboard us
# 語言設定
lang en_US
# 時區、ntp伺服器及硬體時鐘設定
timezone [--utc] Asia/Shanghai --ntpservers=ntp1.aliyun.com
# 系統安裝完成後的操作(重啟或關機)
reboot | poweroff | halt
# 是否啟用 selinux
selinux --enforcing | --disabled
# 系統的認證方式,這裡選擇密碼認證密碼編譯演算法sha512
authconfig --useshadow --passalgo=sha512
# 密碼設定,明文或加密後的 root 密碼
rootpw --plaintext 361way  或
rootpw --iscrypted 密碼串
# 安裝/升級 作業系統
install | upgrade
# 指明安裝源或安裝介質,如FTP 或 HTTP 路徑
url --url=....
# 是否開啟防火牆
firewall --disabled | --enabled --service=ssh,cups
# 系統第一次啟動後是否進行使用者配置
firstboot --disabled | --enabled
# 安裝介面為 文本/圖形
text | graphical
#允許通過vnc遠程查看圖形安裝
vnc --password=361way
# bootloader 的安裝位置,這裡選擇安裝至 mbr 中
bootloader --location=mbr --boot-drive=sda
# 安裝前清除系統的哪些分區,--all 表示清除所有分區
clearpart  --all --drivers=sda,sdb --initlabel
# 使用 clearpart --all 時,需要加上這個選項,否則安裝過程會被暫停,需要手動選擇
zerombr
# ignoredisk安裝時忽略指定的磁碟
ignoredisk --drives=sdc
# 分區設定
part
part swap --size=2048                       # 對 swap 進行分區的樣本
part /boot --fstype ext4 --size=100000      # 對 /boot 進行分區的樣本
part pv.01 --size=8192                     # 建立一個 PV
volgroup vgname pvname                  # 建立 VG
logval /home --fstype ext4 --name=home --vgname=vgname --size=1024      # 建立一個邏輯卷的樣本
# 網路設定並啟用網路裝置
network --drive=eth0 --bootproto=dhcp
# 預設服務配置
services --disabled=NetworkManager,ip6tables  --enabled=network,iptables
# 建立本機使用者和組
group --name=admins --gid=10001
user --name=ybk --gecos="itybku" --groups=admins --password=test --plaintext
# 指定安裝期間anaconda 將如何進行日誌記錄
logging --hosts=www.361way.com --level=info
#firstboot 確認系統初次開機時是否啟動firstboot
firstboot --disabled
# 可以將其他檔案的內容包含進 kickstart 檔案中來,包含的檔案必須是安裝系統過程中能夠訪問的
%include 檔案名稱

2、軟體包部分(%packages)

軟體包部分是用來指定需要安裝的軟體。這部分從以%packages 開頭的行開始,直到下一個以 “%”字元開始的行為止。這一部分通常採用以下兩種格式之一。

@ Component Name
package-name

第一種格式是用軟體組來指定軟體,在這裡一定要注意正確拼字軟體組名稱,並注意大小寫。

第二種格式是用來指定要安裝的軟體包的具體名稱。如果%packages 行包含額外的--resolvedeps 參數,那麼也會安裝解決相依性的軟體包。

註:使用小橫線(-)開頭指定安裝中不使用的軟體包或組。

樣本如下:

%packages
@base
@core
@chinese-support
@fonts
chrony
rsync
grub2
firewalld
-NetworkManager
-autofs

3、指令碼部分

指令碼部分又分為預先安裝指令碼(pre)及安裝後指令碼(post)兩部分。這部分必須以%pre或%post開頭,以%end結尾。兩者順序是沒有關係的。有一點不同的是:預先安裝指令碼不會在 chroot 環境中運行。

官方文檔中拿磁碟分割部分做為了這部分的樣本,這裡我發現一個更合適的例子 --- swap 分區設定。交換分區一般需要通過實體記憶體大小去定義 ,可以將該部分寫入%pre 部分。如下:

%pre 表示安裝前指令碼,此時的 Linux 系統內容為微縮版環境,指令碼應儘可能簡單。這裡的指令碼通常用於查詢一些系統資訊,然後根據這些資訊動態設定安裝配置

%pre
# 設定分區的配置,配置 swap 大小為和 記憶體大小一樣
#!/bin/sh
act_mem=`cat /proc/meminfo | grep MemTotal | awk '{printf("%d",$2/1024)}'`
echo "" > /tmp/partition.ks
echo "clearpart --all --initlabel" >> /tmp/partition.ks
echo "part /boot --fstype=ext3 --asprimary --size=200" >> /tmp/partition.ks
echo "part swap --fstype=swap --size=${act_mem}" >> /tmp/partition.ks
echo "part / --fstype=ext3 --grow --size=1" >> /tmp/partition.ks
%end
%include /tmp/partitions.ks
%post 表示安裝後指令碼,此時的 Linux 系統內容為已經安裝完成的系統。這裡的指令碼可以進行一些系統安裝後配置,如公開金鑰注入,倉庫配置,第三方軟體安裝,系統服務組態檔修改等。這裡舉個簡單的樣本:

%post  --erroronfail
rm -f /etc/udev/rules.d/70*
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.144.189.71
NETMASK=255.255.240.0
EOF
%end

二、ks檔案產生驗證及其他

1、ks.cfg檔案的產生

ks.cfg 檔案直接去寫可能會感覺比較麻煩,不過系統為我們提供了兩種快捷的方法得到該檔案。

方法1:自訂安裝好的OS /root目錄下會有anaconda-ks.cfg 檔案產生,直接可以複製一份該檔案進行編輯;

方法2:使用圖形化GUI 程式產生該設定檔。redhat/centos上有一個system-config-kickstart 包,安裝好後啟動5 level下開啟該程式,可以傻瓜式的下一步下一步自訂產生該檔案。

註:

A、一般人我不告訴他---在沒有圖形化下也可以通過以下終端命令產生ks.cfg檔案,不過下面的方法產生的ks 檔案同樣是基本當前主機的配置產生的(運行一段時間或安裝過其他包後,產生的配置比/root/anaconda-ks.cfg 內容要多)。

[root@361way ~]# system-config-kickstart  --generate /tmp/test.cfg
B、system-config-kickstart 不支援產生進階ks配置,如LVM 、軟RAID等。

2、ks檔案的驗證

yum 源裡有一個python寫的工具包pykickstart ,其中包含了幾個比較有用的工具 ,其中就包含對ks語法驗證工具ksvalidator ,具體樣本如下:

[root@361way ~]# ksvalidator /tmp/anaconda-ks.cfg
kickstart檔案的第16 行發生問題:
Unknown command: netwrk
上面的設定檔中network 部分我去掉了一個字母o ,其就會提到在某一行發生了什麼錯誤。如果執行後無任何輸出,表示該檔案無語法錯誤。

3、rhel 7相對於rhel 6 的變化

由於rhel7 相對於之前的版本做了很大的變化,kickstart 檔案的文法也在一些方面做了變動。不同不必擔心的是。pykickstart 工具包中的ksverdiff 可以協助我們瞭解兩者的區別,如下:

[root@361way ~]# ksverdiff --help
Usage: ksverdiff [options]
Options:
  -h, --help      show this help message and exit
  -f F, --from=F
  -t T, --to=T
[root@361way ~]# ksverdiff -f rhel6 -t rhel7
以下命令在 rhel7 中被移除:
monitor interactive
以下命令在 rhel7 中不推薦:
upgrade
以下命令在 rhel7 中被添加:
btrfs realm eula liveimg
以下選項添加到 logvol ,在 rhel7 中:
--metadatasize --thin --thinpool --chunksize --label --resize --poolname
以下選項從 logvol 中移除,在 rhel7:
--bytes-per-inode
以下選項添加到 firewall ,在 rhel7 中:
--remove-service
以下選項從 firewall 中移除,在 rhel7:
--telnet
……………………省略
4、常用項總結

kickstart 可配置項雖然比較多,但大部分在企業使用情境中是固定不變的,我們一般安裝時需要關注的幾個比較重要的配置部分是:

%packages
auth
url
%post
clearpart
services
rootpw
part
timezone
network

三、利用ks檔案安裝

我在之前的 kvm虛擬化小結(三)guest安裝 篇中就已經提到過使用ks 檔案進行安裝的樣本,這裡還是以kvm 中安裝虛擬機器為例,可以以下引用ks部分,自動化完成OS的安裝。

virt-install -n rhce --hvm -r 2048  \
--vcpus=2 --os-type linux --os-variant=rhel7 \
--network bridge=br0 --nographics \
--location='http://192.168.0.102/centos7' \
--extra-args='ks=http://192.168.0.102/kvm_rhel7.ks ksdevice=eth0 ip=192.168.0.120 netmask=255.255.255.0 dns=8.8.8.8 gateway=192.168.0.1 text console=tty0 console=ttyS0,115200n8 serial' \
--disk path=/data/img/rhce/centos7.img,size=30
當然實際應用中,並不局限於虛擬機器的安裝 ,同樣適用於物理機的安裝。而且在很多像cobbler之類的自動化安裝方案中也是通過對ks的二次封裝搞出的解決方案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.