使用PXE实现自动化安装rockylinux8.10

PXE

一、简介

  • 实现多台服务器自动化安装系统。

二、部署

  • 这里宿主机是 centos7PXE 部署的是 rockylinux8.10
  • 宿主机需提前关闭 selinux 和防火墙。

2.1 部署 dhcp

  1. 安装 dhcp
shell 复制代码
[root@test-server ~]# yum install -y dhcp
  1. 修改配置文件
shell 复制代码
# 复制默认的配置文件
[root@test-server ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf 
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y

# 修改配置文件,修改几行即可,其他不用动,测试下来这里面的指定地址池没生效
[root@test-server ~]# vim /etc/dhcp/dhcpd.conf
14 ddns-update-style none;  # 取消这行的注释
32 subnet 192.168.88.0 netmask 255.255.255.0 {  # 指定网段
33   range dynamic-bootp 192.168.88.160 192.168.88.210;  # 指定地址池
34   option routers 192.168.88.1;  # 指定网关
35   option domain-name-servers 8.8.8.8;  # 指定DNS
36   next-server 192.168.88.1;  # 指定tftp服务器地址
37   filename "pxelinux.0";  # 指定pxe引导程序的文件名
38 }
  1. 启动 dhcp
shell 复制代码
# 根据自己情况是否设置开机自启
[root@test-server ~]# systemctl start dhcpd
[root@test-server ~]# systemctl status dhcpd

2.2 部署 tftp

  1. 安装 tftp
shell 复制代码
# 这里tftp依赖于xinetd,所以这里也安装一下xinetd
[root@test-server ~]# yum -y install tftp-server xinetd
  1. 修改配置文件
shell 复制代码
# 修改wait disable后面的即可
[root@test-server ~]# vim /etc/xinetd.d/tftp
service tftp
{
    socket_type     = dgram
    protocol        = udp
    wait            = no  # yes:一台一台的连接; no:允许多台一起连接
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /var/lib/tftpboot
    disable         = no  # yes:关闭tftp; no:开启tftp
    per_source      = 11
    cps         = 100 2
    flags           = IPv4
}
  1. 启动 tftp
shell 复制代码
# 根据自己情况设置开机自启
[root@test-server ~]# systemctl start xinetd
[root@test-server ~]# systemctl start tftp

[root@test-server ~]# systemctl status xinetd
[root@test-server ~]# systemctl status tftp

2.3 部署 http

这里也可以安装 nginxftp

shell 复制代码
# 安装
[root@test-server ~]# yum install -y httpd

# 启动
[root@test-server ~]# systemctl start httpd

# 确保启动成功
[root@test-server ~]# systemctl status httpd

# 挂载光盘镜像
[root@test-server ~]# mkdir /var/www/html/rockylinux8.10
[root@test-server ~]# mount -t iso9660 /data/iso/Rocky-8.10-x86_64-dvd1.iso /var/www/html/rockylinux8.10

# 准备安装源,可选
[root@test-server ~]# vim /var/www/html/local.repo
[BaseOS]
name = BaseOS
baseurl = http://192.168.88.1/rockylinux8.10/BaseOS
enabled = 1
gpgcheck = 0

[AppStream]
name = AppStream
baseurl = http://192.168.88.1/rockylinux8.10/AppStream
enabled = 1
gpgcheck = 0

2.4 准备引导程序

shell 复制代码
[root@test-server ~]# yum install -y syslinux

# 复制几个文件到/var/lib/ftpboot下
[root@test-server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@test-server ~]# cp /var/www/html/rockylinux8.10/isolinux/initrd.img /var/lib/tftpboot/
[root@test-server ~]# cp /var/www/html/rockylinux8.10/isolinux/vmlinuz /var/lib/tftpboot/

2.5 配置启动菜单文件

shell 复制代码
# 注释不用写入
[root@test-server ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@test-server ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default linux  # 指定入口名称
prompt 0  # 0自动执行ks文件,1代表手动

label linux  # 安装模式,地址根据自己的情况修改,inst.ks指定的文件名要与后面编写的文件名一致
    kernel vmlinuz
    append initrd=initrd.img inst.repo=http://192.168.88.1/rockylinux8.10 root=live:http://192.168.88.1/rockylinux8.10/images/install.img inst.ks=http://192.168.88.1/rockylinux.cfg net.ifnames=0 biosdevname=0

2.6 编写 ks 文件

  • 这里 ks 文件可以用 system-config-kickstart 工具生成,我这里就直接编写了,可以自行搜索 system-config-kickstart 使用方法
shell 复制代码
# 生成密码
[root@test-server ~]# openssl passwd -1 "123456"
$1$NAAAcDvm$9aYMh4fRsFKjr1jPsjWXH.

[root@test-server ~]# vim /var/www/html/rockylinux.cfg 
# 安装系统,而不是升级系统
install

# 键盘设置
keyboard 'us'

# root密码
rootpw --iscrypted $1$NAAAcDvm$9aYMh4fRsFKjr1jPsjWXH.

# 系统语言
lang en_US

# 时区设置
timezone Asia/Shanghai

# 配置系统中用户密码的加密算法和存储位置
auth  --useshadow  --passalgo=sha512

# 配置安装方式,graphical图形化,text文本
# graphical
text

# 禁用系统首次启动设置向导
firstboot --disable

# 关闭selinux
selinux --disabled

# 关闭firewalld
firewall --disabled

# 网络配置,这里的device名称好像也可以成功
network  --bootproto=dhcp --device=eth0 --onboot=yes

# 安装完之后重启
reboot

# 网络源,根据自己实际情况填
url --url="http://192.168.88.1/rockylinux8.10"

# 系统引导加载配置
bootloader --location=mbr

# 擦除磁盘上的分区并初始化
zerombr
clearpart --all --initlabel

# 磁盘分区,默认单位是M,--grow --size=1代表剩余的都分给它
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=4096
part / --fstype="xfs" --grow --size=1

# 安装软件包和相关组
%packages
@^minimal-environment
bash-completion
net-tools
vim
%end

# 安装完毕运行的命令,这里写的是更新安装源
%post --interpreter=/bin/bash
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/local.repo http://192.168.88.1/local.repo
%end

三、使用

3.1 创建虚拟机

  • 基本上都是默认安装即可




  • 选择虚拟机存放目录

  • 配置 cpu

  • 配置内存,尽量给 2G2G 以上,不然会卡在那边,后面有图






  • 修改虚拟机的网络,根据自身实际情况修改

3.2 启动虚拟机

  • 如果卡在这边,将内存加到 2G 或以上即可。

  • 安装成功,用户名 root,密码 123456

四、总结

4.1 出现的问题

  1. default 文件中的第一行 default 指定的入口名称,不同版本都不太一样,一开始填的是 auto 不行。
  2. 内存问题,rockylinux8.10 要求的内存不能太低。
  3. 虚拟机安装的时候,有概率会出现 cpu 的问题,给这 cpu 配置中的 Virtualization Engine 下面的三个勾上就行了。
  4. 如果开机之后一开始就提示有什么找不到,请检查/var/lib/tftpboot/pxelinux.cfg/default 中的 append 那一行的 url 是否配置正确。
  5. 如果 /var/www/html/rockylinux.cfg 文件中的 packages 标注的组或者安装包,不存在,需要在安装过程中手动输入 yes 忽略。
  6. 如果安装 centos7 ,需要手动修改 defaultks 文件。

4.2 个人理解

  • 其实 pxe 中最重要的就是 default 文件和 ks 文件,default 文件指定安装源,ks 配置自动化安装。
  • 这里我使用的是在 ks 文件中指定文本安装,应该也可以在 default 中指定文本安装。
  • 这里我在 default 中就指定了一个 label,如果想添加多个系统的 pxe,可以添加多个 label
相关推荐
dessler43 分钟前
Docker-如何启动docker
运维·docker·云原生·容器·eureka
zhy2956343 分钟前
【DOCKER】基于DOCKER的服务之DUFS
运维·docker·容器·dufs
秋名山小桃子1 小时前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉121381 小时前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
努力学习的小廉1 小时前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei1 小时前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
Arenaschi1 小时前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试1 小时前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha2 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
蜜獾云2 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器