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 

posted @ 2018-08-30 14:57  乐章  阅读(5622)  评论(1编辑  收藏  举报