Linux自動運維:使用 PXE & Kickstart 自動安裝 CentOS === ###### tags: `Linux` `PXE` - Maintained by [魏礼謙](https://www.facebook.com/profile.php?id=100002588260959) and [Cheng Che Huang](https://www.facebook.com/profile.php?id=100006791086269&ref=ts&fref=ts) - PXE = **P**reboot-E**x**ecution **E**nvironment ## 零. 基本思路 在大規模部署執行環境時,首先架設一台 PXE 伺服器經由網路提供作業系統安裝所需資源,當 PXE 客戶端使用網路開機時,會自動透過 FTP 協定連線到 PXE 伺服器把 Kickstart 安裝設定檔和作業系統安裝映像檔 (以下簡稱映像檔) 下載到本機,並按照設定檔自動安裝作業系統。 ### 執行流程 ```sequence Note left of PXE客戶端:開機 Note left of PXE客戶端:向DHCP服務要求IP位址 PXE客戶端->PXE伺服器:連接DHCP伺服器 Note right of PXE伺服器:DHCP服務\n分配IP PXE伺服器->PXE客戶端:回傳IP位址和TFTP伺服器位址 Note left of PXE客戶端:向TFTP伺服器\n要求PXE Bootloader PXE客戶端->PXE伺服器:連接TFTP伺服器 Note right of PXE伺服器:TFTP服務\n準備PXE Bootloader PXE伺服器->PXE客戶端:下載PXE Bootloader Note left of PXE客戶端:PXE Bootloader\n執行開機選項 Note left of PXE客戶端:向FTP伺服器\n要求Kickstart設定檔 PXE客戶端->PXE伺服器:連接FTP伺服器 Note right of PXE伺服器:FTP服務\n準備Kickstart設定檔 PXE伺服器->PXE客戶端:下載Kickstart設定檔 Note left of PXE客戶端:初始化安裝程序 Note left of PXE客戶端:向FTP伺服器\n要求作業系統安裝映像檔 PXE客戶端->PXE伺服器:連接FTP伺服器 Note right of PXE伺服器:FTP服務\n準備作業系統安裝映像檔 PXE伺服器->PXE客戶端:下載作業系統安裝映像檔 Note left of PXE客戶端:自動執行作業系統安裝 Note left of PXE客戶端:安裝完成 ``` ## 一. 下載所需工具 - 虛擬機軟體:[Virtualbox](https://www.virtualbox.org/wiki/Downloads) - 作業系統安裝映像檔:[CentOS-7-x86_64-Minimal-1511.iso](http://archive.kernel.org/centos-vault/7.2.1511/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso) - 作業系統安裝映像檔:[CentOS-6.8-x86_64-minimal.iso](http://archive.kernel.org/centos-vault/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso) ## 二. 建立 PXE 伺服器 ( 使用 CentOS 7 1511 ) ### 1. 在 Virtualbox 內安裝 CentOS 7 1511 虛擬機 - 配置三張網路卡,分別為 NAT(enp0s3) 、 Host-only(enp0s8) 、 內部網路(enp0s9) - 指定開機順序為 1. 光碟機開機 2. 硬碟開機 - 配置參考圖  - 啟動並手動安裝虛擬機 ### 2. 調整 PXE 伺服器網路介面卡設定 - 伺服器通常採用靜態網路設定,故首先停用會動態調整網路設定的==NetworkManager==服務,稍後(在第5.小節)啟用設定靜態網路環境的==network==服務 `$ sudo systemctl stop NetworkManager` `$ sudo systemctl disable NetworkManager` - 然後`$ cd /etc/sysconfig/network-scripts` ,接著: - 修改 ==ifcfg-enp0s3== 檔案內容如下 ```shell= TYPE=Ethernet BOOTPROTO=dhcp NAME=enp0s3 DEVICE=enp0s3 ONBOOT=yes ``` - 修改 ==ifcfg-enp0s8== 檔案內容如下 ```shell= TYPE=Ethernet BOOTPROTO=dhcp NAME=enp0s8 DEVICE=enp0s8 ONBOOT=yes ``` - 修改 ==ifcfg-enp0s9== 檔案內容如下 ```shell= TYPE=Ethernet BOOTPROTO=static NAME=enp0s9 DEVICE=enp0s9 ONBOOT=yes IPADDR=10.1.1.1 NETMASK=255.255.255.0 ``` 設定檔欄位涵義可參考:[Interface Configuration File (CentOS)](https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html) (英文) ### 3. 關閉防火牆服務 為簡化架設流程,避免防火牆擋住伺服器網路連線 :::warning !!關閉防火牆會讓伺服器沒有抵禦非法連線的能力!! 請儘量不要在機器有連上網際網路的情況下關閉防火牆 ::: - 關閉 ==firewalld== 服務 `$ sudo systemctl disable firewalld` `$ sudo systemctl stop firewalld` - 關閉 ==SELinux== 服務,修改 ==/etc/selinux/config== 檔案內容如下 ```shell= ... SELINUX=disabled #Here ... SELINUXTYPE=targeted ``` - 接著重啟 PXE 伺服器 `$ sudo reboot` - 確認 ==SELinux== 已經關閉 (Disabled) `$ getenforce` ### 4. 在 PXE 伺服器內安裝與設定 DHCP 服務、 FTP 服務、 TFTP 服務 **4.1** 首先安裝所需服務及工具 `$ sudo yum install dhcp tftp-server syslinux vsftpd xinetd` ,接著按照檔案相依性分別設定 DHCP 服務、 FTP 服務與 TFTP 服務 **4.2** **DHCP 服務**的設定 讓 PXE 客戶端使用網路開機後,能自動分配到IP位址,並得知 ==pxelinux.0== (PXE Bootloader) 檔案的網路位置 - 修改 ==/etc/dhcp/dhcpd.conf== 檔案內容如下 ```shell= subnet 10.1.1.0 netmask 255.255.255.0 { range 10.1.1.100 10.1.1.200; option routers 10.1.1.1; filename "pxelinux.0"; next-server 10.1.1.1; } ``` **4.3** **FTP 服務**的設定 FTP 服務負責把 kickstart 設定檔和映像檔內容提供給 PXE 客戶端 - 首先是 kickstart 設定檔的部分,編寫 ==/var/ftp/kickstart_centos7_1511.cfg== 檔案內容如下 - 針對*CentOS 6***需要**將 `xfs` **修改成** `ext4` ```shell= # version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password = "root" rootpw --iscrypted $6$cUZL21stZ2KFytWY$p7Kju/.wkeW/TSjGgvZQSFxBXqxOdqmB.l25CDcqqeqLbCpty6y1BVyfl2uK.IRFAnhEf1stNdUNPE1CoGs2H0 # Use network installation url --url="ftp://10.1.1.1/pub/centos7_1511" #7 #url --url="ftp://10.1.1.1/pub/centos6" #6 # System language lang en_US # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install(???) text firstboot --disable # SELinux configuration selinux --disabled # Reboot after installation reboot # System timezone timezone Asia/Taipei # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="xfs" --size=1024 #7 #part /boot --fstype="ext4" --size=1024 #6 part swap --fstype="swap" --size=1024 part / --fstype="xfs" --grow --size=1 #7 #part / --fstype="ext4" --grow --size=1 #6 %packages #7 #%packages --nobase #6 #@base @core %end ``` - 映像檔的部分,先在 FTP 服務的 ==/var/ftp/pub/== 目錄下新增要掛載映像檔的資料夾 `$ mkdir /var/ftp/pub/centos7_1511` - 掛載映像檔到 ==/var/ftp/pub/centos7_1511/== 目錄下 - 先在虛擬機加入映像檔 (相當於在實體機放入安裝光碟)  - 取得映像檔的名稱 `$ lsblk`  Linux中映像檔是屬於區塊裝置 (Block device) 檔案,可在 ==/dev== 目錄下被找到。根據 ==lsblk== 的結果,在本例中映像檔的完整路徑及名稱為 ==/dev/sr0== - 掛載映像檔 `$ sudo mount -t auto /dev/sr0 /var/ftp/pub/centos7_1511` - 為了讓 PXE 伺服器每次啟動後,可以自動掛載映像檔到 FTP 服務的目錄下,新增掛載設定到 ==/etc/fstab== 檔案內容如下 ```shell= ... /dev/sr0 /var/ftp/pub/centos7_1511 iso9660 defaults 0 0 ... ``` ==fstab==欄位說明可參考:[Mounting File Systems Automatically with /etc/fstab (radhat)](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Introduction_To_System_Administration/s2-storage-mount-fstab.html) (英文) - 確認映像檔掛載的情況 (注意 MOUNTPOINT 欄位) `$ lsblk`  - 完成後 ==/var/ftp/== 目錄示意圖  **4.4** **TFTP 服務**的設定 TFTP 服務負責提供 PXE Bootloader ==pxelinux.0== 、開機選項檔 ==default== 和 開機檔案 ==vmlinuz== 、 ==initrd.img== 給 PXE 客戶端使用。TFTP 服務是由 xinetd 服務管理,xinetd 只有當收到服務請求的時候才會將相應服務啟動,以減少系統資源占用 - 修改 ==/etc/xinetd.d/tftp== 檔案中 ==service tftp== 的 ==disable== 欄位如下 ```shell= service tftp { ... disable =no ... } ``` - 複製 ==pxelinux.0== 、 ==menu.c32== 、 ==vesamenu.c32== 這三個檔案到 TFTP 服務的 ==/var/lib/tftpboot/== 目錄下 `$ cp /usr/share/syslinux/pxelinux.0 /usr/share/syslinux/menu.c32 /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/` - 建立用來放開機選項檔的資料夾 `$ sudo mkdir /var/lib/tftpboot/pxelinux.cfg` - 複製映像檔提供的開機選項檔 ==isolinux.cfg== 到 TFTP 服務的 ==/var/lib/tftpboot/pxelinux.cfg/== 目錄下,並調其整讀寫權限 `$ sudo cp /var/ftp/pub/centos7_1511/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default` `$ sudo chmod 644 /var/lib/tftpboot/pxelinux.cfg/default` - 修改 ==/var/lib/tftpboot/pxelinux.cfg/default== 檔案內容如下 (*for* **CentOS-7-x86_64-Minimal-1511.iso** & **CentOS-6.8-x86_64-minimal.iso**) ```shell= ... timeout 30 #改成等待3秒,以節省等待時間 (optional) ... label linux menu label ^Auto Install CentOS 7 menu default #新增 kernel vmlinuz #新增 append initrd=initrd.img ks=ftp://10.1.1.1/kickstart_centos7_1511.cfg #新增 ... label check menu label Test this ^media & install CentOS 7 #menu default #刪除 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet ... ``` - 建立用來放開機檔案 ==vmlinuz== (Linux Kernel執行檔) 和 ==initrd.img== (initial ramdisk) 的資料夾 `$ sudo mkdir /var/lib/tftpboot` - 複製開機檔案 ==vmlinuz== 和 ==initrd.img== 到 TFTP 服務的資料夾下 `$ cp /var/ftp/pub/centos7_1511/isolinux/vmlinuz /var/ftp/pub/centos7_1511/isolinux/initrd.img /var/lib/tftpboot/` - 完成後 ==/var/lib/tftpboot/== 目錄結構  ### 5. 啟動所有 PXE 伺服器相關服務 - 啟動 **network 服務** `$ sudo systemctl enable network` `$ sudo systemctl start network` `$ sudo systemctl restart network` - 啟動 **DHCP 服務** `$ sudo systemctl enable dhcpd` `$ sudo systemctl start dhcpd` - 啟動 **TFTP 服務** `$ sudo systemctl enable xinetd` `$ sudo systemctl start xinetd` - 啟動 **FTP 服務** `$ sudo systemctl enable vsftpd` `$ sudo systemctl start vsftpd` ### 6. 在 virtualbox 調整 PXE 伺服器開機順序 - 將 PXE 伺服器關機 `$ sudo halt -p` - 重新指定開機順序為 1. 硬碟開機 - 配置參考圖  - 啟動 PXE 伺服器 - PXE 伺服器架設完成! ## 三. 建立 PXE 客戶端 - 配置一張網路卡,設定為內部網路 - 指定開機順序為 1. 硬碟開機 2. 網路開機 (即使用PXE) - 配置參考圖  - 啟動虛擬機 - 然後它就會像隻小貓咪一樣安靜的把系統安裝好 - 安裝完成後使用==帳號:root== ==密碼:root==登入即可使用 CentOS 7  -------- *2017/05/04,已測試 CentOS 7 1511,流程沒有錯誤。 有任何問題請回報給[魏礼謙](https://www.facebook.com/profile.php?id=100002588260959),將持續更新。*
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.