Linux學習31-運維自動化之自制啟動程式
系統安裝過程
安裝程式
1. CentOS系統安裝
- 名稱解釋
anaconda: CentOS圖形介面安裝嚮導程式
- gui:圖形視窗
- tui: 基於圖形庫curses的文字視窗
1.1 安裝程式啟動過程
-
啟動介面選擇 預設啟動GUI介面 若是顯式指定使用TUI介面:向核心傳遞text引數即可
- 按tab鍵,在後面增加text
例如
vmlinuz initrd=initrd.img text
- 按ESC鍵:
boot: linux text
- 按tab鍵,在後面增加text
例如
-
系統安裝引導裝置 啟動安裝過程一般位於引導裝置;後續的anaconda及其安裝用到的程式包等可來自下面幾種方式:
- 本地光碟
- 本地硬碟
- NFS
- URL: 4.1 ftp server: yum repository 4.2 http server: yum repostory
-
光碟中系統啟動檔案
[[email protected] ~]$cd /mnt/cdrom/isolinux/ [[email protected] isolinux]$ ls boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest splash.png TRANS.TBL vesamenu.c32 vmlinuz
- MBR:對應檔案 isolinux/boot.cat
- stage2: grub第二階段對應檔案isolinux/isolinux.bin
- 配置檔案:啟動選單對應檔案isolinux/isolinux.cfg,其定義的是如下畫面
[[email protected] ~]$cat /mnt/cdrom/isolinux/isolinux.cfg
label linux <==安裝升級
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz <==載入核心,下同
append initrd= initrd.img <==向核心傳遞引數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 -
- 進入選單各選項的方法
-
在選單欄上下鍵選擇,回車確認選擇。
-
如圖箭頭提示語句,上下鍵選擇對應選項後,按 [tab】鍵,可以編輯選項,提示語句對應配置檔案中的label 例如:選擇安裝項,按[tab]鍵,出現下圖所示畫面 而選擇救援模式 ,按[tab】鍵,顯示下圖介面 這兩項只是句尾不同,救援模式多出單詞rescue,所以編輯安裝模式,在詞尾加上rescue可以進入安全模式
-
選單介面按[esc]鍵,出現如下畫面,這裡暫時稱為[root:]介面,下面還要用到 直接輸入isolinux/isolinux.cfg檔案中對應label,進入對應專案,例如
boot:rescue
就會進入救援模式
-
1.2 在[boot : ]介面引用其他引數安裝系統
-
呼叫倉庫檔案實現安裝
- 找一個合適的yum源,這裡使用另一臺本地主機配置的遠端http源
[[email protected] ~]$cd /var/www/html/ [[email protected] /var/www/html]$mkdir -pv centos/6 [[email protected] ~]$mount /dev/sr0 centos/6/ 臨時掛載,儲存要寫在檔案/etc/fstab中 [[email protected] ~]$ss -ntl 確定http服務80埠是否啟動
- 在需要安裝系統的機器上操作,啟動選單按[esc]鍵,進入[boot:]介面,配置網路,指定yum倉庫路徑,回車
root:linux ip=172.20.50.205 netmask=255.255.0.0 repo=http://172.20.129.251/centos/6
-
進入如下畫面,要測試媒體,跳過
-
進入安裝畫面後,選擇語言,鍵盤佈局,裝置型別選擇基礎,然後彈出介面要格式化磁碟,選擇yes
-
指定主機名與網路,這裡網路不需要配了,第2步時候已經預設指定,設定主機名後,next
-
選擇時區,將左下角System clock uses UTC去掉,然後next
-
設定root口令,設定完成後,next
-
分割槽,根據情況選擇,這裡選擇預設分割槽Replace Existing,點選左下角Review and modify partitioning layout可以檢視預設分割槽結構,next
-
進入如下畫面,安裝GRUB,如果在箭頭所示項打鉤,可以設定grub密碼,加密選單項
-
選擇需要安裝的程式,這裡選擇最小化安裝
-
安裝重啟後,如果需要安裝圖形介面,要安裝工具包,首先配置yum源,在/etc/yum.repos.d/建一個以repo結尾的檔案,配置本地yum路徑,也就是光碟掛載點
'倉庫配置檔案內容' [[email protected] ~]$cat /etc/yum.repos.d/v9.repo [v9] baseurl=file:///mnt/ gpgcheck=0
- 安裝桌面, 需要grouplist包組中的Desktop,安裝成功後,切換到圖形檢測即可
[[email protected] ~]$yum groupinstall desktop
1.3 在[boot : ]介面手動指定安裝源
-
askmethod: 手動指定使用的安裝方法
- 與網路相關的引導選項:
- ip=IPADDR
- netmask=MASK
- gateway=GW
- dns=DNS_SERVER_IP
- ifname=NAME:MAC_ADDR
- 與遠端訪問功能相關的引導選項:
- vnc
- vncpassword=‘PASSWORD’
- 與網路相關的引導選項:
-
安裝步驟
-
在選單介面按下[esc]進入[boot:]介面輸入
boot: linux askmethod
回車,選擇語言,鍵盤佈局,彈出介面如下所示 -
選擇URL安裝,出現配置網路介面,這裡選擇DHCP自動獲取,Manual configuration為手動配置,OK下一步
-
在如圖所示位置輸入遠端伺服器地址,後續進入安裝介面
-
2. 半自動化安裝
2.1 自動化安裝支援的安裝倉庫路徑
- centos6
- DVD drive repo=cdrom :device
- Hard Drive repo=hd:device/path
- HTTP Server repo=http://host/path
- HTTPS Server repo=https://host/path
- FTP Server repo=ftp://username:[email protected] host/path <==支援使用者密碼驗證
- NFS Server repo=nfs:server:/path
- ISO images on an NFS Server repo=nfsiso:server:/path
- centos7
- Any CD/DVD drive inst.repo=cdrom
- Hard Drive inst.repo=hd:device:/path
- HTTP Server inst.repo=http://host/path
- HTTPS Server inst.repo=https://host/path
- FTP Server inst.repo=ftp://username:[email protected] host/path
- NFS Server inst.repo=nfs:[options:]server:/path
2.2 自動化安裝需要的kickstart檔案,也叫應答檔案
-
指明kickstart檔案的位置: ks=
- DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
- Hard drive: ks=hd:device:/directory/KICKSTART_FILE
- HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
- FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
- HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
- NFS server:ks=nfs:host:/path/to/KICKSTART_FILE
-
kickstart檔案的格式
- 命令段:指明各種安裝前配置,如鍵盤型別等
- 程式包段:在首尾中指明要安裝的程式包組或程式包,不安裝的程式包等
- %packages :程式包段首部,表示以下為新增項
- @group_name:@表示包組
- package:需要加入的包
- -package:’ - '表示解除安裝包
- %end:新增項結尾,與首部對應,成對出現
- 指令碼段:新增使用者自定義指令碼,實現自動化定義環境
- %pre: 安裝前指令碼 執行環境:運行於安裝介質上的微型Linux環境
- %post: 安裝後腳本頭部 執行環境:安裝完成的系統,指令碼在首尾中寫入
- %end:新增項結尾,若與程式段同時使用,一個結尾即可
-
命令段中的命令: 1. 必備命令
- authconfig: 認證方式配置
authconfig --useshadow --passalgo=sha512
- bootloader:bootloader的安裝位置及相關配置
bootloader --location=mbr --driveorder=sda – append="crashkernel=auto rhgb quiet"
- keyboard: 設定鍵盤型別
- lang: 語言型別
- part: 建立分割槽
- rootpw: 指明root的密碼
- timezone: 時區
- authconfig: 認證方式配置
- 可選命令 1. install OR upgrade 2. text: 文字安裝介面 3. network 4. firewall 5. selinux 6. halt 7. poweroff 8. reboot 9. repo 10. user:安裝完成後為系統建立新使用者 11. url: 指明安裝源 12. key –skip 跳過安裝號碼,適用於rhel版本
- 建立kickstart檔案的方式
- 直接手動編輯 依據某模板修改
- 可使用建立工具:system-config-kickstart 依據某模板修改並生成新配置/root/anaconda-ks.cfg
- 檢查ks檔案的語法錯誤:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE
2.3 應答檔案文字介面格式
- 參考作業系統安裝後生成的anaconda-ks.cfg檔案來製作應答檔案
[[email protected] ~]$ls
anaconda-ks.cfg
'複製一份來製作應答檔案,這裡命名為centos.cfg'
[[email protected] ~]$cp anaconda-ks.cfg centos.cfg
- 製作一個配置檔案,後續實驗用
'拿第1步中複製過來的檔案作為模板'
[[email protected] ~]$vi centos.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
url --url=http://172.20.129.251/centos/6
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto static --ip 172.20.50.205 --netmask 255.255.0.0 --noipv6
rootpw --iscrypted $6$vEJuwbiETLK/6l.A$gOvtK6T66QxCDEjcqFoX1fQJZzEQRku64PyerKlPotaampsfHdh7MN7w.Ccw55QGgocuTaRMh79mTTCLcOWo.0
firewall --disabled <==禁用防火牆
authconfig --enableshadow --passalgo=sha512 <==驗證方法,預設即可
selinux --disabled <==禁用selinux
timezone Asia/Shanghai <==時區
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" <==boot安裝項
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr <==清空分割槽表
clearpart --linux --drives=sda <==格式化磁碟
part /boot --fstype=ext4 --size=1024 <==分割槽部分
part / --fstype=ext4 --size=50000
part /data --fstype=ext4 --size=30000
part swap --size=2048
#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1
repo --name="CentOS" --baseurl=http://172.20.129.251/centos/6 --cost=100 <==安裝獲取源地址
%packages <==程式包段首部
@core
@server-policy
@workstation-policy
autofs <==光碟自啟動服務
vim-enhanced <==vim工具
%post <==指令碼首部
useradd v9 <==建立使用者
echo 123456 | passwd --stdin v9 &> /dev/null <==修改密碼
mkdir /etc/yum.repos.d/bak <==建立本地YUM源
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat >/etc/yum.repos.d/v9.repo <<EOF
[V9]
name=v9
baseurl=file:///misc/cd
gpgceck=0
EOF
mkdir /root/.ssh <==基於key驗證
cat > /root/.ssh/authorized_keys <<EOF <==匯入需要驗證的主機key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOFQkBK9AUEad/S8edx9+vUpIOvjUVoWBO60dN85YdN4R8HtQQROYGT0MKYsld9FiukDR8zZaHUZdmet2uG4VucOiII/vOEepikuw9XFexi1wWiblTdr8565EYIhm5GBLgYDesnTu/3vUBDy7A8+tdNB3I2Y8zWIdJ1bZh5NhIOYkrmjUYoGpPr1SzppT4xv0dAk/657TpLfSnZKTl3gz/tUJ44phUuqSvQjZp756/R8vpFg/uzDW2Ig8IiDug5vvRMaMR/86dbDJh6+POSg4Imbh7JvGDGRxdAwbC0b4PKaFaMx9DlAZhtT5E9/a2dhLE3Tss2I8X1jkKqphKXtGj [email protected]
EOF
chmod 600 /root/.ssh/authorized_keys <==修改檔案許可權
chmod 700 /root/.ssh <==修改目錄許可權
%end <==自編內容收尾
- 寫好配置檔案將其放在公共目錄中,這裡選擇放在http遠端源目錄中
[[email protected] ~]$scp centos.cfg 172.20.129.251:/var/www/html/ks/
- 安裝語法檢查工具
[[email protected] ~]$yum install system-config-kickstart
- 檢查語法
[[email protected] ~]$ksvalidator /var/www/html/ks/centos.cfg
2.4 在圖形介面修改和編制應答檔案
在圖形介面輸入命令system-config-kickstart
彈出介面如下,可以將系統現有的應答檔案點選左上角file讀入修改,也可以手工填寫
- Basic Configuration
- Installation Metod,安裝方法
- Boot Loader Options 選擇install new boot loader。需要設定GRUB密碼可以選填GRUB Options設定
- Partition information 分割槽資訊
- Network Configuration網路獲取,可以手動指定
- Authentication驗證方法,預設就可以
- Firewall Configuration防火牆和SElinux選項,可以禁用或啟用
- Display Configuration是否安裝圖形環境,不安裝去掉對勾即可
- Package Selection選擇需要安裝的包,在CentOS7中有BUG需要將本機yum倉庫配置檔名改為[development]
- Pre-installation Script安裝前指令碼
- Post-installation Script安裝後腳本
- 儲存到指定目錄即可。
2.5 半自動化安裝
- 光碟引導時,在載入畫面按[esc]進入光碟選單,再按[esc]進入[boot:]介面。 安裝CentOS7需要用CentOS7光碟,CentOS6使用CentOS6光碟 另外如果安裝圖形介面記憶體需要大於1G另外如果安裝圖形介面記憶體需要大於1G
- 利用應答檔案安裝系統在[boot : ]介面輸入如下內容,回車,等待安裝完成即可
boot:linux ks=http://172.20.129.251/ks/centos.cfg ip=172.20.50.205 netmask=255.255.0.0
3. 自制啟動程式
-
系統光碟中isolinux目錄列表
- solinux.bin 光碟載入程式,在mkisofs的選項中需要明確給出檔案路徑,這個檔案屬於SYSLINUX專案
- isolinux.cfg isolinux.bin的配置檔案,當光碟啟動後(即執行isolinux.bin),會自動去找isolinux.cfg檔案
- vesamenu.c32 是光碟啟動後的安裝圖形介面,也屬於SYSLINUX專案,menu.c32版本是純文字的選單
- Memtest 記憶體檢測,這是一個獨立的程式
- splash.jgp 光碟啟動介面的背景圖
- vmlinuz 核心映像
- initrd.img 是ramfs (先cpio,再gzip壓縮)
-
建立引導光碟
- 建兩個目錄,一個放載入程式,一個放應答檔案
[[email protected] /data]$mkdir /data/boot [[email protected] /data/boot]$mkdir /data/ksdir
- 將光碟中載入程式放到此目錄中
[[email protected] /data/boot]$cp -r /misc/cd/isolinux/ .
- 將應答檔案放入ksdir中
[[email protected] /data/boot]$mv centos.cfg ksdir/
- 定製安裝選單,修改isolinux.cfg檔案
label linux menu label ^Install or upgrade an existing system <==修改前 menu label ^Auto Install an system <==改為自動安裝,不需要升級 append initrd=initrd.img <==修改前 append initrd=initrd.img ks=cdrom:/ksdir/centos.cfg <==修改後,指定應答檔案目錄
也可以設定多個安裝專案,例如一個最小化安裝,一個帶桌面安裝,將本地啟動設為預設選項,防止自動安裝啟動覆蓋原系統,其中’ ^ '表示快捷鍵,如下所示,如果按M就會跳到mini行
#prompt 1 timeout 600 <==等待時間為600的十分之一,60秒 label mini menu label Auto Install an ^Mini system kernel vmlinuz append initrd=initrd.img ks=cdrom:/ksdir/centos.cfg label desktop menu label Auto Install an ^Desktop system kernel vmlinuz append initrd=initrd.img ks=cdrom:/ksdir/centos_desktop.cfg label local menu default <==設定為預設啟動項 menu label Boot from ^local drive localboot 0xffff
-
將以上內容刻錄成光碟,輸入以下命令,其中/data/boot/為絕對路徑,其它路徑都是相對於/data/boot/的相對路徑
[[email protected] ~]$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 /data/boot/
-
將生成的映象檔案拷貝到windows中
[[email protected] ~]$sz boot.iso
-
在需要安裝系統的主機上掛載此映象檔案,進入安裝目錄,選擇對應項進行安裝
-
建立U盤啟動盤
- 將生成的映象檔案,轉換為U盤可以識別的格式
[[email protected] ~]$isohybrid boot.iso
- 生成的映象檔案寫入U盤中
[[email protected] ~]$dd if=boot.iso of=/dev/sdb dd if=/dev/sr0 of=/dev/sdb
-
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 Extensions 的系統上
官方文件:《Installation Guide》