什么是PXE

  PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

  严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。

PXE工作流程

1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

4. PXE Client 取得pxelinux.0 文件后之执行该文件;

5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统;

6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

x86docker安装青龙 电脑安装x86_IP

开始部署

环境介绍

[root@master ~]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
[root@master ~]# uname -r
3.10.0-1127.el7.x86_64
[root@master ~]# uname -m
x86_64
[root@master ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.60  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe44:15d7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:44:15:d7  txqueuelen 1000  (Ethernet)
        RX packets 19278  bytes 24593071 (23.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6365  bytes 478120 (466.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.60  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fe44:15e1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:44:15:e1  txqueuelen 1000  (Ethernet)
        RX packets 60890  bytes 3685732 (3.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 260684  bytes 389641148 (371.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 108  bytes 5724 (5.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 108  bytes 5724 (5.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

安装DHCP服务

[root@master ~]# yum install dhcp -y
[root@master ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200;  #可分配的起始IP-结束IP
        option subnet-mask 255.255.255.0;    #设定netmask
        default-lease-time 21600;                   #设置默认的IP租用期限
        max-lease-time 43200;                   #设置最大的IP租用期限
        next-server 192.168.1.60;                #告知客户端TFTP服务器的ip
        filename "pxelinux.0"; 
}
[root@master ~]# systemctl start dhcpd

安装TFTP

[root@master ~]# yum -y install tftp-server xinetd
[root@master ~]# vim /etc/xinetd.d/tftp
    disable = no

#将原先的disable = yes更改为disable = no

[root@master ~]# systemctl start xinetd.service

 引导配置

Syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。

[root@master ~]# yum -y install syslinux
[root@master ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@master ~]# cd /var/lib/tftpboot/  切换到站点中查看
[root@master tftpboot]# ll
total 28
-rw-r--r-- 1 root root 26759 2021-03-03 21:36 pxelinux.0
[root@master tftpboot]# mount /dev/cdrom /mnt/
[root@master tftpboot]# cd /mnt/images/pxeboot/
[root@master pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/
[root@master pxeboot]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@master tftpboot]# cd /var/lib/tftpboot/pxelinux.cfg
[root@master pxelinux.cfg]# touch default
[root@master pxelinux.cfg]# cd /mnt/
[root@master mnt]# cd isolinux/
[root@master isolinux]# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default 
[root@master isolinux]# cp * /var/lib/tftpboot/

新建虚拟机通过网络启动

x86docker安装青龙 电脑安装x86_x86docker安装青龙_02

kickstart实现无人值守

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

创建ks.cfg文件,生成kickstart配置文件的三种方法:

方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)

方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。

方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。

[root@master ~]# yum -y install httpd
[root@master ~]# mkdir /var/www/html/{centos,ks_config}
[root@master ~]# mount /dev/cdrom /var/www/html/centos/
[root@master ~]# systemctl start httpd.service

浏览器测试一下(能访问接着往下走)

x86docker安装青龙 电脑安装x86_x86docker安装青龙_03

 生成kickstart配置文件(这里我们找一台已经装好的系统拷贝anaconda-ks.cfg 修改修改)

[root@master ~]# cat anaconda-ks.cfg >/var/www/html/ks_config/ks.cfg 
[root@master ~]# egrep -v "^#" /var/www/html/ks_config/ks.cfg 
install
auth --enableshadow --passalgo=sha512
url --url="http://192.168.1.60/centos/"
text
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8

network  --bootproto=dhcp --device=link --onboot=yes
network  --hostname=localhost.localdomain

rootpw --iscrypted $6$OugkG6HWAQL6yRRP$mIfoCTd7II7bDhEjOiOJ0z.jOy3gEvNkM5eZEzjwsOPGVjxDEkaqrtJgEPpRU3jZtXXCDgP/M9hMZz.ftCWki0
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=200
part pv.253 --fstype="lvmpv" --ondisk=sda --size=20279
volgroup centos --pesize=4096 pv.253
logvol swap  --fstype="swap" --size=869 --name=swap --vgname=centos
logvol /  --fstype="xfs" --size=19403 --name=root --vgname=centos

%packages
@^minimal
@compat-libraries
@core
@debugging
@development

%end


[root@master ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
label linux
.....
# 在linux后添加
label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.1.60/ks_config/ks.cfg

关于ks.cfg文件说明

  • 命令段
  • 键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
  • 软件包段
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包

在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。

  • 脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)

install

告知安装程序,这是一次全新安装,而不是升级upgrade

url --url=" "

通过FTPHTTP从远程服务器上的安装树中安装。

url --url="http://10.0.0.60/CentOS7/"url --url ftp://<username>:<password>@<server>/<dir>

nfs

从指定的NFS服务器安装。

nfs --server=nfsserver.example.com --dir=/tmp/install-tree

text

使用文本模式安装。

lang

设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8

keyboard

设置系统键盘类型。keyboard us

zerombr

清除mbr引导信息。

bootloader

系统引导相关配置。

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"--location=,指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。

--driveorder,指定在BIOS引导顺序中居首的驱动器。

--append=,指定内核参数.要指定多个参数,使用空格分隔它们。

network

为通过网络的kickstart安装以及所安装的系统配置联网信息。

network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6--bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcpbootpdhcp被认为是相同的。

static方法要求在kickstart文件里输入所有的网络信息。

network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2

请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。

--ip=,要安装的机器的IP地址.

--gateway=,IP地址格式的默认网关.

--netmask=,安装的系统的子网掩码.

--hostname=,安装的系统的主机名.

--onboot=,是否在引导时启用该设备.

--noipv6=,禁用此设备的IPv6.

--nameserver=,配置dns解析.

timezone

设置系统时区。timezone --utc Asia/Shanghai

authconfig

系统认证信息。authconfig --enableshadow --passalgo=sha512设置密码加密方式为sha512 启用shadow文件。

rootpw

root密码

clearpart

清空分区。clearpart --all --initlabel--all 从系统中清除所有分区,--initlable 初始化磁盘标签

part

磁盘分区。

part /boot --fstype=ext4 --asprimary --size=200part swap --size=1024

part / --fstype=ext4 --grow --asprimary --size=200

--fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swapvfat

--asprimary,强迫把分区分配为主分区,否则提示分区失败。

--size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB

--grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。

firstboot

负责协助配置redhat一些重要的信息。

firstboot --disable

selinux

关闭selinuxselinux --disabled

firewall

关闭防火墙。firewall --disabled

logging

设置日志级别。logging --level=info

reboot

设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt关机。

新建虚拟机测试

x86docker安装青龙 电脑安装x86_x86docker安装青龙_04

已经开始安装了(安装完成后root密码为123456)

 

作者:杨灏