在实际工作中,传统纯手动安装操作系统的方式是有一定的局限性的,例如:现在大多数的服务器都不自带光驱,若要安装系统需要外接光驱插入光盘,整个安装过程中需要人工交互确认,手动设置每一个安装设置项,人必须要在机器前值守,时间大多花费在安装的等待过程中。假如有一大批服务器需要安装操作系统,这种传统手动的方式去逐台安装系统的方式,效率是极其低下的,而且由于需要人工交互式配置系统的安装设置项,无法确保每一台机器的系统安装配置都是完全一致的,即无法做到完全的统一标准化。(在大量重复的操作过程中,人工方式是极易出错的)

  为了解决上述问题,可以采用PXE网络的方式来实现系统自动化安装,整个安装过程中无需人工干预,极大的提供了工作效率。

一、PXE的基本概念

PXE(Pre-boot Execution Environment,预启动执行环境)是由Inter公司开发的网络引导技术,工作在Client/Server模式,PXE网卡的ROM内置了对dhcp和tftp协议的支持,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。

二、PXE服务器的相关组件及基本原理

PXE服务器需要的服务:

    DHCP服务:为客户端分配IP地址,定位启动引导文件

    TFTP服务:提供网卡启动引导程序、系统内核文件及initrd镜像文件下载

    FTP服务(或http/nfs):提供系统镜像的yum安装源及ks应答文件下载

客户端机应具备的条件:

    网卡必须支持PXE协议(现在大多数的网卡都已支持)

    主板BIOS支持从网络启动

1、通过PXE服务器安装系统原理示意图:

  通常情况下,为了节省资源我们也可以将上述原理图中的提供DHCP服务、TFTP服务、FTP(或HTTP、NFS)服务的3台不同服务器整合部署到同一台服务器,作为PXE的服务器端,视具体情况而定。

2、PXE网络安装系统的优势:

规模化:高效率,同时安装多台服务器,轻松应对大规模批量安装

自动化:安装过程中无需人工干预、实现自动化无人值守安装

标准化:按照自设定的系统安装规则配置硬盘分区及系统组件包,实现系统安装的统一标准化

远程实现:不需要光驱光盘、U盘等外部安装介质

三、PXE服务器搭建步骤详解

  本文以centos7为例,对PXE服务器的搭建过程总结如下:

1、准备操作系统镜像YUM源,并通过HTTP服务对外发布

安装httpd服务:

[root@centos7 ~]#yum -y install httpd
[root@centos7 ~]#systemctl start httpd.service #启动httpd服务
[root@centos7 ~]#systemctl enable httpd.service #设置httpd服务开机启动

创建系统镜像ISO文件存放目录

[root@centos7 ~]#mkdir -p /data/myios  #创建 /data/myios 作为系统镜像文件存放目录

通过xftp等工具将系统镜像ISO文件上传到 /data/myios 目录

[root@centos7 myiso]#ll
total 14390272
-rw-r--r-- 1 root root 3991928832 Sep 7 13:51 CentOS-6.10-x86_64-bin-DVD1.iso
-rw-r--r-- 1 root root 10743709696 Sep 7 13:54 CentOS-7-x86_64-Everything-1810.iso

在httpd默认的documentroot目录 /var/www/html 下创建各个系统镜像源的子目录

[root@centos7 ~]#mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
mkdir: created directory ‘/var/www/html/centos’
mkdir: created directory ‘/var/www/html/centos/6’
mkdir: created directory ‘/var/www/html/centos/6/os’
mkdir: created directory ‘/var/www/html/centos/6/os/x86_64/’
mkdir: created directory ‘/var/www/html/centos/7’
mkdir: created directory ‘/var/www/html/centos/7/os’
mkdir: created directory ‘/var/www/html/centos/7/os/x86_64/’
[root@centos7 ~]#

挂载系统ISO镜像文件到httpd对应的目录下

