从 1 到 0 构建博客项目(6) -- 操作系统篇(3)PXE 批量安装系统(EFI+BIOS)
又又又是安装操作系统.....
这次是PXE网络批量安装, 其实cobbler也可以.
操作系统启动有2种方式, BIOS和UEFI, 算了我之前讲过了,就不扯了.
本文适用于 Centos, Redhat 和OEL(oracle linux)
本次操作系统版本为: Centos7.6
1.相关介绍
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站账号, 后续应该会出视频教程.