1. 程式人生 > >PXE自動安裝Linux

PXE自動安裝Linux

PXE kickstart

PXE簡介

許多情況下我們手動安裝操作系統是不現實的,尤其是當數量較多的時候。這個時候就要借助其他的技術 了。PXE就是其中的一種。
PXE全稱是:Preboot Excution Environment 預啟動執行環境是由Intel公司研發的基於Client/Server的網絡模式,支持遠程主機通過網絡從遠端服務器下載映像,並由此支持通過網絡啟動操作系統 PXE可以引導和安裝Windows,linux等多種操作系統,這裏只說Linux不說Windows。
PXE的具體工作有些復雜,不過多介紹,有興趣的可以自行百度,這裏只說實現。以下全部基於虛擬機實現。VM14,Cent7.5

大體流程

1.環境準備

2.檢查防火墻和SELinux的設置,確保都是關閉的
3.安裝所需的必要軟件包並開啟對應的服務
4.準備安裝源
5.準備自動應答文件,並放到可以被訪問到的地方
6.配置DHCP服務並啟動
7.將必要的文件復制到相關目錄
8.修改啟動菜單,以及一些其他的配置文件
8.啟動測試

安裝過程

環境準備

首先準備至少兩臺虛擬機,其中一臺作為服務器使用。(基本所有配置操作都是在服務器上客戶端機器不需要配置。)還需要至少一個安裝源(系統安裝鏡像文件)
1.將兩臺虛擬機網卡配置為僅主機模式(主要是和外網隔離,以面影響實體機的DHCP服務)
2.關閉VMware的DHCP服務
在VMware主界面點擊“編輯→虛擬網絡編輯器”
在打開的界面中選中僅主機類型的連接並勾掉下面的使用本地DHCP服務(如果勾選框灰色,點擊更改設置給他管理員權限)如圖:

技術分享圖片
3.給服務器分配一個IP地址,地址建議為靜態地址。配置文件如下:

TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.11.2
PREFIX=24
GATEWAY=192.168.11.1
NAME=ens33
DEVICE=ens33
ONBOOT=yes

4.編輯Win下的虛擬網卡配置以便和虛擬機可以通信
打開控制面板→網絡和共享中心→更改適配器設置
通常僅主機的連接名稱為VMnet1
技術分享圖片

地址可以隨意分配,但確保此處地址是上一步分配的地址的網關。如果在虛擬機中可以ping通網關則說明配置沒有問題。

檢查服務器相關設置

確保SELinux和防火墻處於關閉狀態。

將/etc/selinux/config文件中的SELINUX=xxx改為SELINUX=disabled並重啟。
可以通過命令getenforce查看,如果是disabled或permissive即為關閉狀態
執行以下兩條命令確保關閉防火墻

systemctl stop firewalld
systemctl disable firewalld

以上是Cent7,如果是6的話
service iptables stop
chkconfig iptables off

安裝必要軟件

出於方便,軟件安裝全部使用yum進行安裝,如果沒有yum源的請自行配置。
執行以下命令安裝相關軟件並啟動服務,DHCP由於需要另外修改配置文件先跳過

yum install httpd dhcp syslinux tftp-server
systemctl start httpd tftp.socket
systemctl enable dhcpd tftp.socket httpd

使用ss -tan 確認TCP80端口已開啟
使用ss -unl 確認UDP69端口已開啟

準備安裝源

此次實驗我們通過HTTP作為安裝源,所以,只要將我們準備好的安裝鏡像掛載到HTTP目錄下可以訪問即可。具體目錄是/var/www/html/ 為了方便擴展還可以在此目錄下建立幾個文件夾,以存放不同版本的系統文件。
具體實現:
1.使用mkdir -p /var/www/html/Centos/7創建文件夾
2.將光盤掛載到/var/www/html/Centos/7目錄下
3.在/etc/fstab文件中添加自動掛載信息,通常為
/etc/sr0 /var/www/html/Centos/7 iso9660 default 0 0
4.使用df -h確認掛載信息
5.在主機使用瀏覽器訪問http://192.168.11.2/Centos/7 確認可以看到掛載的安裝文件

準備自動應答文件

自動應答文件是整個環節相當重要的部分(其實每一部分都很很重要)自動應答文件的生成可以通過在圖形界面下安裝system-config-kickstart包使用這個工具在圖形界面下生成,或者,系統安裝完成後默認在root家目錄有一個叫anaconda-ks.cfg的文件,也可以直接修改這個文件。由於圖形界面比較簡單,這裏直接修改anaconda-ks.cfg文件。其中以#開頭的行表示註釋,如果你沒有修改過此文件中的內容,那麽應該內容如下(中文為後加):
註:最小化安裝文件內容,如果是圖形界面,內容會有些許不同

#platform=86, AMD64, or Intel EM64T

#version=DEVEL
# System authorization information
auth --useshadow  --passalgo=sha512
# Install OS instead of upgrade#選擇升級還是安裝,install是安裝,upgrade是升級
install
# Use CDROM installation media#安裝介質,這裏是需要修改的地方
cdrom
# Use text mode install#使用圖形安裝還是文字界面,通常自動安裝我們不需要圖形
text
# Firewall configuration#防火墻選項,通常選擇關閉
firewall --disabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts=‘‘
# System language
lang en_US.UTF-8