vim编辑修改 /etc/fstab文件
[root@centos7 ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Sep 7 12:12:42 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4d76f02b-0ebf-4238-89a6-e18709a1025d / xfs defaults 0 0
UUID=b2d24305-3936-4e25-8a40-18b53cd4d809 /boot xfs defaults 0 0
UUID=e5586dc6-a9e2-453b-90da-c009996214ad /data xfs defaults 0 0
UUID=3417eb37-c6ee-4c17-aea5-153413c631c6 swap swap defaults 0 0
/data/myiso/CentOS-6.10-x86_64-bin-DVD1.iso /var/www/html/centos/6/os/x86_64 iso9660 defaults 0 0
/data/myiso/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos/7/os/x86_64 iso9660 defaults 0 0 添加最后两行,将/data/myiso 目录中的2个iso镜像文件以iso镜像文件系统挂载到httpd的对应documentroot目录下
[root@centos7 ~]#mount -a
mount: /dev/loop0 is write-protected, mounting read-only
mount: /dev/loop1 is write-protected, mounting read-only
[root@centos7 ~]#

df查看一下,ISO镜像已经挂载到httpd对应目录下

说明:10.10.10.254为PXE服务器的IP,需提前配置好,且设置为静态IP。

设置本机IP与PXE服务器同网段,通过URL访问 http://10.10.10.254/centos/ 可以到yum源已经发布成功。





2、准备系统自动安装ks应答文件(kickstart),并使用HTTP发布

kickstart文件用途:

ks应答文件的作用就是实现系统安装过程中的无人值守,自动安装的。系统安装的时候就是依靠读取KS文件里面预先定义的各项安装设置,如硬盘分区、系统语言、安装哪些组件包等。

ks文件的配置方式:

(1)从现有已经安装好的系统中获取anaconda-ks.cfg(此文件是anaconda系统安装向导在系统安装完成后生成的),然后根据anaconda-ks.cfg里面的配置项来修改配置为自己需要的ks文件(需要注意的是centos6和centos7系统的ks配置不通用,需要使用对应的系统的anaconda文件来修改配置)

ks文件文件的格式范例和设置项说明如下(适用centos7)

[root@centos7 ksdir]#cat ks7_desktop.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install #全新安装
# Keyboard layouts
keyboard 'us' #键盘模式,美式US
# Root password
rootpw --iscrypted $1$7Q46UR0F$uZjZh2p9X.MlrV0dW8euj. #设置root账号口令并采用加密
# Use network installation
url --url="http://10.10.10.254/centos7/os/x86_64" #系统镜像yum源的URL地址
# System language
lang en_US #系统默认语言,en_US
# System authorization information
auth --useshadow --passalgo=sha512 #系统默认使用shadow文件作为账号登录验证
# Use text mode install
text #安装过程默认使用text文本的tui界面
firstboot --disable
# SELinux configuration
selinux --disabled #禁用selinux # Firewall configuration
firewall --disabled #禁用系统防火墙
# Network information
network --bootproto=dhcp --device=eth0 #系统默认的网卡配置
# Reboot after installation
reboot #安装完成后自动重启系统
# System timezone
timezone Asia/Shanghai #设置系统默认时区 Asia/Shanghai
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr #安装新的bootload程序,并添加内核启动参数 net.ifnames=0
# Clear the Master Boot Record
zerombr #清除原有的MBR引导记录
# Partition clearing information
clearpart --all --initlabel #清除原有的硬盘分区标签
# Disk partitioning information #硬盘分区信息,按实际需求设定
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --size=51200
part swap --fstype="swap" --size=4096
part /data --fstype="xfs" --grow --size=1 # /data分区使用所有剩余硬盘空间 %packages #要安装的包组,以%packages行开始,到%end结尾,包组以@符号开头,单个包直接写包名
@desktop-debugging
@fonts
@gnome-desktop
@input-methods
@legacy-x
@remote-desktop-clients
@x11
vinagre %end #需要注意的是,centos6中,如果选择最小化安装,ks文件最后需要写上 %packages开始行%end结尾行的2行,否则系统会默认安装所有的包组,centos7系统如果最小化安装,则可以不用写这2行
[root@centos7 ksdir]#

通过anaconda文件为模板修改生成的ks文件,可以使用命令 ksvalidator /PATH/KICKSTART_FILE 来检查ks文件语法是否正确。

(2)使用system-config-kickstart工具,通过图形界面设置向导来配置生成(需要服务器带有图形界面的包组,如果是最小化安装的系统,需要安装x11图形包组)

[root@centos7 ~]#yum -y install system-config-kickstart  #此工具包来自epel源
[root@centos7 ~]#yum -y groupinstall x11 #最小化安装的系统需要安装x11图形包组才能支持system-config-kickstart工具调出图形界面的ks文件配置向导窗口

运行system-config-kickstart工具调出kickstart图形配置向导窗口

[root@centos7 ~]#system-config-kickstart

system-config-kickstart工具的设置如下:





















设置完成后,点击左上角save保存

修改ks文件名称,指定存放路径,点击右下角save保存

注意:如果是通过system-config-kickstart工具生成centos6系统最小化安装的ks文件,需要手动修改ks文件,在最后添加%package开始行和%end结束行的2行,否则安装向导会默认安装所有包组,如下图:

在http服务器documentroot目录下创建 ksdir目录,作为ks文件的专用存放路径

[root@centos7 ksdir]#cd /var/www/html/
[root@centos7 html]#mkdir ksdir/

将通过上述任一方式配置好的ks文件,上传到http服务器专用的ks文件存放路径下,对外发布,并确保所有ks文件通过url可以正常访问

[root@centos7 ksdir]#ll
total 16
-rw-r--r-- 1 root root 2109 Sep 7 20:00 ks6_desktop.cfg #centos6带gnome桌面安装
-rw-r--r-- 1 root root 1757 Sep 7 22:13 ks6_mininal.cfg #centos6最小化安装
-rw-r--r-- 1 root root 1809 Sep 7 20:02 ks7_desktop.cfg #centos7带gnone桌面安装
-rw-r--r-- 1 root root 1695 Sep 7 20:02 ks7_mininal.cfg #centos7最小化安装

3、安装配置TFTP服务,并部署网卡引导文件、系统内核文件及系统初始化镜像文件

配置并启用TFTP服务,安装tftp-server软件包,监听端口为UDP 69

TFTP根目录:/var/lib/tftpboot/

[root@centos7 ~]#yum -y install tftp-server
[root@centos7 ~]#systemctl start tftp.socket
[root@centos7 ~]#systemctl enable tftp.socket

TFTP根目录需要部署的文件如下:

[root@centos7 tftpboot]#ll
total 84
drwxr-xr-x 2 root root 39 Sep 7 14:48 centos6
drwxr-xr-x 2 root root 39 Sep 7 14:48 centos7
-rw-r--r-- 1 root root 55140 Sep 7 14:46 menu.c32
-rw-r--r-- 1 root root 26759 Sep 7 14:46 pxelinux.0
drwxr-xr-x 2 root root 21 Sep 7 21:36 pxelinux.cfg [root@centos7 tftpboot]#tree
.
├── centos6 #centos6系统内核文件和intrd.img存放目录
│   ├── initrd.img
│   └── vmlinuz
├── centos7 #centos7系统内核文件和intrd.img存放目录
│   ├── initrd.img
│   └── vmlinuz
├── menu.c32 #PXE启动菜单界面背景图
├── pxelinux.0 #网卡启动引导文件
└── pxelinux.cfg #PXE启动菜单文件存放目录,目录名必须为pxelinux.cfg
└── default #PXE启动菜单文件,文件名必须为default

准备网卡启动引导文件pxelinux.0和PXE启动菜单界面背景图片文件menu.c32

yum安装syslinux包
[root@centos7 ~]#yum -y install syslinux 复制pxelinux文件到tftp的根目录下
[root@centos7 ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ 复制PXE启动菜单界面背景图片文件到tftp根目录下
[root@centos7 ~]#cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/

在tftp根目录创建系统内核文件及initrd镜像文件的存放目录,并从系统ISO镜像yum源目录复制对应的文件到tftp中对应的目录

在tftp根目录创建centos6和centos7系统内核文件及initrd镜像文件的存放目录
[root@centos7 ~]#mkdir -pv /var/lib/tftpboot/centos{6,7}
mkdir: created directory ‘/var/lib/tftpboot/centos6’
mkdir: created directory ‘/var/lib/tftpboot/centos7’ 分别从centos6和centos7镜像yum源路径复制系统内核文件和initrd镜像文件到tftp根目录中对应的目录
[root@centos7 ~]#cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/ [root@centos7 ~]#cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/

准备安装菜单文件并放到tftp指定目录中

在tftp根目录中创建安装菜单文件存放目录 pexlinux.cfg/
[root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/ 从系统ISO镜像yum源路径复制启动菜单文件到对应目录中,并改为为default

vim编辑修改pxe启动菜单default文件,修改为如下内容:

[root@centos7 pxelinux.cfg]#vim default
default menu.c32 #使用menu.c32作为背景图片
timeout 600 #默认等待时间60秒(600的十分之一) menu title Auto Install CentOS #启动菜单的标题 label CentOS6_Mininal #label标签说明
menu label Install CentOS 6.10 Mininal #安装选项菜单
kernel centos6/vmlinuz #系统内核文件在tftp中的相对路径
append initrd=centos6/initrd.img ks=http://10.10.10.254/ksdir/ks6_mininal.cfg #boot启动引导的参数,指定系统initrd镜像文件在tftp中的相对路径以及ks应答文件的访问地址 label CentOS6_Desktop
menu label Install CentOS 6.10 Desktop
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://10.10.10.254/ksdir/ks6_desktop.cfg label CentOS7
menu label Install CentOS 7.6 Mininal
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://10.10.10.254/ksdir/ks7_mininal.cfg label CentOS7
menu label Install CentOS 7.6 Desktop
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://10.10.10.254/ksdir/ks7_desktop.cfg label Local
menu label Boot from Local drive #从本地硬盘启动
menu default #默认启动选项,光标默认选中此项,timeout时间后默认从此项启动,建议默认设定为此项,防止60秒等待时间后未经过人工选择,造成直接进入系统安装
localboot 0xffff

4、安装配置DHCP服务

安装dhcp服务

[root@centos7 ~]#yum -y install dhcp

dhcp服务安装完成后,默认无法启动,需要对配置文件进行修改,否则启动报错。

默认的配置文件中无内容,根据提示从范例文件复制配置文件进行修改

复制dhcp服务的范例配置文件覆盖默认配置文件
[root@centos7 ~]#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

vim编辑修改dhcp服务配置文件,并添加如下内容

[root@centos7 ~]#vim /etc/dhcp/dhcpd.conf
subnet 10.10.10.0 netmask 255.255.255.0 { #dhcp服务器分配的网段需要与本机的固定IP地址位于同一网段 (本机IP为 10.10.10.254)
range 10.10.10.200 10.10.10.250; #指定自动分配的IP地址范围
option routers 10.10.10.1; #指定网关地址
option domain-name-servers 114.114.114.114,8.8.8.8; #指定DNS服务器地址
option domain-name "test.org"; #DNS搜索域名
next-server 10.10.10.254; #指定TFTP服务器IP(关键设定项)
filename "pxelinux.0"; #指定网卡pxe启动引导文件名(关键设定项)
}

启动dhcp服务,并设置开机启动

[root@centos7 ~]#systemctl start dhcpd.service
[root@centos7 ~]#systemctl enable dhcpd.service

如启动成功,dhcp服务将监听udp 67端口,如发生报错,则需检查配置文件。

四、使用客户端机器安装系统测试PXE环境

设置客户端机器BIOS默认从网卡启动

如能顺利进入到启动菜单选择界面,则证明DHCP服务工作正常

根据菜单项目,选择安装对应的系统,例如选择centos7.6最小化安装:

安装选项及磁盘分区界面

可以看到centos7.6最小化安装需要装310个包

centos6.10最小化安装的过程界面:



至此,整个PXE服务器的搭建过程完成。

注意事项:

1、预先设置关闭并禁用PXE服务器selinux

2、预先关闭并禁用系统防火墙,如考虑安全,需要保持系统防火墙开启,则需要将HTTP服务、TFTP服务、DHCP服务需要使用到的网络端口在防火墙中打开,否则客户端将无法通过网络访问相关服务

3、不可在已存在DHCP服务器的网络内再配置新的DHCP服务器,否则会造成一个网络内多个DHCP服务器,造成IP地址获取混乱导致网络故障。可以直接使用现有的DHCP服务器,修改添加相应的配置文件即可。

4、如通过虚拟机来使用PXE安装centos7系统,则虚拟机的内存分配需要大于1G以上,否则会出现下图中错误:

基于PXE网络启动的Linux系统自动化安装的更多相关文章

  1. Linux系统自动化安装之cobbler实现

    一.cobbler简介 cobbler是快速网络安装linux操作系统的服务,支持众多的Linux发行版本,如redhat|.fedora.centos.debian.ubuntu和suse,也可以支 ...

  2. RHEL/CentOS 7 中配置 PXE 网络启动服务器

    RHEL/CentOS 7 中配置 PXE 网络启动服务器 作者: Matei Cezar 译者: LCTT joeren | 2015-02-17 14:28   评论: 13 收藏: 8 分享:  ...

  3. PXE网络启动无人值守自动安装 centos 全程实录

    PXE网络启动无人值守自动安装 centos 全程实录 http://shayi1983.blog.51cto.com/4681835/1549854/ 搭建Pxe服务器无人听应答全自动安装CentO ...

  4. 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令

    安装Docker 文章目录 安装Docker Docker虚拟机架构 在Linux系统中安装Docker虚拟机 管理Docker虚拟机 参考资料 Docker虚拟机架构 Docker创建的所有虚拟实例 ...

  5. kvm虚拟机管理 系统自动化安装

    原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...

  6. Linux系统批量化安装部署之Cobbler

    说明: Cobbler服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统: eth0(第一块网卡,用于外网)IP地址段:192.168.2 ...

  7. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  8. 装机预备技能,Linux系统简介,安装Linux系统,Linux基本操作-云计算学习(2)

    装机预备技能 问题 要求安装一台可用的KVM服务器: RHEL与CentOS系统有什么关联? Linux系统中第三块SCSI硬盘如何表示? 步骤 实现此案例需要按照如下步骤进行. 步骤一:RHEL系统 ...

  9. Linux系统的简介及Linux系统的安装

    一.写在前面  本文仅仅对Linux系统进行简要的概述已经对Linux系统的安装进行简要的介绍 二.完成目标 1.Linux操作系统的基本概念 2.Linux系统的安装 三.基本概念 1.什么是操作系 ...

随机推荐

  1. FPGA硬件加速

    FPGA市场占有率最高的两大公司Xilinx和Altera. 查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM.目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成 ...

  2. 【07月03日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...

  3. 【C/C++开发】容器set和multiset,C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

    一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include <set> ...

  4. Python 的 Pandas 对矩阵的行进行求和

    Python 的 Pandas 对矩阵的行进行求和: 若使用 df.apply(sum) 方法的话,只能对矩阵的列进行求和,要对矩阵的行求和,可以先将矩阵转置,然后应用 df.apply(sum) 即 ...

  5. 一文带你了解 Flink 的基本组件栈

    作为实时计算领域的佼佼者,Flink 的基本组件同样值得我们仔细研究. Flink 同样遵循着分层的架构设计理念,在降低系统耦合的同时,也为上层用户构建 Flink 应用提供了丰富且友好的接口. Fl ...

  6. [转帖]Kubesphere all-in-one 安装方式.

    All-in-One 模式 对于首次接触 KubeSphere 高级版的用户,想寻找一个最快安装和体验 KubeSphere 高级版核心功能的方式,all-in-one 模式支持一键安装 KubeSp ...

  7. JAVA并发编程: CAS和AQS

       版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/u010862794/article/details/72892300 说起JAVA并发编程,就不得不聊 ...

  8. c语言数据结构之线性表的顺序存储结构

    线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...

  9. 利用Travis IC实现Hexo博客自动化部署

    1.Hexo博客的利与弊 Hexo中文 我就默认为看到这篇文章的人都比较了解Hexo博客,也都能够成功手动部署吧.所以第一部分推荐两篇文章一笔带过,让我们快速进入本文的重点内容.实在不知道也不要方先看 ...

  10. 【题解】Luogu P4091 [HEOI2016/TJOI2016]求和

    原题传送门 \[\begin{aligned} a n s &=\sum_{i=0}^{n} \sum_{j=0}^{i}\left\{\begin{array}{c}{i} \\ {j}\e ...