1. 程式人生 > >通過PXE遠端安裝CentOS和Ubuntu系統

通過PXE遠端安裝CentOS和Ubuntu系統

PXE協議是Intel設計的協議,它可以使計算機通過網路啟動。協議分為client和server兩端,PXE client在網絡卡的ROM中,當計算機引導時,BIOS把PXE client調入記憶體中執行,並顯示出命令選單,經過使用者選擇後,PXE client將放置在遠端的作業系統安裝檔案下載到本地執行,無盤工作站就是通過PXE來啟動的。

PXE協議的成功執行需要解決一下兩個問題:
+ IP地址分配:可以用DHCP server來給PXE client分配一個IP地址,DHCP Server是用來給DHCP client動態分配IP地址的協議,不過由於這裡是給PXE client分配IP地址,所以在配置DHCP Server時,需要增加相應的PXE特有配置。
+ 下載Linux核心和根檔案系統

:PXE client所在的ROM中,已經存在了TFTP Client。PXE Client使用TFTP Client,通過TFTP協議到TFTP Server上下載所需的檔案。

1. 工作原理

PXE client是需要安裝Linux的計算機,TFTP Server和DHCP Server執行在另外一臺Linux Server上。Boostrap檔案、配置檔案、Linux核心以及Linux根檔案系統都放置在Linux Server上TFTP伺服器的根目錄下。PXE Client在工作過程中,需要三個二進位制檔案:bootstrap、Linux核心和Linux根檔案系統。
Bootstrap檔案是可執行程式,它向用戶提供簡單的控制介面,並根據使用者的選擇,下載合適的Linux核心以及Linux根檔案系統。

說明:
/tftpboot是tftp server的根目錄
/tftpboot/pxelinux.0是Bootstrap檔案,提供呼叫啟動選單的作用。
/pxeboot/initrd.img是核心引導檔案
/pxeboot/vmlinux是壓縮的Linux核心映象
/tftpboot/*.msg是各個引導模組的選單選項

2. 安裝步驟

首先需要配置PXE安裝的Server環境,在該伺服器上,需要安裝dhcp和tftp服務。

yum install -y dhcp tftp tftp-server nfs-utils httpd tcpdump

*關閉SELinux系統*:在使用tftp過程中,部分功能(tftp的檔案下載)會被系統防護軟體selinux遮蔽掉。在CentOS中SELinux預設是開啟的,所以需要修改配置檔案/etc/sysconfig/selinux

將SELinux關閉(需要重啟系統,設定方可生效),將其中的SELINUX=enabled改為SELINUX=disabled。也可以通過setenforce 0命令臨時將SELinux關閉,但是系統重啟後,SELinux依然隨系統啟動。

setenforce 0
sed -i "7s/enforcing/disabled/" /etc/selinux/config
cat /etc/selinux/config

*關閉系統防火牆*:執行命令如下:

service iptables stop && chkconfig iptables off

a. 配置tftp伺服器

tftp伺服器中存放著linux系統啟動時的核心映象和配置檔案。這裡只需要修改tftp-server的配置檔案/etc/xinetd.d/tftp,將內容修改為:

cat > /etc/xinetd.d/tftp <<EOF
service tftp
{
        disable                   = no
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -u nobody -s /tftpboot
        disable                 = yes
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
EOF
cat /etc/xinetd.d/tftp

建立tftp的根目錄,然後把所需的檔案都移動到該目錄中。

mkdir /tftpboot
chmod 777 /tftpboot

啟動tftp-server服務,並新增xinetd服務隨系統啟動:

service xinetd start
chkconfig xinetd on

檢視系統中的tftp是否啟動,使用命令netstat -a | grep tftp

b. 配置DHCP伺服器

安裝dhcp軟體包之後,修改配置檔案/etc/dhcp/dhcpd.conf為以下內容:

cat > /etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
authoritative;

allow booting;
allow bootp;
subnet 192.168.25.0 netmask 255.255.255.0 {
    range 192.168.25.30 192.168.25.100;
    option routers 192.168.25.1;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.25.1;
    default-lease-time 21600;
    max-lease-time 43200;
    next-server 192.168.25.1;
    filename "/pxelinux.0";

    host extra-host{
        hardware ethernet 00:0c:29:c0:a7:99;
        fixed-address 192.168.25.30;
    }
}
EOF
cat /etc/dhcp/dhcpd.conf

配置檔案帶註釋的版本:

ddns-update-style interim;  /*dhcp支援的dns動態更新方式*/
ignore client-updates;      /*忽略客戶端DNS動態更新*/
authoritative;   /*授權*/

allow booting;            /*支援PXE啟動*/
allow bootp;               /*支援boottp*/
subnet 192.168.129.0 netmask 255.255.255.0 { /*作用域*/
    range 192.168.129.30 192.168.129.78;          /*ip地址段範圍*/
    option routers 192.168.129.1;                         /*閘道器*/
    option subnet-mask 255.255.255.0;                /*子網掩碼*/     
    option domain-name-servers 203.103.24.68;   /*DNS伺服器的地址*/
    default-lease-time 21600;   /*租期,秒數*/
    max-lease-time 43200;       /*最大租期,秒數*/
    next-server 192.168.129.22;   /*TFTPServer的IP*/
    filename "/pxelinux.0";        /*Bootstrap檔案*/
}

