1. 程式人生 > 實用技巧 >PXE&Cobbler全自動系統安裝

PXE&Cobbler全自動系統安裝

1. DHCP上的一些PXE的配置

1.1 dhcp配置檔案中的引數

  • filename:指明引導檔名稱,類似於一種基於網路引導時使用的bootloader檔案
  • next-server:指明引導檔案所在的服務主機的IP地址

1.2 配置示例

  • filename "pxelinux.0";
    • 一般都會提供這個檔案,這個檔案是pxe自己提供的
  • next-server 172.18.100.6;
    • next-server指向的就是tftp伺服器的地址
  • 注意:檔案是相對於tftp伺服器的根路徑的

1.3 關於tftp

  • next-server所在的檔案伺服器一般是tftp伺服器
  • tftp:trivial ftp,通過udp協議提供服務
  • 監聽埠:69/udp

2. PXE詳解

2.1 PXE簡介

PXE:preboot excution environment(與啟動執行環境),是Intel公司研發的一種技術

讓任何一臺沒有安裝作業系統的主機,能夠完成基於網路引導的安裝及啟動操作

2.2 PXE的工作流程

1)前提:

  • 客戶端主機啟動時,網絡卡必須支援網路引導機制
  • 要將網絡卡調整為第一引導啟動裝置
  • 客戶機記憶體要大於或等於2G

2)工作流程

主機被喚醒後,開始載入網路引導應用時,此網絡卡會通過在本地區域網中廣播一條rarp協議從dhcp伺服器那裡獲得一個IP地址;

獲得IP地址後,還會從DHCP那裡獲得一個檔名和一個檔案伺服器地址,隨後,它會去找那個tftp檔案伺服器,去載入那個對應的檔案;

等所需要的檔案載入完成後,其會被在記憶體中展開,而後基於此檔案可以去載入一個核心檔案,此核心檔案也一樣會通過這個tftp檔案伺服器獲取;載入核心通常還需要initrd虛根來完成對真實根所在的裝置的驅動的載入,這一切操作都要通過這個tftp檔案伺服器來實現;

等載入完成後,這個核心檔案通常是專用於為系統安裝所設定的,因此,這個核心檔案還需要去基於網路(通過配置在核心上的IP地址)把自己扮演成某種協議的客戶端去載入一個能夠啟動安裝程式的程式包(之前獲得的IP地址是網絡卡上的IP地址,而不是核心上的IP地址);

而後在本地完成安裝並啟動那個應用程式,而此程式已經不在這個tftp伺服器上了;通常是一個基於tfp或者http獲取nfs等服務所提供的一個yum倉庫,通過這個yum倉庫來載入安裝程式,以及這個這個安裝程式啟動以後,很可能要讀取kickstart檔案,並根據kickstart檔案的內容解決依賴關係後,基於這個yum倉庫完成後續的所有安裝過程。

3. PXE在CentOS7上的配置

3.1 PXE大概的工作過程

  1. dhcp:獲取ip/netmask、gw、dns;filename、next-server
  2. tftp server:獲取bootloader、kernel、initrd等資訊
  3. yum repository:獲取與載入的核心所匹配的發行版的yum倉庫(可以通過ftp、http、nfs來提供)
  4. 最好還要提供一個kickstart檔案,以完成全自動化的安裝;若不需要全自動化安裝,則可以不提供kictstart檔案

3.2 在tftp server上安裝tftp-server

1)安裝軟體包

yum install tftp-server -y

2)啟動tftp

# CentOS6上:
chkconfig tftp on
service xinetd restart

# CentOS7上
systemctl start tftp.socket

3)佔用埠

  • 69/udp

4)預設的檔案根目錄

/var/lib/tftpboot/

3.3 在dhcp server上配置dhcp

option domain-name "hgzero.com";      # 搜尋域
option routes 192.168.10.9;           # 指明預設閘道器
option domain-name-server 172.18.0.1; # 指明nds伺服器地址

default-lease-time 43200;           # 預設的租約時間
max-leaase-time 86400;              # 最大租約時間
log-facility local7;                # 日誌儲存的裝置

subnet 192.168.10.0 netmask 255.255.255.0 {   # 定義子網和地址池
        range 192.168.10.101 192.168.10.120;  # 指明地址池範圍
        filename "pxelinux.0";                # 指明在tftp server上載入檔案的名稱
        next-server 192.168.10.9;             # 指明tftp server的地址
} 

3.4 提供一個yum倉庫

可以用httpd提供一個目錄,然後直接將光碟掛載到這個目錄,以直接將光碟當做yum倉庫

然後可以將本地的kickstart檔案複製到這個httpd提供的目錄中,或者儲存為 /var/www/html/kickstarts/centos7.cfg

要將kickstart檔案中url指向修改為: url --url="http://192.168.10.9/centos/7/x86_64/"

3.5 配置PXE(CentOS7上)

1)安裝syslinux

# pxelinux.0 這個檔案是由syslinux這個程式包所提供的,所以需要安裝syslinux包
yum install syslinux

2)複製一些檔案到tftp的根目錄下

# 或者可以直接將 /usr/share/syslinux/ 目錄下的所有內容都複製到 /var/lib/tftpboot/ 下
# 然後再把對應的vmlinuz及initrd.img檔案複製過來
cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/       
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img}    /var/lib/tftpboot/
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}   /var/lib/tftpboot/

3)建立pxelinux.cfg的目錄

# 在tftp server的預設目錄下常見pxelinux.cfg目錄
mkdir /var/lib/tftpboot/pxelinux.cfg/

4)建立default檔案並寫入內容

  • 在 /var/lib/tftpboot/pxelinux.cfg 目錄下建立 default 檔案並寫入以下內容
  • 這個檔案是用於顯示一個安裝介面
vim  /var/lib/tftpboot/pxelinux.cfg/default
    default menu.c32
    prompt 5     # 選擇時間為5秒鐘
    timeout 30   # 超時時間為30秒鐘
    MENU TITLE CentOS 7 PXE Menu        # 選單項的名稱,這是整個上面的大標題(只有MENU TITLE是固定的)

    LABEL linux                         # 每一個LABEL表示一個啟動條目,不同的啟動條目就是通過LABEL來區分
    MENU LABEL Install CentOS 7 x86_64  # 某一個可選擇的條目的標題,顯示的內容
    KERNEL vmlinuz                      # 使用的核心檔案的名稱
    # 指定initrd檔案、yum倉庫的地址,kickstart檔案的地址
    APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 
       ks=http://172.16.100.67/centos7.cfg
  • 注意:如果想讓安裝的過程自動進行,就要在default檔案中加入 inst.repo選項
vim  /var/lib/tftpboot/pxelinux.cfg/default
# 在APPEND中新增上:
  initrd.img  inst.repo=http://192.168.10.9/centos/7/x86_64

# 也可以在PXE介面鍵入tab鍵後手動修改
vmlinuz initrd=initrd.img ip=192.168.10.11 netmask=255.255.255.0 inst.repo=http://192.168.10.9/centos/7/x86_64/

3.6 多系統選擇安裝

1)分別掛載CentOS6和CentOS7的光碟映象

# 為CentOS6和CentOS7分別建立掛載目錄
mkdir /mnt/{centos6,centos7} -pv

# 分別掛載映象
mount -r /dev/sr0 /mnt/centos6
mount -r /dev/sr1 /mnt/centos7

2)為每個系統建立不同的目錄

# 在 /var/lib/tftpboot/ 下為每個系統建立單獨的目錄
mkdir  /var/lib/tftpboot/{centos6, centos7}

3)將對應作業系統型別的vmlinux和initrd.img複製到對應的目錄中

# 複製centos6的vmlinuz和initrd.img
cp /mnt/centos6/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/

# 複製centos7的vmlinuz和initrd.img
cp /mnt/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/

