2021-05-12 14:32:11
kickstart實現 CentOS 6.9 & 7.4 自動安裝系統
環境: VMware 14.0 Pro版
光碟映象: CentOS-6.9-x86_64-minimal.iso
ks檔案生成器: kickstart
偶然接觸一個kickstart, 學到自動安裝系統, 先看一下原理:
CentOS在VMware安裝流程: 新建虛擬機器 --> 掛載光碟映象 --> 開始安裝 --> 設定(包括地區, 語言, 時區, 鍵盤型別, root密碼等等) --> 完成安裝 --> 重新啟動 --> 進入系統
在如上過程中, 對安裝系統的設定是最耗時間的, 假如我們要安裝100台主機, 難道要每一台都去設定嗎? Come on, geek up and finish it.
-
什麼是kickstart?
- kickstart, 生成自動組態檔, 即應答檔案,達到在安裝系統時無須人工干預的目的
- 需要在圖形介面下啟動; 當然也可以在命令列下複製編輯 /root/anaconda-ks.cfg 檔案, kickstart的最終目的也是生成一個這樣的檔案
- 安裝方法:
yum -y groupinstall Desktop --> 如果你沒有圖形介面的話
startx & --> 啟動圖形介面, 並且在圖形介面啟動一個Terminal
yum -y install system-config-kickstart --> 安裝kickstart, 是的, kickstart的安裝包就叫做這麼一長串名字 system-config-kickstart --> 命令列直接輸入啟動, 或者在圖形介面下的左上角 Applications ->System Tools -> kickstart 啟動, 即上圖 Terninal 的上一個選項
-
設定ks應答檔案, 圖片太多, 所以做成了gif, 2s/幀, 共12張
-
現在有了ks檔案, 我們儲存為 /root/ks6_mini.cfg 作為安裝CentOS 最小系統的應答檔案好了, 但是這個檔案要放在哪裡呢?
- 跟安裝映象一塊, 燒錄在硬碟裡, 更改grub目錄選單(後面會有提到);
- 剛好還有一台虛擬機器上裝了apache, 那麼我們就直接甩到網頁上好了;
- centos 7 上的, 乾淨httpd服務, 啥也沒有
systemctl start httpd sftp 192.168.142.142:/root/ks6_mini.cfg --> 獲取ks檔案到$pwdcp ks6_mini.cfg /var/www/html/
-
設定應答檔案位置
- 新建虛擬機器 -> 掛載正常安裝光碟 -> 啟動虛擬機器, 進入安裝介面 -> 按Tab鍵 -> 在核心設定後, 加上 ks=http://192.168.142.128/ks6_mini.cfg
- 回車, ok, 自動安裝開始, 需要注意的是, ks使用http方式獲取, 需要正確設定網絡卡以便能到達這個網址, 否則 安裝過程中會停下來, 問你要這個地址的
- 新建虛擬機器 -> 掛載正常安裝光碟 -> 啟動虛擬機器, 進入安裝介面 -> 按Tab鍵 -> 在核心設定後, 加上 ks=http://192.168.142.128/ks6_mini.cfg
上面這種安裝方式, 只能稱作為半自動安裝, 因為需要手動干預輸入ks位置
我們下面來製作一個, 無需輸入ks位置, 可客製化的啟動引導盤
這是一個CentOS6.9最小安裝光碟裡的部分內容, 我們需要的就是他的 isolinux/ 下的所有檔案
[root@centos6 myiso]# tree
.
├── CentOS_BuildTag
├── EFI
│ ├── BOOT
│ │ ├── BOOTX64.conf
│ │ ├── BOOTX64.efi
│ │ ├── splash.xpm.gz
│ │ └── TRANS.TBL
│ └── TRANS.TBL
├── EULA
├── GPL
├── images
│ ├── efiboot.img
│ ├── efidisk.img
│ ├── install.img
│ ├── pxeboot
│ │ ├── initrd.img
│ │ ├── TRANS.TBL
│ │ └── vmlinuz
│ ├── TRANS.TBL
│ └── updates.img
├── isolinux --> 啟動盤所需要著手的地方
│ ├── boot.cat --> 類似MBR的存在
│ ├── boot.msg
│ ├── grub.conf
│ ├── initrd.img --> ramfs, 假根
│ ├── isolinux.bin -->光碟載入程式, 在mkisofs的選項中需要明確給出檔案路徑, 這個檔案屬於SYSLINUX專案
│ ├── isolinux.cfg -->isolinux.bin的組態檔, 當光碟啟動後(即執行isolinux.bin), 會自動去找isolinux.cfg檔案
│ ├── memtest
│ ├── splash.jpg -->光碟啟動介面的背景圖
│ ├── TRANS.TBL
│ ├── vesamenu.c32 -->是光碟啟動後的安裝圖形介面, 也屬於SYLINUX專案, menu.c32版本是純文字的選單
│ └── vmlinuz -->核心映像 ├── Packages
│ ├── acl-2.2.49-7.el6.x86_64.rpm
......
├── RELEASE-NOTES-en-US.html
├── repodata
│ ├── 1fe6472ba4a4c603142f6c166cf8576540d182b5c23053300bc086a950c39e02-other.sqlite.bz2
│ ├── 34bae2d3c9c78e04ed2429923bc095005af1b166d1a354422c4c04274bae0f59-c6-minimal-x86_64.xml
│ ├── 55794efeb017159652008492a09552561cad4be2652478bfa3fc1e8e2ac12940-other.xml.gz
│ ├── 73c548679e02ace4bb7102d5b92dd97ee224f35de6d198e0f090d409b9731d89-primary.sqlite.bz2
│ ├── ad712ab1d0018477799baa3f9660935dec74cd227724142a4b2a33b63cafe583-filelists.xml.gz
│ ├── ce2d698b9fb1413b668443e88835a0642cea8f387c7f25cc946f56dd93f109bb-c6-minimal-x86_64.xml.gz
│ ├── fc5f6c991238c567b41dd12c19f3e0c1b4a56dce0063020fc7de8339bde0f5f9-filelists.sqlite.bz2
│ ├── ffaba656c4b1c77c844142b80d383bb38e9335b36a8046f56f53747044010304-primary.xml.gz
│ ├── repomd.xml
│ └── TRANS.TBL
├── RPM-GPG-KEY-CentOS-6
├── RPM-GPG-KEY-CentOS-Debug-6
├── RPM-GPG-KEY-CentOS-Security-6
├── RPM-GPG-KEY-CentOS-Testing-6
└── TRANS.TBL
製作Linux自動安裝啟動盤(非完整安裝盤)步驟:
1. 拷貝上面製作好的ks6_mini.cfg sftp 192.168.142.128:/var/www/html/ks6_mini.cfg , 修改之
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use CDROM installation media --> 修改這裡的安裝源
# cdrom
url --url="https://mirrors.aliyun.com/centos/6.9/os/x86_64/"
# 阿里雲的映象源, 可以改為內網http或ftp伺服器, 會更快一些
# Root password
rootpw --iscrypted $1$NYOXLNBQ$e7B2.8hPCvCK75U/Jj8hV/
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=200
part /home --fstype="ext4" --size=5000
part / --fstype="ext4" --size=10000
part swap --fstype="swap" --size=2048
%post
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS-$releasever - Base - 163.com
baseurl=http://mirrors.163.com/centos/6/os/x86_64/
gpgcheck=0
EOF
%end
2. 為了方便另外做了一份centos6 的桌面版應答檔案, ks6_desktop.cfg, 大家可以自行使用kickstart生成之
這裡有一個需要注意的地方, 在CentOS7上, 如果kickstart介面的Package頁面沒有顯示, 請修改yum倉庫中的[base] 項為 [development] 就可以了
3. 拷貝 上面提到的 isolinux/ 到 任意空目錄
4. 修改 isolinux.cfg
修改過程中要注意, 既然是自動安裝, 那麼如果原來磁碟有作業系統怎麼辦?
--> 所以, 我們的預設選項應該為從硬碟啟動
5. 製作映像
[root@centos6 isolinux]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/auto-centos6/autoboot
6. 使用xftp將生成的 /root/boot.iso拷貝出來, 掛載到新建的虛擬機器光碟上, 啟動之, 效果如下:
可以看到, 安裝已經開始, 全部要做的工作就是掛載啟動盤, 選擇安裝最小版或圖形版本
--> 注意: 此處需要當前待安裝系統的主機能夠連線到阿里雲映象伺服器,如果不能連線外網, 自定義一個內網伺服器也是可以的
圖形介面安裝完成:
製作Linux自動安裝盤(完整安裝盤)步驟:
1. 掛載完整版安裝光碟, 這裡我們以CentOS 7 為例 (懶得下載CentOS 6的映象了)
注意: 既然以CentOS 7 為例, 那麼我們的操作也要在CentOS 7 上進行, kickstart也要安裝上去
2.複製光碟完整內容至/root/myiso下
cp -r /tmp/myiso/ /root/
3.製作ks檔案, 複製到 /root/myiso/ks/ 下
這裡有一個需要注意的地方, 在CentOS7上, 如果kickstart介面的Package頁面沒有顯示, 請修改yum倉庫中的[base] 項為 [development] 就可以了
4.修改 /root/myiso/isolinux/isolinux.cfg , 修改請參照上面的方法, 修改預設項, 新增ks路徑 ks=cdrom:/ks/ks7_mini.cfg
注意: 對於CentOS 7, 它的原生isolinux.cfg中, 其中一段Label如下:
label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_64 quiet
====================
append initrd=initrd.img ks=cdrom:/ks/ks7_mini.cfg --> 這裡, 要去掉inst.stage2選項, 暫時還沒有弄明白是幹嘛的, 不過有了它還需要少許的人工操作
5.進入yum倉庫後設資料路徑 /root/myiso/repodata
重建repo後設資料
-27-[root@vm]15:27 ~/myiso/repodata # cd ..
-28-[root@vm]15:27 ~/myiso # ls
CentOS_BuildTag EFI EULA GPL images isolinux ks LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
-29-[root@vm]15:27 ~/myiso # createrepo -g repodata/38b60f66d52704cffb8696750b2b6552438c1ace283bc2cf22408b0ba0e4cbfa-c7-x86_64-comps.xml .
Spawning worker 0 with 1599 pkgs
Spawning worker 1 with 1599 pkgs
Spawning worker 2 with 1599 pkgs
Spawning worker 3 with 1598 pkgs
Spawning worker 4 with 1598 pkgs
Spawning worker 5 with 1598 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
6. 刪除不需要的檔案
TRANS.TBL find -name TRANS.TBL -exec rm {} ;
7.製作映像檔案
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 7 x86_64 Everything" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/CentOS7-Auto-Everything.iso /root/myiso/
8. xftp 匯出來, 再掛載到VMware上, 看看效果如何
安裝完成, 成功點亮.
至此, 文章結束, 最終結果還是個半自動安裝:
1.把這個映象使用軟碟通或者別的軟體或者dd 放進U盤
2.設定bios啟動順序為U盤
3.點選方向鍵下-->回車-->大佬請喝茶-->茶喝好了就裝好了
其實這個東東一點也不難, 前提是你得擁有豐富的windows安裝經驗....
新增一些筆記類的文字:
製作Linux自動安裝iso包-CentOS6
製作引導光碟和U盤
建立引導光碟:
mkdir -pv /app/myiso
cp -r /misc/cd/isolinux/ /app/myiso/
vim /app/myiso/isolinux/isolinux.cfg
initrd=initrd.img text ks=cdrom:/myks.cfg
cp /root/myks.cfg /app/myiso/
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /app/myiso/
注意: 以上相對路徑都是相對於光碟的根, 和工作目錄無關
建立U盤啟動盤
dd if=/dev/sr0 of=/dev/sdb
應答檔案的建立:
安裝kickstart
在圖形介面下使用 system-config-kickstart 編輯安裝選項
語言-鍵盤-root密碼-系統架構-自動Reboot-不啟動圖形介面
安裝方法
分割區: 清除MBR, 刪除所有分割區, 刪除所有卷標, 設定檔案系統分割區等
網路設定: DHCP等設定
驗證方法: 本地驗證, 一般不動
防火牆: 禁用
顯示: 是否安裝圖形介面
rpm包的選擇--> 基於repo
安裝前指令碼 --> 一般不用
安裝後指令碼:
#直接設定yum
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/base.repo << EOF
[base]
name=CentOS- Base - 163.com
baseurl=http://mirrors.163.com/centos/7/os/x86_64/
gpgcheck=0
EOF
#新增使用者等等操作
儲存為ks6_mini.cfg等
使用ksvalidator ks6_mini.cfg 檢查語法問題
注意: 此處 CentOS 7 使用kickstart, 需要先設定 repo中的 [base] 為 [development], 否則無法使用Packages索引標籤
此處基於httpd服務, 將檔案放置於某伺服器上, 而後, 由安裝光碟啟動到安裝頁面, 在grub頁面, 按ESC, 輸入; linux ks=http://host:port/ks_file; 回車即可自動啟動安裝
指明ks檔案的位置: ks=
DVD drive: ks=cdrom:/PATH/TO/ks_file
HARD drive: ks=hd:device:/PATH/TO/ks_file
HTTP server: ks=http://host:port/PATH/TO/ks_file
FTP server: ks=ftp://host:port/PATH/TO/ks_file
HTTPS server: ks=https://host:port/PATH/TO/ks_file
NFS server : ks=nfs:host:/PATH/TO/ks_file
kickstart檔案的格式:
命令段:
指明各種安裝前設定, 如鍵盤型別等
必備命令:
authconfig: 認證方式設定
authconfig --useshadow --passalgo=sha512
bootloader: bootloader的安裝位置及相關位置
bootloader --location=mbr --dirveorder=sda -append="crashkernel=auto rhgb quiet"
keyboard: 設定鍵盤型別
lang: 語言型別
part: 建立分割區
rootpw: 指明root的密碼
timezone: 時區
程式包段: 指明要安裝的程式包組或程式包, 不安裝的程式包等
%package
@group_name
package
-package --> 不想裝的包
%end
指令碼段:
%pre: 安裝前指令碼
執行環境: 執行於安裝媒介上的微型Linux環境
%post: 安裝後指令碼
執行環境: 安裝完成的系統
系統光碟中isolinux目錄列表--> 位於cdrom中的isolinux/下
solinux.bin: 光碟載入程式, 在mkisofs的選項中需要明確給出檔案路徑, 這個檔案屬於SYSLINUX專案
isolinux.cfg: isolinux.bin的組態檔, 當官潘啟動後(即執行isolinux.bin), 會自動去找isolinux.cfg檔案
vesamenu.c32: 是光碟啟動後的安裝圖形介面, 也屬於SYLINUX專案, menu.c32版本是純文字的選單
Memtest: 記憶體檢測, 是一個獨立程式
splash.jpg: 光碟啟動介面的背景圖
vmlinuz是核心映像
initrd.img是ramfs(先cpio,再gzip壓縮)
建立全自動光碟映像
掛載安裝光碟
完全複製安裝光碟下的所有檔案到某個目錄
例如 cp -r /dev/cdrom/ /tmp/myiso/
拷貝應答檔案ks_file到/tmp/myiso/ksdir
cp ks_file /tmp/myiso/ksdir
編輯選單檔案
vim /tmp/myiso/isolinux/isolinux.cfg
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.9! --> 修改標題
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset
label rescue --> 救援模式, 刪除
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local --> 設為預設選項
menu label Boot from ^local drive
localboot 0xffff
label memtest86 --> 刪除
menu label ^Memory test
kernel memtest
append -
修改label
label local --> 設定預設啟動為本地磁碟系統(如果有的話)
menudefault
menu label Boot From ^local drive
localboot 0xffff
label desktop
menu label Install an ^desktop system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/PATH/TO/ks_file --> 加上ks 應答
label mini
menu label Install ^mini system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/PATH/TO/ks_file --> 加上ks應答
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /app/myiso/
mkisofs選項:
-o 指定映像檔案的名稱
-b 指定在製作可開機光碟時所需的開機映像檔案
-c 製作可開機光碟時, 會將開機映像檔案中的no-eltorito-catalog全部內容做成一個檔案
-no-emul-boot 非模擬模式啟動
-boot-load-size 4 設定載入部分的數量
-boot-info-table 在啟動的影象中顯示資訊
-R 或 -rock 使用Rock RidgeExtensions
-J 或 -joliet 使用Joliet格式的目錄與檔名稱
-v 或 -verbose 執行時顯示詳細資訊
-T 或 -translation-table 建立檔名的轉換表, 適用於不支援Rock Ridge Extension 的系統上
經過這條命令, 一個啟動盤就已經做好了, 當然在ks中要設定安裝源, 原生的或者是cdrom的或者是Internet上的
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-06/152666.htm
相關文章