欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

PXE——无人值守自动安装Linux操作系统(踩坑记录)

程序员文章站 2022-05-01 20:53:43
DHCP服务 DHCP服务器主要实现在企业 内部网络 为客户端 分配IP地址 等网络参数。 在无人值守环境中,当客户端选择从网络启动后,就会通过 发送广播数据包 的形式 寻找DHCP服务器 ,从DHCP 获得IP地址 等参数后才可以通过TFTP共享读取启动文件。 (1)安装DHCP服务操作 (2)修 ......

PXE——无人值守自动安装Linux操作系统(踩坑记录)

dhcp服务

dhcp服务器主要实现在企业内部网络为客户端分配ip地址等网络参数。

在无人值守环境中,当客户端选择从网络启动后,就会通过发送广播数据包的形式寻找dhcp服务器,从dhcp获得ip地址等参数后才可以通过tftp共享读取启动文件。

(1)安装dhcp服务操作 yum install -y dhcp
(2)修改配置文件以实现为客户端分配网络参数

[root@python ~]# vim /etc/dhcp/dhcp.conf
#dhcpd.conf
#
# sample configuration file for isc dhcpd
log-facility local7;

# a slightly different configuration for an internal subnet.
subnet 192.168.213.0 netmask 255.255.255.0 {
  range 192.168.213.3 192.168.213.254;
  option domain-name-servers 192.168.213.163;
  option subnet-mask 255.255.255.0;
  option routers 192.168.213.2;
  default-lease-time 600;
  max-lease-time 7200;
  next-server 192.168.213.163;
  filename "pxelinux.0";
}
[root@python ~]# systemctl start dhcpd
[root@python ~]# systemctl enable dhcpd
[root@python ~]# netstat -tunpl|grep 67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           5440/dhcpd
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1506/dnsmasq

tftp服务

tftp服务为客户端提供一种简单的文件共享,他不具备向ftp那样丰富的功能,不过由于简单的设计,tftp非常适用于传输小且简单的pxe启动文件。

#安装tftp
[root@python ~]# yum install -y tftp-server
#修改配置文件
[root@python ~]# cat /etc/xinetd.d/tftp
service tftp
{
        socket_type     = dgram
        protocol        = udp
        wait            = yes
        user            = root
        server          = /usr/sbin/in.tftpd
        server_args     = -s /var/lib/tftpboot
        disable         = no	#关闭禁用状态
        per_source      = 11
        cps             = 100 2
        flags           = ipv4
}

安装tftp的动态管理工具
tfpt是被xinetd动态管理的服务,启动服务,只需要启动xinetd即可

