2021-05-12 14:32:11
本地自動化安裝CentOS系統
1 概述
以下的截圖主要是用來說明自動化運維發展的階段
第一階段:全人肉階段,此時是處於無流程規範的約束,所有的運維工作都是靠人去一步步執行,這將大大降低工作的效率,也容易帶來誤操作
第二階段:工具化階段,制定了規範制度,此時是通過編寫指令碼等工具來代替運維的大部分重複性工作。但是工具沒有一個統一的管理平台
第三階段:平台化階段,此時通過完善規範來提高運維的效率,降低運維的誤操作,平台在這個階段完成,通過統一的平台,對機器進行管理,實現了企業化的平台統一管理
第四階段:自驅動階段,通過流程進行驅動,制度是關鍵,制度已經完善,系統出了問題,能夠自己解決。
本文將介紹自動化運維的第一步,即實現自動化安裝系統。本文將介紹兩個方面的自動化安裝:
1. 半自動化安裝:通過光碟引導系統系統,然後手動指定kickstart檔案,安裝包源為系統的光碟或者是網路(這裡包的路徑是在kickstart檔案裡指定),安裝過程由kickstart檔案設定。
2. 本地自動化安裝,通過自己生成一個原生的光碟檔案,燒錄在光碟或者U盤裡,實現本地自動化安裝,製作方法是:拷貝一份光碟的所有資料到本地路徑,如/root/fulliso目錄下,把kickstart檔案放在該目錄下,生成新的包依賴關係的檔案,然後再通過命令mkisofs生成光碟檔案。如果需要U盤啟動,只需要通過dd命令將新生成的iso檔案燒錄到U盤裡即可實現U盤啟動
接下來,我們將介紹安裝啟動過程,安裝需要的檔案的內容,以及每個自動化安裝方式的實現步驟
2 安裝程式和相關檔案介紹
2.1 系統啟動流程如下
bootloader-->kernel(initramfs)-->rootfs-->/sbin/init
系統安裝完成後,在啟動時,先開機自檢,讀取硬碟的第一磁區MBR,載入bootloader,即第一階段,還有1.5.和2階段。根據組態檔,找到kernel(vmlinuz)和initramfs(臨時根檔案系統),由initramfs載入小linux系統,然後把控制權交給了rootfs,然後載入/sbin/init,按指令碼命令執行相關指令碼,完成啟動的過程
2.2 系統安裝程式:anaconda
在安裝過程中我們需要借助的anaconda這個安裝程式來實現,該程式有兩種安裝介面
1.gui:圖形視窗
2 tui:基於圖形庫curses的文字視窗
anaconda的設定方式:
(1) 互動式設定方式
(2) 通過讀取事先給定的組態檔自動完成設定:按特定語法給出的設定選項,改組態檔叫kickstart檔案,這個檔案可以手動編寫,也可以通過圖形化工具system-config-kickstart來生成。我們既然要實現自動化的安裝,自然anaconda的設定方式就要選擇該方式,不能是圖形化,否則就實現不了自動化的安裝
預設我們通過光碟來安裝的時候,裝載根檔案系統,並啟動anaconda,可以對這個設定方式進行選擇,當光碟啟動到選單頁面的時候,預設啟動GUI介面,若是要指定使用TUI介面:向核心傳遞text引數即可。
(1)按tab鍵,在後面增加 text
(2)按ESC鍵:boot: linux text
在全自動化安裝中,我們是直接在ks檔案中設定了該方式為text。
anaconda工作過程
.Anaconda安裝系統分成三個階段:
a 安裝前設定階段
安裝過程使用的語言
鍵盤型別
安裝目標儲存裝置
Basic Storage:本地磁碟
特殊裝置:iSCSI
設定主機名
設定網路介面
時區
管理員密碼
設定分割區方式及MBR的安裝位置
建立一個普通使用者
選定要安裝的程式包
b 安裝階段
在目標磁碟建立分割區,執行格式化操作等
將選定的程式包安裝至目標位置
安裝bootloader和initramfs
c 圖形模式首次啟動
進行以下的設定
iptables
selinux
core dump
2.3 光碟部分檔案介紹
isolinux/boot.cat:這個檔案作用是型別MBR(Main Boot Record),負責磁碟作業系統(DOS)對磁碟進行讀寫時分割區合法性的判別、分割區引導資訊的定位,啟動的stage1.
isolinux/isolinux.bin,負責光碟的stage2,也是二進位制檔案,作用類似grub的第二階段
isolinuz/vmlinuz:是linux的核心,相當於是一個小的linux系統
isolinuz/initrd.img,一般被用來臨時的引導硬體到實際核心vmlinuz能夠接管並繼續引導的狀態
isolinux/isolinux.cfg:這個是光碟啟動時的選單檔案,選單的風格是檔案vesamenu.c32.在isolinux.cfg裡有呼叫,該檔案裡還指定了核心isolinuz/vmlinuz和isolinuz/initrd.img的路徑,向核心傳遞引數:append initrd=initrd.img,這段引數可以自己客製化,如在後面加text,就會實現字元介面安裝,這個用於自動化安裝,不適合於手動安裝,滑鼠點不了的。字元介面一般用於自動化安裝。
在isolinux.cfg檔案中指明kickstart檔案的位置,有以下幾個路徑進行呼叫該檔案,寫法如下
1
2
3
4
5
6
|
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 NFSserver:ks=nfs:host: /path/to/KICKSTART_FILE |
2.4 kickstart檔案
kickstart檔案建立
有兩個方法:
1 直接手動編寫:依據某模板修改
2:.可使用建立工具:system-config-kickstart,依據某模板修改並自動生成新設定anaconda-ks.cfg,這個軟體是在桌面端的環境下才能啟用
.檢查ks檔案的語法錯誤:ksvalidator
1
|
ksvalidator /PATH/TO/KICKSTART_FILE |
kickstart 檔案的格式如下
kickstart檔案的格式
anaconda-ks.cfg的格式如下分為 命令段,程式包段,指令碼段三段
.命令段:
指明各種安裝前設定,如鍵盤型別等
命令段中的命令:
.必備命令
authconfig:認證方式設定
authconfig--useshadow--passalgo=sha512
bootloader:bootloader的安裝位置及相關設定
bootloader--location=mbr--driveorder=sda–
append="crashkernel=autorhgbquiet"
keyboard:設定鍵盤型別
lang:語言型別
part:建立分割區
rootpw:指明root的密碼
timezone:時區
.可選命令
install OR upgrade
text:文字安裝介面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安裝完成後為系統建立新使用者
url:指明安裝源
key –skip跳過安裝號碼,適用於rhel版本
.程式包段:
指明要安裝的程式包組或程式包,不安裝的程式包等
程式包段指安裝了哪些包,
@開頭的是包組
不是@的是一般的包
--減號,是指把包組中的某個包去掉
例子如下
%packages
@group_name
package
-package
%end
注意,桌面包組,desktop預設是GNOME包組,如果桌面端安裝不成功,安裝一下xorg-x11-server-Xorg這個包,桌面端依賴這個包
.指令碼段:
指令碼段分為安裝前和安裝後指令碼段
%pre:安裝前指令碼,安裝作業系統前,初始化環境
執行環境:執行於安裝媒介上的微型Linux環境
%post:安裝後指令碼,系統都安裝完成後才執行指令碼
格式如下
%post
指令碼
在這裡有一個地方需要注意,當CentOS7通過命令啟動system-config-kickstart時,選擇包的時候可能出現如下報錯,看不到包的資訊
解決辦法:
設定光碟的yum源,修改yum 的repo id為development,這個是系統指定的,一般情況下repo id可以隨便指定,只要是沒有空格隔開就可以,但在要用system-config-kickstart命令來選擇包是,id一定要設定為development。如下截圖
3 自動化安裝
本文將介紹兩種自動化安裝的方式:半自動化和本地自動化
3.1 半自動化安裝
半自動化安裝,啟動的方式通過光碟進行啟動,這裡有兩種方式:1. 本地光碟直接作為包的來源 2. 包在其他路徑上,如http伺服器上
3.1.1 安裝包為本地
1.通過system-config-kickstart這個工具在圖形介面客製化ks檔案,這裡要實現的是半自動化的安裝,需要在ks檔案裡指定安裝包的路徑,用原生的光碟啟動
2.在虛擬機器中選擇好光碟後,啟動虛擬機器。注意,7安裝的記憶體要大於1024M,否則會出現空間不足的問題,無法安裝。
預設情況下,6和7通過光碟啟動的選單介面如下截圖
6的啟動選單頁面如下截圖
7的啟動選單頁面如下截圖
3.編輯好ks檔案,這個ks檔案就是用來做自動化安裝的,指導機器安裝ks檔案裡的語句進行安裝,半自動化的時候,這個檔案的路徑要 人為指定路徑,在開機的選單處輸入特定按鍵後進行指定(如下兩張截圖的方法),然後才能載入ks檔案進行安裝
這裡要注意,首先要確保網路是通的,如果不用dhcp,也可以再ks檔案裡指定固定ip,和網路中的ftp伺服器在同一網段
看到這個介面,敲入Esc鍵,看到boot:輸入linux ks=進行指定ks路徑,如果放到ftp下,就寫全路徑
看到圖一的開機介面,按下tab鍵,UI看到vmlinuz initrd=initrd.img輸入ks=把ks檔案的路徑指出來,如下截圖是放到ftp下
指定好ks檔案後,系統就會安裝ks設定的安裝步驟一步步執行。最後安裝完成後進行重新啟動機器。注意,重新啟動機器這個步驟也是在ks檔案裡設定。
3.1.2 安裝包在http伺服器
這裡和安裝包在原生的區別是,需要製作一個光碟,這個光碟僅僅用了引導機器啟動,進入到啟動選單。同時要在一台http伺服器上將光碟直接掛到機器上
1.製作啟動光碟:
將光碟的isolinux這個目錄拷貝到本地/root/bootiso/下
cp -r /media/isolinux/ /root/bootiso/
編輯ks檔案
vim ks65min.cfg
在這個ks檔案裡,需要注意以下兩項
# Use network installation,設定http伺服器下yum源的路徑,如下
1
|
url --url= "http://172.18.50.75/os/6i386/" |
# Network information 網路設定,直接設定成靜態,或者是自動獲取,以下是直接設定成靜態ip的例子,原則是保證新增的機器ip和http在同一網段,能夠去存取http那台伺服器,
network --bootproto=static --device=eth0 --gateway=172.18.0.1 --ip=172.18.50.99 --nameserver=172.18.0.1 --netmask=255.255.0.0 --onboot=on
將這個檔案拷貝到原生的bootiso目錄下
1
|
cp /root/ks65min .cfg /root/bootiso/ |
編輯選單檔案,這裡需要注意的是,要指定ks檔案的路徑,注意,這裡因為把ks65min.cfg拷貝到了/root/bootiso/,這個目錄要被製作成啟動光碟,所以ks檔案的目錄寫出ks=cdrom:/ks65min.cfg
1
|
vim /root/bootiso/isolinux/isolinux .cfg |
如下
1
2
3
4
5
|
label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=cdrom: /ks65min .cfg |
2 啟動引導光碟
1
|
mkisofs -R -J -T - v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 386 boot" -b isolinux /isolinux .bin -c isolinux /boot . cat -o /root/centos65_boot .iso /root/bootiso/ |
centos65_boot.iso生成的這個光碟就可以實現半自動化安裝了,開機的時候,不需要在指定ks檔案的路徑了,這裡所謂半自動化安裝,是因為,還需要指定光碟才能安裝。
3.2 本地自動化安裝
全自動化安裝
1將光碟裡的所有檔案拷貝一份到本地系統
1
2
|
mount /dev/sr0 /media cp -r /media /root/fulliso |
2 刪掉.TBL檔案,mkisofs命令建立的時候,通過選項-T會自動生成
1
|
find /root/fulliso -name TRANS.TBL - exec rm {} ; |
3.repodata這個資料夾下除了comps.xml這個檔案要保留,是存放包組資訊的檔案,該資料夾的其他檔案都要刪除。是一個xml格式的檔案 ,建立的時候,依賴這個檔案來建立包組資訊。該目錄下目前只剩下字尾為comps.xml這個檔案,命令如下
1
|
find /root/fulliso/repodata2/ ! -name '*comps.xml' - type f - exec rm -rf {} ; |
4.根據createrepo這個檔案來建立yum源,在拷貝的fulliso這個目錄下,命令後面的./是指在哪個目錄下建立yum源.這一步要等3分鐘左右,出現Sqlite DBs complete表示完成,命令如下
1
|
createrepo -g repodata /43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps .xml ./ |
執行以上語句後,repodata資料夾就會建立出新的資料,如下
5. 6設定yum的kickstart檔案,這裡是直接複製一個ks檔案作為模板進行修改。或者直接在桌面端裡開啟終端命令視窗,執行命令system-config-kickstart進行客製化kickstart檔案按自己的安裝需求進行設定.
注意,將新生成的ks檔案放到/fulliso這個目錄,可以放置多個應答檔案,來實現不一樣的安裝,如ks6-desk.cfg,ks6-mini.cfg
6. 製作啟動選單,修改isolinux目錄下的isolinux.cfg這個檔案,這裡製作了四個選單,根據指定ks檔案來實現不一樣的安裝,如下截圖
到這裡,所有的準備檔案都完成了,接下來要製作成光碟
7. 製作成全量光碟,和半自動化2的的區別是這裡重新生成yum倉庫組態檔,把光碟的所有檔案都拷貝到新的目錄下,包括安裝包,之前只是拷貝光碟下的isolinux這個目錄下的內容,製作一個引導的選單,包放在了http等遠端端
這裡可以製作成整個6的光碟,只需要把安裝包都拷貝到同一Packages目錄下即可.
執行如下的語句製作.iso檔案
1
|
mkisofs -R -J -T - v --no-emul-boot--boot-load-size 4 --boot-info-table -V "CentOS 6.5 autoinstall" -bisolinux /isolinux .bin -c isolinux /boot . cat -o /root/auto65 .iso /root/fulliso/ |
這一步比較久,根據機器的效能決定時間快慢,大概要10分鐘
這樣製作完成後,這個就可以實現通過光碟實現全自動化的安裝
如果要做成u盤啟動,就用命令dd把生成的這個檔案拷貝到U盤下,實現同U盤來安裝系統,,假設U盤的識別為裝置/dev/sdf .命令如下
1
|
dd if = /root/auto65 .isoof= /dev/sdf |
然後裝機開機時,進入bios,將啟動項設定為U盤啟動即可
mkisofs選項
.-o指定映像檔案的名稱。
.-b指定在製作可開機光碟時所需的開機映像檔案。
.-c製作可開機光碟時,會將開機映像檔案中的no-eltorito-
catalog全部內容作成一個檔案。
.-no-emul-boot非模擬模式啟動。
.-boot-load-size 4設定載入部分的數量
.-boot-info-table在啟動的影象中現實資訊
.-R或-rock使用RockRidgeExtensions
.-J或-joliet使用Joliet格式的目錄與檔名稱
.-v或-verbose執行時顯示詳細的資訊
.-T或-translation-table建立檔名的轉換表,適用於不支援Rock Ridge Extensions的系統上
3.3 報錯解決
3.3.1 安裝65 mini 32位元系統
出現如下的報錯
在CentOS 6.X下不支援通過HDMI埠進行音訊輸出。 但是,支援主機板音訊埠。 出現錯誤資訊時,解決辦法:按OK繼續安裝作業系統。
3.3.2 CentOS7 桌面版安裝後問題
CentOS7 桌面版安裝後重新啟動出現如下的介面,解決辦法是依次按 1--》2--》c--》c然後重新啟動機器就能解決
3.3.3 CentOS 7 記憶體不夠
如設定為1024M時,出現如下的報錯,解決辦法是將centOS7通過該PXE安裝最小記憶體調整為1100M
卡在以下這一步驟
然後5分鐘後出現如下的報錯,
最終結果如下,是異常安裝
4 小結
本文主要介紹了自動化安裝的相關概念,以及兩種自動化安裝系統的方法。如果工作環境不允許用網路的方式安裝系統,製作一個全量的自動化安裝映象則會大大降低工作量。
關於自動化安裝系統,還有兩種方式,PXE 和 cobbler方式。接下來將會有一個文章專門介紹這兩個安裝方式的原理,以及實現。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/147225.htm
相關文章