首頁 > 軟體

本地自動化安裝CentOS系統

2020-06-16 17:06:24

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


IT145.com E-mail:sddin#qq.com