centos7部署PXE批量安装内网服务器

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

7.如果部署较为复杂的多操作系统多网段环境,可以使用cobbler工具配合PXE使用

8.结束


这世上没有什么比坚持对成功的意义更大!

发布了5 篇原创文章 · 获赞 3 · 访问量 83

猜你喜欢

转载自blog.csdn.net/weixin_43838503/article/details/104473752