从 1 到 0 构建博客项目(6) -- 操作系统篇(3)PXE 批量安装系统(EFI+BIOS)

又又又是安装操作系统.....

这次是PXE网络批量安装, 其实cobbler也可以.

操作系统启动有2种方式, BIOS和UEFI, 算了我之前讲过了,就不扯了.

本文适用于 Centos, Redhat 和OEL(oracle linux)

本次操作系统版本为: Centos7.6

1.相关介绍

官网地址:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/installation_guide/chap-installation-server-setup

192.168.11.32 为本次实验的服务端, 另还需两台作为客户端(分别测试bios和efi).

本文是参考官网的来的,其实基本上都一样.

建议先阅读定制镜像https://cloud.tencent.com/developer/article/1700557 ,本文很多没有讲的内容和细节,那篇都讲了的, 不看也没关系,并不影响阅读本教材.

服务介绍:

dhcp: 用来给客户端分配IP地址和指定启动文件的

tftp: 传输启动文件的

ftp/http : 传输软件包的(http速度要快一些)

目录规范:

/var/lib/tftpboot/pxelinux 传统的BIOS启动文件目录

/var/lib/tftpboot/uefi :UEFI启动文件的目录

/os/centos7.8 :centos7.8的软件目录, 这样其它版本的系统就用其它版本的镜像,方便管理

/os/ks.cfg :kickstart应答文件

2. 安装相应软件并配置:

提前说明:

得先准备好yum源和镜像哈, 这个我就不演示了,没必要.(本次实验使用的本地yum,镜像挂载在/mnt下面的)

安装完相应软件之后得配置selinux和防火墙,比较麻烦我就直接先关了.

本教程是以命令为主的, 也就是说如果系统版本一样的话, 可以全部复制我给出的命令,不用手敲.

2.1 安装dhcp

2.1.1安装

yum install dhcp -y

2.1.2配置

网段和网关要修改为你自己的哈.

本次的网关为: 192.168.11.32 (就是pxe服务器, 如果你有专门的网关,就设置为它就是了)

本次的网段为: 192.168.11.33 192.168.11.40

pxe服务器地址: 192.168.11.32

cat << EOF > /etc/dhcp/dhcpd.conf
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;

subnet 192.168.11.0 netmask 255.255.255.0 {
  option routers 192.168.11.32;
  range 192.168.11.33 192.168.11.40;

  class "pxeclients" {
      match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
      next-server 192.168.11.32;

      if option architecture-type = 00:07 or option architecture-type = 00:09 {
        filename "uefi/grubx64.efi";
      } else {
        filename "pxelinux/pxelinux.0";
      }
  }
}

EOF

然后启动dhcpd服务,并设置开机自启

systemctl start dhcpd
systemctl enable dhcpd

2.2 安装tftp

2.2.1 安装tftp和xinetd

yum install xinetd tftp -y

2.2.2 配置tfpt

修改/etc/xinetd.d/tftp 将disable = YES 改为 disable = NO

sed -i '/disable/c\\\\tdisable\\t\\t\\t=no' /etc/xinetd.d/tftp

然后重启服务并设置开机自启:

systemctl restart xinetd tftp
systemctl enable xinetd tftp

2.3 安装vsftp (我这里就用ftp了, 你们可以按照自己的需求换成http或者nginx都可以的)

2.3.1安装

yum install vsftpd -y

2.3.2配置

将local_enable=yes改为local_enable=NO 并添加:anon_root=/os

sed -i '/local_enable/clocal_enable=NO' /etc/vsftpd/vsftpd.conf
echo "anon_root=/os" >>  /etc/vsftpd/vsftpd.conf

然后重启服务并设置开机自启

systemctl restart vsftpd
systemctl enable vsftpd

3 配置efi和bios启动

前面的你应该都会, 比较很基础的, 不会的认真看也不难哈. 下面开始正式配置了

3.1 复制efi文件并配置grub.cfg

3.1.1 提取引导文件并拷贝到相应目录

我的是这个版本,你自己的版本要跟着变哈

如果你不会用rpm2cpio命令的话, 你直接把相应的rpm包安装好,再拷贝对应目录的文件也行.

cd /tmp
cp -pr /mnt/Packages/shim-x64-15-2.el7.centos.x86_64.rpm /tmp
cp -pr /mnt/Packages/grub2-efi-x64-2.02-0.81.el7.centos.x86_64.rpm /tmp
rpm2cpio /tmp/shim-x64-15-2.el7.centos.x86_64.rpm | cpio -dimv
rpm2cpio /tmp/grub2-efi-x64-2.02-0.81.el7.centos.x86_64.rpm | cpio -dimv
mkdir -p /var/lib/tftpboot/uefi
cp /tmp/boot/efi/EFI/centos/shim.efi /var/lib/tftpboot/uefi/
cp /tmp/boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/uefi/
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/uefi/
chmod +r /var/lib/tftpboot/uefi/{grubx64.efi,shim.efi}
#权限这儿 是个小坑, 这文件居然默认没得读权限....

3.1.2 编辑grub引导配置文件

这个界面比较简陋, 你可以参考我之前写的grub.cfg的配置https://cloud.tencent.com/developer/article/1700557

所以我也就不解释了.

cat << EOF > /var/lib/tftpboot/uefi/grub.cfg
set timeout=6
  menuentry 'Centos 7.6' {
  linuxefi uefi/vmlinuz ip=dhcp ks=ftp://192.168.11.32/ks.cfg inst.repo=ftp://192.168.11.32/centos7.6
  initrdefi uefi/initrd.img
}
EOF

够简单吧...

3.2 复制BIOS相应文件并配置default

这个是配置BIOS启动的, 如果你不要的话,可以跳过本章(3.2)