預設情況下,dhcpd程序是以dhcp使用者執行,可能出錯,可以將/etc/init.d/dhcpd檔案中的程序使用者和使用者組修改為root。

sed -i "30s/user=dhcpd/user=root/" /etc/init.d/dhcpd
sed -i "31s/group=dhcpd/group=root/" /etc/init.d/dhcpd
head -n 31 /etc/init.d/dhcpd | tail -n2

檢視dhcpd程序的執行情況可以檢視\var\log\messages檔案。
一般需要將系統網絡卡的地址設定在dhcp設定的地址段中,才能夠正常的啟動dhcp服務。

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.25.1
NETMASK=255.255.255.0
EOF
cat /etc/sysconfig/network-scripts/ifcfg-eth0

啟動dhcp服務,並設定其隨系統啟動:

service dhcpd start
chkconfig dhcpd on

c. 配置httpd服務

在伺服器中針對httpd服務無需特殊配置,只需要將服務啟動,並設定為隨系統啟動即可。

service httpd start
chkconfig httpd on

3. 針對CentOS和Ubuntu不同的場景使用不同的配置

a. CentOS安裝配置過程

由於CentOS系統對PXE安裝方法支援的不夠完善,主要是需要單獨下載pxelinux.0檔案。這個檔案沒有包含在CentOS系統的安裝映象中。

#mkdir -p /tftpboot
#cp ~/pxelinux.0 /tftpboot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

\cp -rfv /mnt/cdrom/images/pxeboot/initrd.img /tftpboot
\cp -rfv /mnt/cdrom/images/pxeboot/vmlinuz /tftpboot
\cp -rfv /mnt/cdrom/isolinux/*.msg /tftpboot

mkdir -pv /tftpboot/pxelinux.cfg
cat > /tftpboot/pxelinux.cfg/default << EOF
default
prompt 1
timeout 30
display boot.msg
label linux
kernel vmlinuz
append ks=http://192.168.25.1/centos/ks_centos.cfg  initrd=initrd.img devfs=nomount ramdisk_size=9216
EOF

mkdir -pv /var/www/html/centos
cp -fv ~/ks_centos.cfg /var/www/html/centos
cp -rfv /mnt/cdrom/* /var/www/html/centos

注意:*.msg可以不拷,重點是initd.img和vmlinux,沒有核心無法引導系統。pxelinux.0並不是任何linux發行商提供的,syslinux也不在提供該檔案,可以從網上下載。

b. Ubuntu系統安裝配置

Ubuntu系統對PXE安裝方法的支援非常完善只需要將安裝映象中的部分檔案拷貝到tftp和web目錄中即可。

將install/netboot中的檔案全部複製到tftpboot目錄中。
新增httpd服務,在服務根目錄建立ubuntu目錄,將iso映象中的檔案都新增到ubuntu目錄中。

#mkdir -pv /tftpboot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

cp -rfv /mnt/cdrom/install/netboot/* /tftpboot
# later version than 12.04
sed -i '6s\append\append live-installer/net-image=http://192.168.25.1/ubuntu/install/filesystem.squashfs\' /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
sed -i '6s\append\append ks=http://192.168.25.1/ubuntu/ks_ubuntu.cfg\' /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
cat /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
# end of later version than 12.04

mkdir -pv /var/www/html/ubuntu
cp -rfv /mnt/cdrom/* /var/www/html/ubuntu
cp -fv ~/ks_ubuntu.cfg /var/www/html/ubuntu
ls -m /tftpboot /var/www/html/ubuntu

在選擇安裝映象時選擇enter mirror manual。分別填入192.168.25.1/ubuntu/

*應用擴充套件*
在使用PXE遠端安裝CentOS系統時,需要用到的軟體安裝包可以通過nfs檔案共享服務進行傳輸。nfs的配置過程如下:
一般要首先把光碟掛載在系統上,並將光碟中的檔案新增到nfs共享目錄中。執行流程如下:

mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

mkdir -pv /centos
cp -rf /mnt/cdrom/* /centos/

cat >> /etc/exports << EOF
/centos *(ro,sync)
EOF

exportfs -rv

啟動nfs服務,並設定為隨系統啟動

service rpcbind restart
service nfs start
chkconfig nfs on

在安裝CentOS系統的過程中,選擇軟體包來源時,填入的nfs伺服器的引數包括IP地址(192.168.25.1),檔案目錄(/centos)和掛載許可權(ro)。

KickStart是一種無人職守的安裝方法。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種引數,並生成一個名為ks.cfg的檔案;在其後的暗轉過程中,當出現要求填寫引數的情況時,安裝程式會首先去查詢KickStart生成的檔案,當找到合適的引數時,就採用找到的引數,當沒有找到合適的引數時,需要安裝者手動參與。
在使用無人職守的方式安裝系統時,只需要將使用system-config-kickstart軟體生成配置檔案ks.cfg即可。