# Network information#安裝後網絡配置信息,可以將onboot改為on,也可以順便指定一個hostname
network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network  --hostname=localhost.localdomain
# Reboot after installation#安裝之後重啟
reboot
# Root password# root賬號密碼,此處的密碼是加密後的密碼
rootpw --iscrypted $1$HwDDpzbI$JcacPj2.QTbRQgNWUP8hr1
# SELinux configuration#SELinux選項
selinux --disabled
# System services
services --enabled="chronyd"
# Do not configure the X Window System
skipx
# System timezone# 時區
timezone Asia/Shanghai
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
#Clear the Master Boot Record
#zerombr #清除MBR
# Partition clearing information
#clearpart --all --initlabel # 清空磁盤
# Disk partitioning information
#以下三行是分區信息,註意根據自己的情況進行修改。size單位是MB
#part swap --fstype="swap" --size=2048
#part / --fstype="xfs" --size=20480
#part /boot --fstype="xfs" --size=1024

#要安裝的包@開頭的是包組,沒有@的是單獨的包
%packages
@core
zsh

%end

%addon com_redhat_kdump --enable --reserve-mb=‘auto‘

%end

看起來很多內容,也有可能有很多不一樣,不過沒有關系,許多內容並不需要理解,需要改的地方並不多
大概以下幾項修改就可以了:
1.安裝介質即把cdrom改為以下內容

url --url="http://192.168.11.2/centos/7/"

2.防火墻和SELinux根據自己的需要選擇開啟或關閉
3.如果沒有zerombr和clearpart --all --initlabel,手動添加如果前面有#,去掉
4.去掉分區信息前的#
5.根據自己的需要選擇需要安裝的包,最小化只有一個core即可
6.將文件保存之後放到可以被HTTP訪問到的地方,如/var/www/html/,確保文件權限為644
7.在主機訪問http://192.168.11.2/anaconda-ks.cfg 如果可以成功訪問,說明此步驟OK

手動修改應答文件有時候可能並不是一個明智的選擇,如果沒有把握,使用圖形工具是更好的選擇
需要註意的是,註意應答文件和要安裝系統的對應,比如安裝6的系統請使用6生成應答文件

配置DHCP服務器

默認情況下DHCP服務在安裝完成之後配置文件是空的,也因此DHCP服務必須進行一定的配置才可以啟動,DHCP的服務配置文件路徑是:/etc/dhcp/dhcpd.conf,通過一個示例來看一下配置文件的 格式
網段:服務器可以分配的地址的網段,可以指定多個
掩碼:網段對應的掩碼
默認租期:以秒為單位默認的IP地址的租期
最長租期:客戶端可以請求一個租期,此項設定用於對此進行限制以秒為單位
地址池:服務器在可分配網段中可以分配的IP地址的範圍
DNS:用於客戶機從DHCP服務器獲取的DNS地址
如下一個示例:

# 指定從DHCP服務器獲取的DNS地址
option domain-name-servers 114.114.114.114
# 默認IP地址的租期
default-lease-time 600;
# 最長租期
max-lease-time 7200;
# subnet用來指定網段,netmask是掩碼
subnet 192.168.11.0 netmask 255.255.255.0
{
    # 使用range指定IP地址池
    range 192.168.11.3 192.168.11.124;
}

對於一個DHCP服務器以上內容足夠了,不過對於PXE還少了兩個重要的選項,
next-server 192.168.11.2
filename "pxelinux.0"
next-server用來指定TFTP服務器的位置
filename用來指定要訪問TFTP服務器上的哪個文件
也就是說在這裏我們的DHCP服務器的配置文件是這樣的

option domain-name-servers 114.114.114.114
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.11.0 netmask 255.255.255.0
{
    next-server 192.168.11.2;
    filename "pxelinux.0";
    range 192.168.11.3 192.168.11.124;
}

接下來使用systemctl start dhcpd啟動dhcp服務,使用ss -unl查看67端口是會否已經開啟

將相關文件復制到TFTP共享目錄

TFTP的共享目錄在/var/lib/tftpboot/下,考慮到靈活性依舊可以給不同版本的系統單獨的目錄
這裏創建一個7的目錄
復制光盤目錄中isolinux下的initrd.img和vmlinuz到/var/lib/tftpboot/7目錄下
在共享目錄下創建一個名為pxelinux.cfg的文件夾並將光盤目錄中isolinux下的isolinux.cfg復制到pxelinux.cfg目錄下並且命名為default
將/usr/share/syslinux/menu.c32復制到/var/lib/tftpboot目錄下,此文件是菜單背景文件
將/usr/share/syslinux/pxelinux.0復制到/var/lib/tftpboot目錄下
如果只有一個系統,應該有5個文件兩個目錄,結構如下

[root@DHCP_Svr]/var/lib/tftpboot# tree
.
├── 7
│?? ├── initrd.img
│?? └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
    └── default

最後一步

修改default文件,從光盤復制過來的文件有很多內容,不夠大部分我們並不需要,參考下面的內容就可以了

#就是剛才復制到菜單文件
default menu.c32
#超時時間,就是菜單倒計時
timeout 600
display boot.msg

# 啟動菜單的具體配置
# menu label 用來指定菜單名稱,可以自定義,^符號用來確定光標位置,
# 同時其後的字母也是調到對應菜單的快捷鍵
# kernel指定內核文件路徑,由於我們放在了文件夾中所以路徑是7/vmlinuz
# 指定initrd的路徑,以及ks應答文件文件的路徑
# 務必確保應答文件可以訪問
label linux
  menu label ^Install CentOS 7
  kernel 7/vmlinuz
  append initrd=7/initrd.img ks=http://192.168.11.2/anaconda-ks.cfg

# 本地硬盤啟動
# menu default表示此項菜單為默認菜單,由於自動安裝的風險,建議將本地啟動作為默認啟動
label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff

menu end

啟動測試

將另一臺虛擬機網卡同樣配置為僅主機,網卡使用自動獲取IP。
最後,確認安裝源,以及應答文件可以訪問,且default文件中路徑配置正確。
確認防火墻以及SELinux處於關閉狀態。
確認無誤的話就可以開機進行測試了。GOOD LUCK

PXE自動安裝Linux