3.2.1提取pxe引导文件并复制相应文件

cd /tmp
cp -pr /mnt/Packages/syslinux-4.05-15.el7.x86_64.rpm /tmp
rpm2cpio /tmp/syslinux-4.05-15.el7.x86_64.rpm | cpio -dimv
mkdir -p /var/lib/tftpboot/pxelinux
cp /tmp/usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux
mkdir -p /var/lib/tftpboot/pxelinux/pxelinux.cfg
cp -p /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/
cp -p /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/pxelinux/

3.2.2 配置default (默认就是这个名字....)

这个配置就是isolinux.cfg, 你也可以参考我之前写的isolinux.cfg配置https://cloud.tencent.com/developer/article/1700557

所以我就不解释了

cat << EOF > /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
default vesamenu.c32
prompt 1
timeout 60

display boot.msg

label linux
  menu label ^Install system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.11.32/ks.cfg ip=dhcp inst.repo=ftp://192.168.11.32/centos7.6
label vesa
  menu label Install system with ^basic video drive
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.11.32/ks.cfg ip=dhcp inst.xdriver=vesa nomodeset inst.repo=ftp://192.168.11.32/centos7.6
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
EOF

3.3 复制镜像文件

这个就比较简单了, 只需要复制LiveOS Packages repodata即可

mkdir -p /os/centos7.6
cp -ra /mnt/{LiveOS,Packages,repodata}  /os/centos7.6

3.4 配置ks.cfg应答文件

配置ks.cfg应答文件:你还是可以参考我之前写的ks.cfg https://cloud.tencent.com/developer/article/1700557

只是要多一个参数: url --url="ftp://192.168.11.32/centos7.6"

如下命令生成的ks.cfg默认root密码为: Ddcw@123.

注意: 密码结尾有个点

cat << EOF > /os/ks.cfg
auth --enableshadow --passalgo=sha512  #加密方式sha512
cdrom  #光盘安装
text   #字符安装,默认是图形化的
reboot #安装完要重启
firstboot --enable
ignoredisk --only-use=sda   #只用第一块盘
keyboard --vckeymap=us --xlayouts='us'  #设置键盘
lang en_US.UTF-8 --addsupport=zh_CN.UTF-8  #设置语言为英文,并添加中文支持
network  --bootproto=dhcp --device=ens32 --onboot=yes  #网卡配置
network  --hostname=ddcw  #主机名

#这个URL就是软件包的的位置, 本次使用的是ftp协议, 官方说用http要快些. 
url --url="ftp://192.168.11.32/centos7.6"

# Root password
#root密码为Ddcw@123.  不建议写明文
rootpw --iscrypted \\$6\\$jUSlp0oJSb3qDBLD\\$iN39gSuUvvKe6MupwHohdeEE368.UMeILf1z9hY4r6Ozw9xzdc7aWWwhesdepmRZpmq2n7RLLzlc8D866UTi/0
# System services
services --disabled="chronyd"
# System timezone
#时区为上海,不要NTP
timezone Asia/Shanghai  --nontp
# System bootloader configuration
#启动方式为mb
bootloader --location=mbr --boot-drive=sda
# Partition clearing information
#清除所有盘,没得的话,安装过系统的盘就无法使用
clearpart --all --initlabel

#分区信息
autopart --type=lvm #就自动分区吧。

#默认单位为MB
#part /boot --fstype="xfs" --ondisk=sda --size=512
#part pv.380 --fstype="lvmpv" --ondisk=sda --size=50000 #大概50GB,我也不想去弄那么精确的了..... 
#part /boot/efi --fstype="efi" --ondisk=sda --size=256 --fsoptions="umask=0077,shortname=winnt"
#volgroup vg01 --pesize=4096 pv.380
#logvol /var  --fstype="xfs" --size=4096 --name=var --vgname=vg01
#logvol /usr  --fstype="xfs" --size=4096 --name=usr --vgname=vg01
#logvol /opt  --fstype="xfs" --size=4096 --name=opt --vgname=vg01
#logvol /     --fstype="xfs" --size=16384 --name=root --vgname=vg01
#logvol swap  --fstype="swap" --size=8192 --name=swap --vgname=vg01
#logvol /home  --fstype="xfs" --size=8192 --name=home --vgname=vg01


#要安装的软件,@开头的是包组
%packages
@^minimal
@compat-libraries
@core
@system-admin-tools

%end


#安装后执行的程序,比如配置个yum啊之类的
%post
cat >> /etc/yum.repos.d/base.repo << eof
[base]
[os]
name=Qcloud centos os - \\$basearch
baseurl=http://mirrors.cloud.tencent.com/centos/\\$releasever/os/\\$basearch/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.cloud.tencent.com/centos/RPM-GPG-KEY-CentOS-7
eof
%end



#禁用kdump
%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

#设置密码策略之类的
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
EOF

4.验证:

没错就是这么简单, 现在这台服务器已经是pxe服务器了, 同时支持bios和EFI启动.

4.1验证PXE+UEFI

vmware虚拟机需要设置启动方式为UEFI:

编辑虚拟机 --> 选项 --> 高级 --> 勾上 通过EFI而非BIOS引导

等安装完之后,登录即可 默认密码: Ddcw@123.

4.2验证PXE+BIOS

默认就是从BIOS启动

5. 经验分享

有的小伙伴可能遇到如下的报错

这是由于没有拷贝 LiveOS 目录

至此操作系统篇就告一段落了

喜欢的可以关注我的B站账号, 后续应该会出视频教程.

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
从 1 到 0 构建博客项目(6) -- 操作系统篇(3)PXE 批量安装系统(EFI+BIOS)
官网地址:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/ht...
<<上一篇
下一篇>>