1. 程式人生 > >Linux學習31-運維自動化之自制啟動程式

Linux學習31-運維自動化之自制啟動程式

系統安裝過程

安裝程式

1. CentOS系統安裝

  • 名稱解釋 anaconda: CentOS圖形介面安裝嚮導程式
    1. gui:圖形視窗
    2. tui: 基於圖形庫curses的文字視窗

1.1 安裝程式啟動過程

  • 啟動介面選擇 預設啟動GUI介面 若是顯式指定使用TUI介面:向核心傳遞text引數即可

    1. 按tab鍵,在後面增加text 例如vmlinuz initrd=initrd.img text
    2. 按ESC鍵:boot: linux text
  • 系統安裝引導裝置 啟動安裝過程一般位於引導裝置;後續的anaconda及其安裝用到的程式包等可來自下面幾種方式:

    1. 本地光碟
    2. 本地硬碟
    3. NFS
    4. 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
    
    1. MBR:對應檔案 isolinux/boot.cat
    2. stage2: grub第二階段對應檔案isolinux/isolinux.bin
    3. 配置檔案:啟動選單對應檔案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 -
  • 進入選單各選項的方法
    1. 在選單欄上下鍵選擇,回車確認選擇。

    2. 如圖箭頭提示語句,上下鍵選擇對應選項後,按 [tab】鍵,可以編輯選項,提示語句對應配置檔案中的label 例如:選擇安裝項,按[tab]鍵,出現下圖所示畫面 在這裡插入圖片描述 而選擇救援模式 ,按[tab】鍵,顯示下圖介面 在這裡插入圖片描述 這兩項只是句尾不同,救援模式多出單詞rescue,所以編輯安裝模式,在詞尾加上rescue可以進入安全模式

    3. 選單介面按[esc]鍵,出現如下畫面,這裡暫時稱為[root:]介面,下面還要用到 在這裡插入圖片描述 直接輸入isolinux/isolinux.cfg檔案中對應label,進入對應專案,例如boot:rescue 就會進入救援模式

1.2 在[boot : ]介面引用其他引數安裝系統

  • 呼叫倉庫檔案實現安裝

    1. 找一個合適的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埠是否啟動
    
    1. 在需要安裝系統的機器上操作,啟動選單按[esc]鍵,進入[boot:]介面,配置網路,指定yum倉庫路徑,回車
    root:linux ip=172.20.50.205  netmask=255.255.0.0 repo=http://172.20.129.251/centos/6
    
    1. 進入如下畫面,要測試媒體,跳過 在這裡插入圖片描述

    2. 進入安裝畫面後,選擇語言,鍵盤佈局,裝置型別選擇基礎,然後彈出介面要格式化磁碟,選擇yes 在這裡插入圖片描述

    3. 指定主機名與網路,這裡網路不需要配了,第2步時候已經預設指定,設定主機名後,next

    4. 選擇時區,將左下角System clock uses UTC去掉,然後next

    5. 設定root口令,設定完成後,next

    6. 分割槽,根據情況選擇,這裡選擇預設分割槽Replace Existing,點選左下角Review and modify partitioning layout可以檢視預設分割槽結構,next

    7. 進入如下畫面,安裝GRUB,如果在箭頭所示項打鉤,可以設定grub密碼,加密選單項 在這裡插入圖片描述

    8. 選擇需要安裝的程式,這裡選擇最小化安裝 在這裡插入圖片描述

    9. 安裝重啟後,如果需要安裝圖形介面,要安裝工具包,首先配置yum源,在/etc/yum.repos.d/建一個以repo結尾的檔案,配置本地yum路徑,也就是光碟掛載點

    '倉庫配置檔案內容'
    [[email protected] ~]$cat  /etc/yum.repos.d/v9.repo
    [v9]
    baseurl=file:///mnt/
    gpgcheck=0
    
    1. 安裝桌面, 需要grouplist包組中的Desktop,安裝成功後,切換到圖形檢測即可
    [[email protected] ~]$yum groupinstall desktop
    

1.3 在[boot : ]介面手動指定安裝源

  • askmethod: 手動指定使用的安裝方法

    1. 與網路相關的引導選項:
      1. ip=IPADDR
      2. netmask=MASK
      3. gateway=GW
      4. dns=DNS_SERVER_IP
      5. ifname=NAME:MAC_ADDR
    2. 與遠端訪問功能相關的引導選項:
      1. vnc
      2. vncpassword=‘PASSWORD’
  • 安裝步驟

    1. 在選單介面按下[esc]進入[boot:]介面輸入boot: linux askmethod回車,選擇語言,鍵盤佈局,彈出介面如下所示 在這裡插入圖片描述

    2. 選擇URL安裝,出現配置網路介面,這裡選擇DHCP自動獲取,Manual configuration為手動配置,OK下一步 在這裡插入圖片描述

    3. 在如圖所示位置輸入遠端伺服器地址,後續進入安裝介面 在這裡插入圖片描述

2. 半自動化安裝

2.1 自動化安裝支援的安裝倉庫路徑

  • centos6
    1. DVD drive repo=cdrom :device
    2. Hard Drive repo=hd:device/path
    3. HTTP Server repo=http://host/path
    4. HTTPS Server repo=https://host/path
    5. FTP Server repo=ftp://username:[email protected] host/path <==支援使用者密碼驗證
    6. NFS Server repo=nfs:server:/path
    7. ISO images on an NFS Server repo=nfsiso:server:/path
  • centos7
    1. Any CD/DVD drive inst.repo=cdrom
    2. Hard Drive inst.repo=hd:device:/path
    3. HTTP Server inst.repo=http://host/path
    4. HTTPS Server inst.repo=https://host/path
    5. FTP Server inst.repo=ftp://username:[email protected] host/path
    6. NFS Server inst.repo=nfs:[options:]server:/path

2.2 自動化安裝需要的kickstart檔案,也叫應答檔案

  • 指明kickstart檔案的位置: ks=

    1. DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
    2. Hard drive: ks=hd:device:/directory/KICKSTART_FILE
    3. HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
    4. FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
    5. HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
    6. NFS server:ks=nfs:host:/path/to/KICKSTART_FILE
  • kickstart檔案的格式

    1. 命令段:指明各種安裝前配置,如鍵盤型別等
    2. 程式包段:在首尾中指明要安裝的程式包組或程式包,不安裝的程式包等
      1. %packages :程式包段首部,表示以下為新增項
      2. @group_name:@表示包組
      3. package:需要加入的包
      4. -package:’ - '表示解除安裝包
      5. %end:新增項結尾,與首部對應,成對出現
    3. 指令碼段:新增使用者自定義指令碼,實現自動化定義環境
      1. %pre: 安裝前指令碼 執行環境:運行於安裝介質上的微型Linux環境
      2. %post: 安裝後腳本頭部 執行環境:安裝完成的系統,指令碼在首尾中寫入
      3. %end:新增項結尾,若與程式段同時使用,一個結尾即可
  • 命令段中的命令: 1. 必備命令

    1. authconfig: 認證方式配置 authconfig --useshadow --passalgo=sha512
    2. bootloader:bootloader的安裝位置及相關配置 bootloader --location=mbr --driveorder=sda – append="crashkernel=auto rhgb quiet"
    3. keyboard: 設定鍵盤型別
    4. lang: 語言型別
    5. part: 建立分割槽
    6. rootpw: 指明root的密碼
    7. timezone: 時區
  1. 可選命令 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檔案的方式
    1. 直接手動編輯 依據某模板修改
    2. 可使用建立工具:system-config-kickstart 依據某模板修改並生成新配置/root/anaconda-ks.cfg
    3. 檢查ks檔案的語法錯誤:ksvalidator ksvalidator /PATH/TO/KICKSTART_FILE

2.3 應答檔案文字介面格式

  1. 參考作業系統安裝後生成的anaconda-ks.cfg檔案來製作應答檔案
[[email protected]  ~]$ls  
anaconda-ks.cfg
'複製一份來製作應答檔案,這裡命名為centos.cfg'
[[email protected]  ~]$cp anaconda-ks.cfg   centos.cfg
  1. 製作一個配置檔案,後續實驗用
'拿第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                                          <==自編內容收尾
  1. 寫好配置檔案將其放在公共目錄中,這裡選擇放在http遠端源目錄中
[[email protected] ~]$scp centos.cfg 172.20.129.251:/var/www/html/ks/
  1. 安裝語法檢查工具
[[email protected]  ~]$yum install system-config-kickstart
  1. 檢查語法
[[email protected]  ~]$ksvalidator /var/www/html/ks/centos.cfg

2.4 在圖形介面修改和編制應答檔案

在圖形介面輸入命令system-config-kickstart彈出介面如下,可以將系統現有的應答檔案點選左上角file讀入修改,也可以手工填寫

  1. Basic Configuration 在這裡插入圖片描述
  2. Installation Metod,安裝方法 在這裡插入圖片描述
  3. Boot Loader Options 選擇install new boot loader。需要設定GRUB密碼可以選填GRUB Options設定
  4. Partition information 分割槽資訊 在這裡插入圖片描述
  5. Network Configuration網路獲取,可以手動指定 在這裡插入圖片描述
  6. Authentication驗證方法,預設就可以
  7. Firewall Configuration防火牆和SElinux選項,可以禁用或啟用
  8. Display Configuration是否安裝圖形環境,不安裝去掉對勾即可
  9. Package Selection選擇需要安裝的包,在CentOS7中有BUG需要將本機yum倉庫配置檔名改為[development]
  10. Pre-installation Script安裝前指令碼
  11. Post-installation Script安裝後腳本 在這裡插入圖片描述
  12. 儲存到指定目錄即可。

2.5 半自動化安裝

  1. 光碟引導時,在載入畫面按[esc]進入光碟選單,再按[esc]進入[boot:]介面。 安裝CentOS7需要用CentOS7光碟,CentOS6使用CentOS6光碟 另外如果安裝圖形介面記憶體需要大於1G另外如果安裝圖形介面記憶體需要大於1G
  2. 利用應答檔案安裝系統在[boot : ]介面輸入如下內容,回車,等待安裝完成即可
boot:linux ks=http://172.20.129.251/ks/centos.cfg  ip=172.20.50.205 netmask=255.255.0.0

3. 自制啟動程式

  • 系統光碟中isolinux目錄列表

    1. solinux.bin 光碟載入程式,在mkisofs的選項中需要明確給出檔案路徑,這個檔案屬於SYSLINUX專案
    2. isolinux.cfg isolinux.bin的配置檔案,當光碟啟動後(即執行isolinux.bin),會自動去找isolinux.cfg檔案
    3. vesamenu.c32 是光碟啟動後的安裝圖形介面,也屬於SYSLINUX專案,menu.c32版本是純文字的選單
    4. Memtest 記憶體檢測,這是一個獨立的程式
    5. splash.jgp 光碟啟動介面的背景圖
    6. vmlinuz 核心映像
    7. initrd.img 是ramfs (先cpio,再gzip壓縮)
  • 建立引導光碟

    1. 建兩個目錄,一個放載入程式,一個放應答檔案
    [[email protected]  /data]$mkdir /data/boot
    [[email protected]  /data/boot]$mkdir  /data/ksdir
    
    1. 將光碟中載入程式放到此目錄中
    [[email protected]  /data/boot]$cp -r /misc/cd/isolinux/  .
    
    1. 將應答檔案放入ksdir中
    [[email protected]  /data/boot]$mv centos.cfg ksdir/
    
    1. 定製安裝選單,修改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
    
  1. 將以上內容刻錄成光碟,輸入以下命令,其中/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/
    
  2. 將生成的映象檔案拷貝到windows中

    [[email protected]  ~]$sz boot.iso
    
  3. 在需要安裝系統的主機上掛載此映象檔案,進入安裝目錄,選擇對應項進行安裝

  • 建立U盤啟動盤

    1. 將生成的映象檔案,轉換為U盤可以識別的格式
    [[email protected]  ~]$isohybrid boot.iso 
    
    1. 生成的映象檔案寫入U盤中
    [[email protected]  ~]$dd if=boot.iso of=/dev/sdb
    dd if=/dev/sr0 of=/dev/sdb
    
  • mkisofs命令選項

    1. -o:指定映像檔案的名稱。
    2. -b:指定在製作可開機光碟時所需的開機映像檔案。
    3. -c:製作可開機光碟時,會將開機映像檔案中的 no-eltorito-catalog 全部內容作成一個檔案。
    4. -no-emul-boot:非模擬模式啟動。
    5. -boot-load-size 4:設定載入部分的數量
    6. -boot-info-table:在啟動的影象中現實資訊
    7. -R 或 -rock:使用 Rock RidgeExtensions
    8. -J 或 -joliet:使用 Joliet 格式的目錄與檔名稱
    9. -v 或 -verbose:執行時顯示詳細的資訊
    10. -T 或 -translation-table:建立檔名的轉換表,適用於不支援 Rock Ridge Extensions 的系統上

官方文件:《Installation Guide》