1.原理:
2.部署环境:(先关闭防火墙和selinux)
需要3台服务器,2台PXE服务器,一台RPM包管理服务器(内网YUM源服务器,需要两张网卡,一张指向公网一张指向内网)
PXE_Server_mini:DHCP_Server+TFTP_Server+FTP/HTTP/NFS(用于批量安装最小化安装的系统)
PXE_Server_GUI:DHCP_Server+TFTP_Server+FTP/HTTP/NFS(用于批量安装带GUI服务器的系统)
YUM_Server:YUM_Server+RPM_Server(用于解决内网环境安装rpm包依赖问题)
3.为方便等会部署完PXE服务器后写入内网机器yum源脚本,先部署好yum源服务器
a.安装centos7操作系统(带GUI的服务器),此步骤略过,建议2cpu4G以上内存100G硬盘
b.安装完后,配置好ip地址,外网网卡要保证能上公网,内网ip我这里设置为10.0.1.5/24,不用设置网关
NAME="ens34"
DEVICE="ens34"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=10.0.1.5
NETMASK=255.255.255
DEVICE="ens33"
IPV6INIT="yes"
BOOTPROTO="static"
UUID="5b24467e-4fdb-4a3c-909c-eafbf21d915e"
ONBOOT="yes"
IPADDR=192.168.230.132
NETMASK=255.255.255.0
GATEWAY=192.168.230.2
DNS1=114.114.114.114
DNS2=8.8.8.8
c.配置yum源
这里可以挂载镜像来配置,也可以cp光盘里面的包到指定目录来配置,两种方法都可以,因为等会都会修改指向私有仓库
为了方便,这里我采用挂载光盘的形式来配置yum源,把光盘挂载到/mnt,建议将镜像上传到服务器再进行挂载,下面以脚本的方式配置光盘yum源,因为只是临时用一下,光盘无需永久挂载
#!/bin/bash
#This is an initial environment script !
#start
cd /etc/yum.repos.d/
touch aa.repo
echo [aa] >>aa.repo
echo name=aa >>aa.repo
echo baseurl=file:///mnt >>aa.repo
echo enabled=1 >>aa.repo
echo gpgcheck=0 >>aa.repo
yum clean all
yum makecache
yum -y update
注意:执行前先把镜像挂载到/mnt
将脚本放在你能找到的位置,然后运行脚本即可
注意:在执行脚本之前,不建议执行rm -rf /etc/yum.repos.d/*,因为我们现在是在部署yum源服务器,现在删除掉centos7自带的yum源,等会你还得去镜像站点下载
d.配置好本地yum源后开始配置epel源
yum -y install epel-release
e.因为批量部署的环境,内网服务器需要预装MongoDB,所以还需要配置一下mongodb源(这一步不需要的可以省略)
cd /etc/yum.repos.d/
vim mongodb
[mongodb]
name=mongodb
baseurl=https://repo.mongodb.org/yum/redhat/7Server/mongodb-org/4.2/x86_64/
enabled=1
gpgcheck=0
f.更新yum源
yum clean all
yum makecache
yum -y update
g.安装vsftp
yum -y install vsftpd
h.创建私有yum仓库目录,用于存放各种rpm包,后续会以脚本的方式写入PXE服务器,这里我通过ftp的方式来共享到内网,也可以通过http等方式
mkdir -p /var/ftp/yum_repo/centos/7
i.关键的一步,创建私有仓库,以及解决新包的各种依赖关系,下面以脚本的方式来创建
#!/bin/bash
#Author: wang yuliang
#start
#YUM private warehouse automation update script
yum install createrepo yum-utils -y 安装creatrepo和reposync命令
cd /var/ftp/yum_repo/centos/7 进入上一步创建好的私有仓库目录
reposync -r base 开始创建centos7的base源的rpm包仓库
reposync -r updates 开始创建centos7的updates源的rpm包仓库
reposync -r extras 开始创建centos7的extras源的rpm包仓库
reposync -r epel 开始创建epel源的rpm包仓库
reposync -r mongodb 开始创建mongodb源的rpm包仓库
#Add the RPM package to the YUM repository index and update it to the YUM package repository
createrepo -pdo /var/ftp/yum_repo /var/ftp/yum_repo 自动解决新包的依赖关系
createrepo --update /var/ftp/yum_repo 自动解决新包的依赖关系
yum clean all
yum makecache
yum -y update
#end
如果需要手动下载包,如下载openssl,执行yumdownloader openssl-*即可,建议单独建一个下载目录专门用于存放手动下载的包
j.私有仓库创建完成后,将yum源换成新建的仓库目录,至此,内网私有rpm包仓库搭建完毕
[aa]
name=aa
baseurl=file:///var/ftp/yum_repo
enabled=1
gpgcheck=0
4.开始部署PXE服务器
a.安装系统(带GUI服务器),此步骤略过,建议配置4cpu8G硬盘50-100G
b.上传镜像到服务器,不要直接挂载安装光盘,因为光盘读写速度较慢,批量部署内网机器的时候,安装速度会非常慢,我这里上传到/iso(crt/xshell都支持上传大于4G的文件)
yum -y install tree
tree /iso
/iso/
└── CentOS-7-x86_64-DVD-1908.iso
c.创建一个目录专门用于挂载镜像用,将上传到/iso下的镜像cp过去,我这里创建的是/yum,并且配置为开机自动挂载,其中第二条挂载先不要执行,因为还没安装vsftp,安装完在执行,如下
tree /yum
/yum/
└── CentOS-7-x86_64-DVD-1908.iso
vim /etc/fstab
/yum/CentOS-7-x86_64-DVD-1908.iso /mnt iso9660 defaults 0 0
/yum/CentOS-7-x86_64-DVD-1908.iso /var/ftp/dvd iso9660 defaults 0 0
d.安装vsftp前先配置yum源,创建一个本地源,名字随便写,我这里创建aa.repo
cd /etc/yum.repos.d
vim aa.repo
[development] 这里不要修改名字,否则后面PXE软件包会出问题,创建应答文件将提示找不到软件包
name=aa
baseurl=file:///mnt
enabled=1
gpgcheck=0
e.再建一个指向yum服务器的源
cd /etc/yum.repos.d
vim yum_repo.repo
[yum_repo]
name=yum_repo
baseurl=ftp://10.0.1.5/yum_repo
enabled=1
gpgcheck=0
设置好后要刷新下源并update
yum clean all
yum makecache
yum -y update
f.安装vsftp
yum -y install vsftpd
g.创建镜像挂载目录,并挂载,用于后续引导程序读取软件包
mkdir -p /var/ftp/dvd
mount /yum/CentOS-7-x86_64-DVD-1908.iso /var/ftp/dvd
h.配置PXE服务器ip地址为10.0.1.3(这里以自己环境实际为主)
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens37"
ONBOOT="yes"
IPADDR=10.0.1.3
NETMASK=255.255.255.0
5.搭建PXE环境
a.开始配置DHCP_Server
安装dhcp
yum -y install dhcp
查看dhcpd的配置文件在什么地方
rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
查看模板位置
rpm -ql dhcp | grep example
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
把dhcp模板覆盖到配置文件里面去
cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf
删除掉一些不必要的配置,开始配置dhcp
vim /etc/dhcp/dhcpd.conf
# dhcpd.conf
subnet 10.0.1.0 netmask 255.255.255.0 { 指定子网
range 10.0.1.50 10.0.1.254; 指定地址池范围
option domain-name-servers 10.0.1.1; 指定dns
option domain-name "example.com"; 指定域名
option routers 10.0.1.1; 指定路由,一般指向网关
option broadcast-address 10.0.1.255; 广播地址
next-server 10.0.1.3; PXE服务器的ip地址,这里不要写错了
filename"/pxelinux.0"; 告诉客户端需要获取一个什么文件,这里的/不是指根,指/tftp
default-lease-time 600; 地址租赁时间
max-lease-time 7200; dhcp请求超时时间
由于我是在虚拟机里面搭建的环境,所以网关我设置的是物理机的ip,这里请自行斟酌
启动dhcp,并开机自启动
systemctl start dhcpd
systemctl enable dhcpd
b.安装tftp_server
yum -y install tftp-server
yum -y install xinetd
配置tftp
cd /etc/xinetd.d/
vim 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
disable = no 这里改成no即可
per_source = 11
cps = 100 2
flags = IPv4
}
启动xinetd服务并开机自启动
systemctl start xinetd
systemctl enable xinetd
在tftp服务器上面开始准备必要的三个文件
引导程序(pxelinux.0)、vmlinuz、initrd
引导程序:
查询pxelinux.0是由哪个包安装的
yum whatprovides */pxelinux.0
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
syslinux-4.05-15.el7.x86_64 : Simple kernel loader which boots from a FAT filesystem
源 :base
匹配来源:
文件名 :/usr/share/syslinux/pxelinux.0
复制下来,安装这个包
yum -y install syslinux-4.05-15.el7.x86_64
拷贝这个包到tftp目录下
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
进入挂载的镜像/mnt,找到vmlinuz、initrd,并cp到tftpboot目录下面
cd /mnt/images/pxeboot
cp initrd.img vmlinuz /var/lib/tftpboot/
最好重新命名这两个文件,好区分以后要部署多个镜像
initrd_centos7.img
vmlinuz_centos7
在tftpboot目录下创建配置文件
mkdir pxelinux.cfg
进入/mnt把模板拷贝过来,并且给w权限
cd /mnt/isolinux
cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp boot.msg /var/lib/tftpboot/
chmod u+W /var/lib/tftpboot/pxelinux.cfg/default
chmod u+W /var/lib/tftpboot/boot.msg
编辑default配置文件
cd /var/lib/tftpboot/pxelinux.cfg/
vim default
找到label行,不同的label用来引导不同的操作系统
default centos7
timeout 600
#prompt 1
display boot.msg
label centos7
menu label ^Install CentOS 7
kernel vmlinuz_centos7
append initrd=initrd_centos7.img inst.ks=ftp://10.0.1.3/bnqkl.cfg quiet
label check
menu label Test this ^media & install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
更改默认配置,如下
default centos7 这里修改默认引导系统
timeout 600 这里默认即可
#prompt 1 需要引导多种操作系统的时候启用,现在先注释掉或者不添加这一行
label centos7 这里一定要与最顶上的default一样,否则会报错
menu label ^Install CentOS 7
kernel vmlinuz_centos7
append initrd=initrd_centos7.img inst.ks=ftp://10.0.1.3/bnqkl.cfg quiet 这一行是重点一定不要写错,否则将无法引导起来,我这里通过ftp方式来安装
写法
编辑提示用户的配置文件,需要安装一下figlet包,因为是内网环境,这里就需要用到指向yum源服务器的源,并创建figlet目录,建议在/root下面创建,方便好找
yum -y install figlet
cd /root
mkdir figlet
cd figlet
figlet BNQKL
____ _ _ ___ _ ___
| __ )| \ | |/ _ \| |/ / |
| _ \| \| | | | | ' /| |
| |_) | |\ | |_| | . \| |___
|____/|_| \_|\__\_\_|\_\_____|
把上面figlet出来的图像复制到提示用户的配置文件里面去,并修改成如下界面
cd /var/lib/tftpboot
vim boot.msg
^L
^Xsplash.lss
____ _ _ ___ _ ___
| __ )| \ | |/ _ \| |/ / |
| _ \| \| | | | | ' /| |
| |_) | |\ | |_| | . \| |___
|____/|_| \_|\__\_\_|\_\_____|
- Press the ^O01<ENTER>^O07 key to begin the installation process.
#-- enter centos7 install centos7 一个操作系统的话,这个地方要注释掉,否则引导界面需要手动选择
c.配置nfs-server
启动nfs-server 并编辑共享配置文件
systemctl start nfs-server
systemctl enable nfs-server
vim /etc/exports
修改成如下,把光盘共享出去
/mnt *(rw,sync)
测试
[root@pxe_server tftpboot]# exportfs -arv
exporting *:/mnt
修改完成后,现在就可以新建一台虚拟机或者物理机测试了,看一下是否能引导起来,并进入系统安装界面,并且看看软件包界面是否异常,这里请自行尝试,我这里就不演示了
d.配置kickstart无人值守安装
应答文件/root就有,我们可以直接用安装后系统生成的应答文件,然后修改一些需要的参数生成新的应答文件
安装kickstart管理工具包,并启动起来
yum -y insatll system-config-kickstart
system-config-kickstart &
下面我以图形的方式配置应答文件
注意每次修改完,确认要保存的时候,请把root密码重新输一遍,否则会被系统随机生成!
注意要安装新的引导程序
建议分/boot 分区 (1G足够,建议600M) /swap 分区(4G足够) /分区(设置为剩余所有空间)
最小化安装脚本
cd /etc/yum.repos.d/
rm -rfv *
echo [aa] >>aa.repo
echo name=aa >>aa.repo
echo baseurl=ftp://10.0.1.5/yum_repo >>aa.repo
echo enabled=1 >>aa.repo
echo gpgcheck=0 >>aa.repo
yum clean all
yum makecache
yum -y update
yum -y install vim
yum -y install wget
yum -y install net-tools
yum -y install tree
yum -y install lrzsz
yum -y install bash-c*
yum -y install supervisor
yum -y install mongodb-org
yum -y install lsof
配置完成后另存为bnqkl.cfg
配置让客户端访问应答文件
yum –y install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
拷贝应答文件到/var/ftp(此目录为ftp共享目录)
cp /root/bnqkl.cfg /var/ftp
注意:每次修改完应答文件都需要覆盖掉/var/ftp下的应答文件并且重启xinetd服务
systemctl restart xinetd
6.部署安装带GUI的PXE服务器,直接克隆就可以,把ip改为10.0.1.2,脚本改一下,其它不变
cd /etc/yum.repos.d/
rm -rfv *
echo [aa] >>aa.repo
echo name=aa >>aa.repo
echo baseurl=ftp://10.0.1.5/yum_repo >>aa.repo
echo enabled=1 >>aa.repo
echo gpgcheck=0 >>aa.repo
yum clean all
yum makecache
yum -y update
yum -y install wget
yum -y install tree
yum -y install lrzsz
yum -y install supervisor
yum -y install mongodb-org
yum -y install lsof