pxe+http+kickstart實驗原理


Pxe+Centos7+KS

一、原理介紹

所謂的PXE是Preboot Execution Environment的縮寫,字面上的意思是開機前的執行環境。
要實現pxe,至少需要3個服務:

DHCP:提供網絡參數,告知客戶端TFTP位置
TFTP:提供boot loader及kernel file下載路徑
HTTP/FTP/NFS:三種架構提供內核文件

1、架構

pxe架構1

2、流程

pxe流程圖
注意:全部用的udp封裝

1)client向pxe server上的dhcp發送IP地址請求消息,dhcp檢測client是否合法,同事將pxe環境下的boot loader文件pxelinux.0的位置信息發給client
2)client向pxe server上的tftp請求pxelinux.0,tftp收到消息向client發送pxelinux.0大小信息,試探client是否滿意,當tftp收到client發回的統一大小信息后,發送pxelinux.0.
3)client執行接收到的pxelinux.0

4)client向TFTP請求pxelinux.cfg文件(其實是目錄,里面放了啟動菜單,即grub的配置文件),TFTP將配置文件發回client,繼而client根據配置文件執行后續的操作

5)client向TFTP發送linux內核請求信息,TFTP發送內核

6)client向TFTP發送根文件請求信息,TFTP接受到消息之后返回linux根文件系統

7)client加載linux內核(啟動參數已經在4中的配置文件中設置好了)。

8)client通過nfs/ftp/http下載系統安裝文件進行安裝,如果4中的配置文件指定了kickstart路徑,則回根據此文件自動應答安裝系統

3、文件的說明

vmlinuz:核心文件(kernel file);
initrd.img:開啟過程中核心組件的參數;
isolinux.cfg --> demo:開機pxe選擇參考;

二、部署

首先完成准備工作,然后開始安裝DHCP、TFTP,接着提供bootloader及配置文件,掛着光盤把內核文件copy到tftp目錄,部署httpd提供文件服務,設置菜單及提供系統安裝軟件

1、准備工作

 systemctl stop firewalld
 systemctl disable firewalld
 setenforce 0
 sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config 

  

2、安裝軟件

yum install dhcp tftp-server xinetd syslinux httpd 

  

3、部署dhcp

1)拷貝配置文件

cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

  

2)主要修改配置文件

subnet 10.211.55.0 netmask 255.255.255.0 {
  range dynamic-bootp 10.211.55.100 10.211.55.120;
  option domain-name-servers 10.211.55.4;
#  option domain-name "zhangxingeng";
  option subnet-mask 255.255.255.0;
  option routers 10.211.55.4;
#  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
  next-server 10.211.55.4; #<==這個就是tftp地址         
  filename "pxelinux.0";   #<==告知從tftp根目錄獲取bootloader文件
}

  

另外dhcp配置文件可以做綁定,用Mac綁定某台主機的ip地址

host clientA{     #<==可以綁定某台主機的ip地址,用mac綁定
        hardware ethernet 00:0C:29:83:A2:10;      
        fixed-address 10.211.55.4;
}
ddns-update-style interim;

  


3)啟動服務

systemctl start dhcpd
systemctl enable dhcpd

  

4、部署tftp

1)編輯配置文件

從流程得知boot loader文件pxelinux.0以及內核相關的配置文件(目錄pxelinux.cfg下)主要都是由TFTP來提供的

vim /etc/xinetd.d/tftp

  

vim /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot   #<==這個就是tftp目錄
        disable                 = no                     #<==開啟tftp只需改為”no“
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

  

TFTP是由xinetd這個super daemon所管理的,因此設定好TFTP之后,要啟動的是xinetd;

2)啟動服務

systemctl start xinetd tftp
systemctl enable xinetd
systemctl enable tftp

  

3)服務驗證

netstat -untlp

  


觀察有沒有監聽69端口

5、提供bootloader機配置文件

yum -y install syslinux

cp /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /var/lib/tftpboot

  

menu.c32:圖形化菜單
vesamenu.c32:圖形化菜單
pxelinux.0:是bootloader
pexlinux.cfg: 開機菜單設定

5、部署http服務

1)掛載光盤

mkdir /media/cdrom
mount -o exec /dev/cdrom /media/cdrom
mkdir /var/www/html/centos7
mount --bind /media/cdrom /var/www/html/centos7

  

2)啟動服務

systemctl restart httpd
systemctl enable httpd

  

3)web端驗證

訪問http://10.211.55.4/centos7
可以查看到掛在光盤的文件列表

7、設置菜單

1)拷貝內核文件

mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/centos7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /var/www/html/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /var/www/html/centos7/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/

  

vmlinuz:是可引導的、壓縮的內核
initrd.img:是一個小的映象, 放的是和啟動相關的驅動模塊。通常的步驟是先啟動內核,然后內核掛載initrd.img,並執行里面的腳本來進一步掛載各種各樣的模塊。
boot.msg:好像是開機信息等,不太清楚,望指教
splash.png:光盤啟動界面的背景圖,沒啥用