4)複製 /usr/share/syslinux/ 中的所有內容到 /var/lib/tftpboot/ 中

cp -r /usr/share/syslinux/*  /var/lib/tftpboot/

5)建立pxelinux.cfg目錄並寫入配置檔案

# 建立pxelinux.cfg目錄
mkdir pxelinux.cfg

# 建立default配置檔案,並寫入配置
vim pxelinux.cfg/default

default menu.c32
prompt 60
timeout 120
MENU TITLE Linux PXE Menu

LABEL linux 1
MENU LABEL Install CentOS7 x86_64
KERNEL centos7/vmlinuz
APPEND initrd=centos7/initrd.img inst.repo=http://172.16.0.201/centos7 ks=http://172.16.0.201:81/centos7.cfg

LABEL Linux 2
MENU LABEL Install CentOS6 x86_64
KERNEL centos6/vmlinuz
APPEND initrd=centos6/initrd.img inst.repo=http://172.16.0.201/centos6 ks=http://172.16.0.201:81/centos6.cfg

3.7 分享兩個kickstart檔案

  • 以下檔案都經過測試並能成功安裝系統,使用時要按需對檔案內容進行修改

1)能成功安裝CentOS7的kickstart檔案

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx

# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc
# Use network installation
url --url="http://172.16.0.201/centos7"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel

%packages
@^minimal
@core
@debugging
@development
chrony
vim
%end

2)能成功安裝CentOS6的kickstart檔案

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0
# System language
lang en_US.UTF-8
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai --isUtc
# Use network installation
url --url="http://172.16.0.201/centos6"
# System bootloader configuration
bootloader --location=partition --driveorder=sda --append="rhgb quite"
# Partition clearing information
zerombr
clearpart --all --initlabel
autopart
text

%packages
@base
vim

%end

4. Cobbler概述

Cobbler是多安裝樹的PXE環境,它是PXE的高階封裝

4.1 Cobbler核心術語

1)Distribution發行版

  • CentOS6.7,CentOS7.1(vmlinuz+initrd.img)
  • distro:表示一個發行版(標記一個發行版的最關鍵資源是kernel和ramdisk)
  • 單個系統安裝:
    • 特定系統:(pxeboot)vmlinuz,initrd.img
    • 特定系統安裝源:yum repository

2)Profile:distor+kickstart(Profile還有subprofile)

  • CentOS6 web
    • CentOS6 pxeboot + CentOS6 yum repo + kickstart_WEB
  • CentOS6 database
    • CentOS6 pxeboot + CentOS6 yum repo + kickstart_DB
  • CentOS5:
    • CentOS5 pxeboot + CentOS5 yum repo

3)System

  • 為特定主機指派特有的配置資訊

4.2 三個核心元件

  • repository
    • mirror
    • import
  • distribution
  • prifile

4.3 Cobbler依賴的服務

  • tftp
  • rsync
  • DHCP
  • DNS

5. Cobbler的安裝啟動與配置

5.1 Cobbler的安裝

1)元件

  • cobbler
  • cobbler-web:WEB GUI介面

2)安裝所依賴的服務

# epel源中有安裝包,直接yum安裝即可
yum install cobbler cobbler-web -y

yum install pykickstart debmirror httpd syslinux -y

# 還要手動裝上DHCP和tftp服務,配置好並啟動
# 要注意指定好DHCP配置檔案中的filename和next-server

5.2 Cobbler的啟動

1)啟動cobbler

# 先要將httpd、dhcp、tftp全啟動,httpd必須要啟動

service cobblerd start 

2)啟動後進行語法檢查

# 語法檢查是為了檢視還有哪些選項需要解決
 
cobbler check   # 檢查配置檔案

3)安裝cobbler check顯示的內容進行配置

# 1. 配置檔案: /etc/cobbler/settions
    server: 指定cobbler主機的IP地址(本機的可被人訪問的IP地址)
    next_server:指定tftp伺服器IP地址(本地主機)

# 2. 關閉SELinux

# 3. 啟動tftp,並設定開機自啟動
    chkconfig tftp on
    # 修改 /etc/xinetd.d/tftp,將其中的disable的值改為no,使其開機自啟動
    # 重啟超級守護程序
    systemctl restart xinetd.service

# 4. 啟動rsync
    systemctl start xinetd.service

# 5. 複製 /usr/share/syslinux/{pxelinux.0, menu.c32} 檔案至 /var/lib/cobbler/loaders/目錄中
###也可以將syslinux目錄中的內容全部複製過去

# 6. 設定預設密碼
    openssl passwd -1 salt $(openssl rand -hex 4)
    vim /etc/cobbler/settings
        default_password_crypted:  "自己設定的密碼"

# 7. 配置並啟動dhcp伺服器

5.3 Cobbler的配置

  • 注意:每一次修改之後都要做 cobbler sync

1)將安裝光碟掛載到本地

2)配置kickstart檔案

  • 將kickstart檔案放置在 /var/lib/cobbler/kickstarts/ 目錄下
  • 修改kickstart檔案中的url項,使其指向cobbler主機

3)匯入系統

cobbler  import  --path=/mnt  --name="CentOS-6.7-x86_64"  --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg
# 引數說明:
    --path=指明匯入的位置
    --name=指明顯示的系統名
    --kickstart=指明kickstart檔案的路徑(這個檔案一般放置在/var/lib/cobbler/kickstart/ 目錄中)

# 說明:這時所建立的系統在 /var/www/cobbler/ks_mirror/ 目錄下

4)檢視

# 檢視所有已經建立好的distro
cobbler distro list 

# 檢視所有已經建立好的profile
cobbler profile list 

# 同步
cobbler sync 
# 同步所做的事就是在/var/lib/tftpboot/pxelinux.cfg/下建立了一個default檔案,並且每次同步自動更新

5)建立profile檔案

# 檢視自動生成的profile檔案
cobbler profile list 

# 刪除指定的的profile
cobbler profile remove --name=CentOS-6.7-x86_64  

cobbler profile add --name=CentOS-6.7-x86_64 --distro=CentOS-6.7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg
# 引數:
     --name= 建立的profile的名字
     --distro= 基於哪個distro來建立
     --kickstart= 使用哪個kickstart檔案

# 同步
cobbler sync

6. cobbler-web的安裝和使用

6.1 安裝cobbler-web

cobber-web是基於Django框架所研發

yum install cobbler-web -y

6.2 認證cobbler_web使用者

1)使用authn_configfile模組認證cobbler_web使用者

# 1. 配置載入authn_configfile模組
vim /etc/cobbler/modules.conf
    [authentication]
    module = authn_configfile

# 2. 建立認證檔案/etc/cobbler/user.digest,並新增所需使用者
htdigest -c /etc/cobbler/user.digest Cobbler hgzerowzh
    Cobbler表示是realm,注意cobbler_web的realm只能為Cobbler
    hgzerowzh是新增的使用者
    # 注意:新增第一個使用者時,需要為htdigest命令使用 -c 選項,後續新增其他使用者時不能再次使用

# 3. 重啟cobbler服務
systemctl restart cobblerd

# 4. 通過 http://IP地址/cobbler_web 來進行訪問

2)使用auth_pam模組認證cobbler_web使用者

# 1. 配置使用authn_pam模組
vim /etc/cobbler/modules.conf
    [authentication]
    module = authn_pam

# 2. 新增系統使用者,使用者名稱和密碼按需設定
useradd cobadmin
echo "shitshit" | passwd --stdin cobadmin

# 3. 將cobadmin使用者新增至cobbler_web的admin組中
    # 修改/etc/cobbler/user.conf檔案,將cobadmin使用者名稱新增為admin引數的值即可
    [admins]
    admin = "cobadmin"

# 4. 重啟cobbler服務
systemctl restart cobblerd

# 5. 通過 http://IP地址/cobbler_web 來訪問