[root@python ~]# yum install xinetd
#将客户端所需要的启动引导文件复制到tftp服务器
[root@python ~]# yum install -y syslinux	#通过该软件包获取引导文件
[root@python ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@python ~]# mount -o loop -t iso9660 /iso/centos-7-x86_64-dvd-1908.iso /var/ftp/centos7u7
[root@python ~]# cp /var/ftp/centos7u7/isolinux/vmlinuz /var/lib/tftpboot/centos7u7/
[root@python ~]# cp /var/ftp/centos7u7/isolinux/vesamenu.c32 /var/lib/tftpboot
[root@python ~]# cp /var/ftp/centos7u7/isolinux/initrd.img /var/lib/tftpboot/centos7u7/
[root@python ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@python ~]# cp /var/ftp/centos7u7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@python ~]# cd /var/lib/tftpboot/pxelinux.cfg/
[root@python pxelinux.cfg]# chmod 644 default
[root@python ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 60
display boot.msg
menu background splash.jpg
menu title centos x of zhao

label centos7 64 <auto installation>
  menu label install centos linux ^7 x86_64 <auto>
  kernel centos7u7/vmlinuz
  append initrd=centos7u7/initrd.img inst.stage2=ftp://192.168.213.163/centos7u7 inst.repo=ftp://192.168.213.163/centos7u7 inst.ks=ftp://192.168.213.163/centos-7-ks.cfg

label local
  menu default
  menu label boot from ^local drive
  localboot 0xffff

menu end
#准备图片
[root@python ~]# cp splash.jpg /var/lib/tftpboot/splash.jpg
[root@python ~]# systemctl start xinetd
[root@python ~]# systemctl enable xinetd
[root@python ~]# ss -nutlp|grep 69
udp    unconn     0      0         *:69                    *:*                   users:(("xinetd",pid=14264,fd=5))

ftp服务

ftp(file transfer protocol)文件传输协议,vsftp就是一种利用ftp协议进行数据共享的软件,vsftp主要特色就是提供一种安全的数据共享服务

使用vsftp作为centos系统文件的共享服务平台,当客户端从网络从网络启动正式进入到安装界面后,还需要读取centos光盘中的系统文件,以完成最后的安装,这些文件就通过vsftp共享给网络用户。

[root@python ~]# yum install -y vsftpd
[root@python ~]# systemctl start vsftpd
[root@python ~]# systemctl enable vsftpd

自动化安装实例

初始化系统环境

[root@python ~]# systemctl stop firewalld
[root@python ~]# systemctl disable firewalld
[root@python ~]# sed -i.bak 's/=enforcing/=disabled/' /etc/sysconfig/selinux
[root@python ~]# sed -i.bak 's/=enforcing/=disabled/' /etc/selinux/config
[root@python ~]# setenforce 0
[root@python ~]# cd /var/ftp/

创建安装目录结构

[root@python ftp]# mkdir centos6u8
[root@python ftp]# mkdir centos7u7
[root@python ftp]# cd /var/lib/tftpboot/
[root@python tftpboot]# mkdir centos6u8
[root@python tftpboot]# mkdir centos7u7

配置启动dhcp

配置启动tftp

创建自动应答文件

[root@python ~]# yum install system-config-kickstart
[root@python ~]# system-config-kickstart
#检查有无语法错误
[root@python ~]# ksvalidator ks.cfg
[root@python ~]# mv ks.cfg /var/ftp/centos-7-ks.cfg

自动安装虚拟机测试

踩坑

(1)引导装载程序选项
PXE——无人值守自动安装Linux操作系统(踩坑记录)

# system bootloader configuration
bootloader --location=mbr	#在主引导记录(mbr)中安装引导装载程序
# partition clearing information
clearpart --all

若不安装引导装载程序(如下),开机会黑屏,卡在booting from local disk

# system bootloader configuration
bootloader --location=none

内核参数添加 net.ifnames=0 biosdevname=0,会修改网卡名称为eth0

# system bootloader configuration
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr

(2)安装方法
PXE——无人值守自动安装Linux操作系统(踩坑记录)ftp目录也可在配置文件centos-7-ks.cfg中修改

(3)记得挂载镜像
mount -o loop -t iso9660 /iso/centos-7-x86_64-dvd-1908.iso /var/ftp/centos7u7

若不挂载,会报错 can't find installer maininage path in .treeinfo

warning: can't find installer maininage path in .treeinfo
warning: downloading 'ftp://192.168.213.163/centos7u7/live0s/squashfs.img' failed!
warning anaconda: failed to fetch stage2 from ftp://192.168.213.163/centos7u7

(4)导出ks.cfg文件后,要修改名称,在最后添加如下内容

%packages
@^minimal
@core
%end

(5)装机图片有尺寸(640像素*480像素)要求,不符合要求的可能图片会显示失败
(6)不正确的镜像可能会使操作系统安装失败

测试centos-6.10-x86_64-minimal.iso无法全自动安装
PXE——无人值守自动安装Linux操作系统(踩坑记录)
(7)报错 failed to fetch kickstat from ftp
可能是selinux没关或ftp未设置匿名模式
(8)vmware workstation 与 device/credential guard 不兼容
以管理员身份运行windows powershell (管理员)(windows键+x),运行命令bcdedit /set hypervisorlaunchtype off,重启电脑

此问题应该与windows的系统版本有关,是在windows 10自动更新后出现的