注意:pxelinux.cfg是個目錄,可以放置默認的開機選項,也可以針對不同的客戶端主機提供不同的開機選項。可以在pxelinux.cfg目錄內建立一個名為default的文件來提供默認選項。

2)設置菜單

vim /var/lib/tftpboot/pxelinux.cfg/default

  

[root@centos7-6-1 isolinux]# vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 60
prompt 1
display boot.msg
menu title ########## PXE Boot Menu ##########
label 1
menu label ^1) Install CentOS 7-6   #菜單文字
menu default        #表示開機光標一開始停留在label上
kernel vmlinuz      #<==#內核文件路徑,相對路徑是從/tftpboot開始的
append initrd=initrd.img inst.repo=http://10.211.55.4/centos7
                    #內核啟動選項,其中initrd的路徑,還有其他的stage2文件 
ks=http://10.211.55.4/ks.cfg
                    #ks路徑 

  

                          

三、kickstart實現無人值守批量安裝

1、拷貝ks文件並授權

cp -a ~/anaconda-ks.cfg /var/www/html/ks.cfg
chmod +r /var/www/html/ks.cfg

  

2、編輯ks配置文件

cat /var/www/html/ks.cfg

  

[root@localhost pxelinux.cfg]# 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512 --enablefingerprint
# Install OS instead of upgrade
install
# Use CDROM installation media
# cdrom
# Use text mode install
text
# Use network installation
url --url="http://10.211.55.4/centos7"
# Firewall configuration
firewall --enabled --service=ssh
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
network  --bootproto=dhcp --device=eth0 --activate
network  --hostname=localhost.localdomain
# Reboot after installation
reboot
# Root password
rootpw --iscrypted 6d/QQHF.8MAgw
# SELinux configuration
selinux --enforcing
# System services
services --enabled="chronyd"
# System timezone
timezone America/New_York --isUtc
user --groups=wheel --name=zhangxingeng --password=6d/QQHF.8MAgw --iscrypted
# X Window System configuration information
xconfig  --startxonboot
# System bootloader configuration
bootloader --append="rhgb quiet crashkernel=auto" --location=mbr --driveorder="sda" --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --drives=sda
# Disk partitioning information
part pv.65 --fstype="lvmpv" --size=65035
part /boot --fstype="ext4" --size=500
volgroup VolGroup --pesize=4096 pv.65
logvol swap  --fstype="swap" --grow --maxsize=2016 --size=1008 --name=lv_swap --vgname=VolGroup
logvol /  --fstype="ext4" --grow --maxsize=51200 --size=1024 --name=lv_root --vgname=VolGroup
logvol /home  --fstype="ext4" --grow --size=100 --name=lv_home --vgname=VolGroup

%post
# Get interface up
ifdown eth0
ifup eth0
/usr/bin/chfn -f 'mac' zhangxingeng
mkdir -p /tmp/prl-tools-mnt
umount /dev/sr0
mount -t iso9660 -o exec /dev/sr0 /tmp/prl-tools-mnt
#EFImount -t msdos -o exec /dev/sr0 /tmp/prl-tools-mnt
mkdir -p /tmp/prl-tools-dir
mount -t iso9660 -o loop /tmp/prl-tools-mnt/prl-to*.iso /tmp/prl-tools-dir
echo
echo "Installing Parallels Tools, please wait..."
[ -d '/home/zhangxingeng' ] && ( HOME_DIR=/home/zhangxingeng/Desktop; mkdir -p "$HOME_DIR" && chown zhangxingeng:zhangxingeng "$HOME_DIR" );
cd /tmp/prl-tools-dir/
./install --install-unattended-with-deps --skip-rclocal-restore
umount /tmp/prl-tools-dir
rm -rf /tmp/prl-tools-dir
umount /dev/sr0
rm -rf /tmp/prl-tools-mnt
[ -e /tmp/sepolicy-devel.temp ] && rm /tmp/sepolicy-devel.temp
reboot
%end

%packages --ignoremissing
@base
@basic-desktop
@core
@debugging
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@gnome-desktop
@graphical-admin-tools
@graphics
@input-methods
@java-platform
@legacy-x
@network-file-system-client
@performance
@perl-runtime
@print-client
@remote-desktop-clients
@server-platform
@virtualization
@virtualization-client
@virtualization-platform
@x11
abrt-gui
authconfig
certmonger
checkpolicy
chrony
gcc
genisoimage
kernel-devel
kexec-tools
krb5-workstation
libXmu
make
mtools
nscd
nss-pam-ldapd
oddjob
pam_krb5
pam_ldap
pax
perl-DBD-SQLite
python
python-dmidecode
selinux-policy-devel
sgpio
system-config-firewall-base
wodim

%end

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

%end

  

轉載請注明出處:https://www.cnblogs.com/zhangxingeng/p/9560221.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM