centos9上布置pxe+kickstart多系统

实验环境:vmware esxi6.7.0

纳管平台:vmware vcenter

说明:部署环境centos9,被引导系统以centos9为例,其他的系统自行扩充

参考:kickstart+pxe 多系统引导服务器搭建 - 咿呀哒喏 - 博客园

环境准备

systemctl disable firewalld.service --now
setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/'/etc/selinux/config

1. 装包

yum -y install dhcp-server tftp httpd

2. 配置dhcp

[root@centos9 ~]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#

log-facility local7;

# A slightly different configuration for an internal subnet.
subnet 192.168.116.0 netmask 255.255.255.0 {
  range 192.168.116.10 192.168.116.20;
  option domain-name-servers ks.pxe.dhcp;  #域名,一般写入被dhcp分配IP的服务器hosts文件中
  option domain-name "pxe.dhcp";    #域
  option routers 192.168.116.1;
  option domain-name-servers 8.8.8.8;
  option broadcast-address 192.168.116.255;
  default-lease-time 600;  #默认租期
  max-lease-time 7200;       #最大租期,无默认租期时使用
  next-server 192.168.116.90;  #tftp服务器
  filename "pxe/pxelinux.0";   #pxe文件目录
}

3. 配置httpd

注注:此处以centos9为例,每加一个系统,需要加一个挂载的ISO,和一个对应的ks文件;然后在tftp目录下修改pxelinux.cfg/default文件增加对该系统的引导标签【label】,并复制对应的引导文件到该目录下

[root@centos9 ~]# mkdir /var/www/html/{centos9,ks}
[root@centos9 ~]# mount /dev/sr0 /var/www/html/centos9
mount: /var/www/html/centos9: WARNING: source write-protected, mounted read-only.
[root@centos9 ~]# cat /var/www/html/ks/c9_ks.cfg 
#version=RHEL
# Use graphical/text install  #图形化/字符安装界面
#text
graphical

#使用系统上的第一个光驱执行安装
#cdrom
#装机使用的yum源
#repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream

#要实际运行安装,必须指定 cdrom、harddrive、hmc、nfs、liveimg 或 url 之一
url --url=http://192.168.116.90/centos9

#最小化安装,及其他预装应用
%packages
@^minimal-environment
kexec-tools
bash-completion

%end

#使用美式键盘
keyboard --xlayouts='us'
#系统默认语言设置,即环境变量$LANG,--addsupport添加对附加语言的支持
lang en_US.UTF-8 --addsupport=zh_CN

#设置主机名
network  --hostname=santiagod.ks
#IP设置,需指明device,否则会取消后续所有network指令
#network --bootproto=static --ip=192.168.122.10 --netmask=255.255.255.0 --gateway=192.168.122.1 --nameserver=8.8.8.8,114.114.114.114 --device=ens192


#enable时,系统第一次引导时启动 Initial Setup,设置语言、鼠标、键盘、root 密码、安全级别、时区以及默认网络配置。默认为disable
firstboot --disable

#使用这个选项在没有用户互动的情况下接受最终用户许可证协议(End User License Agreement,EULA)。指定这个选项可防止 Initial Setup 在完成安装并第一次重启系统后提示您接受该许可证
eula --agreed

#系统时区上海,使用UTC时间,不开启时间同步
timezone Asia/Shanghai --isUtc --nontp

# Root password: Admin123! #centos9默认会禁用root的ssh远程
rootpw --iscrypted --allow-ssh $6$uMfDCfQnqrZgk/yL$F.DkU0TF2k14QNqLUv.cc8X16ZUXGe/8Q./rspkY1tKnmOywrgcBx.eEA7u9oWT/u2T6jzNM410EL1Uy5oPk9/

#禁用selinux与firewalld
firewall --disabled
selinux  --disabled

#安装完成后,重启系统
#--eject - 在重新启动前尝试弹出可引导介质(DVD、USB 或其他介质)
reboot --eject

%include /tmp/part-include

#禁用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


#------------------------------------------------------------------------------------------------------------------------------------------------------
%pre

###设置系统盘
#找到大于10G的盘
disk=$(while read line;do awk 'BEGIN{} {if ($3 >= "10485760" && $2 == "0") print $4} END{}';done < /proc/partitions|grep -Ew 'sda|vda|hda')
#disk=sda,vda,hda

cat > /tmp/part-include << EOF_PART
#ignoredisk --only-use=$disk
clearpart --drives=$disk --all --initlabel

#基于 UEFI 的 AMD64、Intel 64 和 64 位 ARM 需要 200 MiB EFI 系统分区。推荐的最小值是 200 MiB,默认大小为 600 MiB,最大为 600 MiB。BIOS 系统不需要 EFI 系统分区
part /boot/efi --fstype="efi" --ondisk=$disk --size=600 --fsoptions="umask=0077,shortname=winnt"
#将sda创建为ID:311的物理卷,最小10G,若磁盘大于10G,也全部做成物理卷
#--grow 自增长
part pv.311 --fstype="lvmpv" --ondisk=$disk --size=10240 --grow
#boot分区,建议大小1G
part /boot --fstype="xfs" --ondisk=$disk --size=1024
#将pv.311加入卷组,默认pe大小4M
volgroup santiagod --pesize=4096 pv.311
#逻辑卷-交换空间,视磁盘大小而定,为安装时的系统盘大小10%
logvol swap --fstype="swap" --recommended --name=swap --vgname=santiagod
#逻辑卷-根分区,虽然 5 GiB 根文件系统允许您最小安装,但建议至少分配 10 GiB,以便可以尽可能安装您想要的软件包组
logvol / --fstype="xfs" --size=10240 --grow --name=root --vgname=santiagod

EOF_PART
#-------------------------------------------------------------------------------------------------------------

%end

4. 配置tftp+pxe

注:c32文件需要从本地linux系统中拷贝出来,不能直接从iso中提取

[root@centos9 ~]# mkdir -p /var/lib/tftpboot/pxe/pxelinux.cfg/
[root@centos9 ~]# ls /usr/share/syslinux/
altmbr.bin    cpuid.c32      elf.c32       ifcpu64.c32     isolinux.bin        libutil.c32  meminfo.c32   reboot.c32      vesainfo.c32
altmbr_c.bin  cpuidtest.c32  ethersel.c32  ifcpu.c32       isolinux-debug.bin  linux.c32    menu.c32      rosh.c32        vesamenu.c32
altmbr_f.bin  debug.c32      gfxboot.c32   ifmemdsk.c32    kbdmap.c32          lpxelinux.0  pci.c32       sanboot.c32     vpdtest.c32
cat.c32       dhcp.c32       gptmbr.bin    ifplop.c32      kontron_wdt.c32     ls.c32       pcitest.c32   sdi.c32         whichsys.c32
chain.c32     diag           gptmbr_c.bin  isohdpfx.bin    ldlinux.c32         lua.c32      pmload.c32    sysdump.c32     zzjson.c32
cmd.c32       dir.c32        gptmbr_f.bin  isohdpfx_c.bin  lfs.c32             mboot.c32    poweroff.c32  syslinux64.exe
cmenu.c32     disk.c32       gpxecmd.c32   isohdpfx_f.bin  libcom32.c32        mbr.bin      prdhcp.c32    syslinux.c32
config.c32    dmi.c32        hdt.c32       isohdppx.bin    libgpl.c32          mbr_c.bin    pwd.c32       syslinux.com
cptime.c32    dmitest.c32    hexdump.c32   isohdppx_c.bin  liblua.c32          mbr_f.bin    pxechn.c32    syslinux.exe
cpu.c32       dosutil        host.c32      isohdppx_f.bin  libmenu.c32         memdisk      pxelinux.0    vesa.c32
[root@centos9 ~]# cp /usr/share/syslinux/{pxelinux.0,ldlinux.c32,libcom32.c32,vesamenu.c32,libutil.c32} /var/lib/tftpboot/pxe/

[root@centos9 ~]# cat /var/lib/tftpboot/pxe/pxelinux.cfg/default 

timeout 60
default vesamenu.c32
timeout 60

display boot.msg

# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png
menu title CentOS Linux
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13

# Border Area
menu color border * #00000000 #00000000 none

# Selected item
menu color sel 0 #ffffffff #00000000 none

# Title bar
menu color title 0 #ff7ba3d0 #00000000 none

# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none

# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none

# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none

# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none

# Help text
menu color help 0 #ffffffff #00000000 none

# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none

# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none

# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none

# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.

menu tabmsg Press Tab for full configuration options on menu items.

menu separator # insert an empty line
menu separator # insert an empty line


label Install linux 9 [auto]
  menu label ^Install centos Linux 9 [auto]
  menu default
  kernel centos9/vmlinuz
  append initrd=centos9/initrd.img  inst.ks=http://192.168.116.90/ks/c9_ks.cfg inst.stage2=http://192.168.116.90/centos9 quit


label Install linux 9 [manual]
  menu label ^Install centos Linux 9 [manual]
  kernel centos9/vmlinuz
  append initrd=centos9/initrd.img  inst.stage2=http://192.168.116.90/centos9 quit

注:default文件中引用到的文件都必须要保证,如vesamenu.c32,splash.png,centos9/vmlinuzd等。

注注:引导多系统时,在default文件末尾添加label即可,格式如下:

label Install linux 8 [auto]

  menu label ^Install centos Linux 8 [auto]

  menu default  #所以label中,有且只能有一个该选项,表示默认引导选项

  kernel centos8/vmlinuz  #文件相对路径,相对于dhcp引导到的tftp目录

  append initrd=centos8/initrd.img  inst.ks=http://192.168.116.90/ks/c8_ks.cfg  inst.stage2=http://192.168.116.90/centos8 quit  #注意inst.stage2对应的iso文件主目录一定不能出问题,否则装机时文件读取会出现异常

注:splash.png 可以在iso目录下复制,多系统时,只需要一份splash.png即可。

注注:引导多系统时,需按照如下步骤,在tftp目录下创建一个引导文件目录:cp /var/www/html/centos8/isolinux/ /var/lib/tftpboot/pxe/centos8

[root@centos9 ~]# cp /var/www/html/centos9/isolinux/ /var/lib/tftpboot/pxe/centos9
[root@centos9 ~]# cp /var/www/html/centos9/isolinux/splash.png /var/lib/tftpboot/pxe/
[root@centos9 ~]# tree /var/lib/tftpboot/pxe/
/var/lib/tftpboot/pxe/
├── centos9
│   ├── boot.cat
│   ├── boot.msg
│   ├── grub.conf
│   ├── initrd.img
│   ├── isolinux.bin
│   ├── isolinux.cfg
│   ├── ldlinux.c32
│   ├── libcom32.c32
│   ├── libutil.c32
│   ├── memtest
│   ├── splash.png
│   ├── TRANS.TBL
│   ├── vesamenu.c32
│   └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── pxelinux.0
├── pxelinux.cfg
│   └── default
├── splash.png
└── vesamenu.c32

2 directories, 21 files
[root@centos9 ~]# ls /var/www/html/
centos9  ks
[root@centos9 ~]# ls /var/www/html/*
/var/www/html/centos9:
AppStream  BaseOS  EFI  EULA  extra_files.json  images  isolinux  LICENSE  media.repo  TRANS.TBL

/var/www/html/ks:
c9_ks.cfg

5. 启服务

注:重启系统后,也需要先检查服务是否已启动

systemctl restart tftp dhcpd httpd

最后从vcenter上创建一个同网段(同vlan,保证网络畅通)的空白虚拟机,从bios启动,启服务后,由于没有系统盘和安装介质,会自动遍历所有启动项,直到网络启动,进入pxe启动。

注:按照正常启动顺序

先dhcp分配IP,然后dhcp的next server 引导到tftp目录,然后tftp目录下pxe的default文件引导到装机镜像挂载目录(httpd提供),然后ks自动装机。

注:实验时,请保证该网段只有自己的一台dhcp服务器 

  附:dhcp完成后截图

现象1:tftp读取文件失败

原因:防火墙问题或者目录错误

分析:防火墙或selinux策略导致tftp,http等服务访问失败;或者提供的vmlinux或initrd.img目录错误(以tftp目录为根目录的绝对路径)。

现象2:tftp识别正常后,卡在 'boot:' 界面

原因:default文件读取异常

分析:c32文件必须从本地拷贝到tftp目录,如果从iso中拷贝可能造成本地系统无法正常识别该文件,导致后续任务失败,一般会卡在boot界面,没有任何输出

注:当存在多个dhcp服务器时(如vmware workstation  NAT模式自带dhcp服务【需要禁用】),也可能出现如下现象,可修改自己的DHCP的IP池,查看服务器被分配的IP是否为池内的第一个IP(默认从IP池内第一个IP开始分配)。

以下为default文件引导正常的界面

问题3:http读取文件失败

原因:防火墙或者目录错误或权限不足

分析:查看对应目录的权限和文件内容,请保证浏览器http可正常访问该目录,且保证至少有读取和执行权限:555

正常安装画面,ks应答会自动跳过手动交互:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个搭建无人值守系统安装服务器的示例代码: 1. 配置 DHCP 服务 在 DHCP 服务器上,创建一个新的 DHCP 配置文件 `/etc/dhcp/dhcpd.conf`,并添加以下内容: ``` subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option domain-name-servers 8.8.8.8; option routers 192.168.1.1; option broadcast-address 192.168.1.255; default-lease-time 600; max-lease-time 7200; next-server 192.168.1.2; filename "pxelinux.0"; } ``` 这个配置文件指定了 DHCP 服务器的 IP 地址池(192.168.1.100 到 192.168.1.200),DNS 服务器地址(8.8.8.8),网关地址(192.168.1.1),并将默认租约时间设置为 10 分钟。 注意,这个配置文件中的 `next-server` 和 `filename` 属性指定了 PXE 服务器的 IP 地址和启动文件名。在这个示例中,我们将 PXE 服务器的 IP 地址设置为 `192.168.1.2`,将启动文件名设置为 `pxelinux.0`。 2. 配置 TFTP 服务 在 PXE 服务器上,安装 TFTP 服务器软件,并将启动文件 `pxelinux.0` 复制到 TFTP 服务器的根目录下。 3. 配置 Kickstart 文件 创建一个 Kickstart 文件 `ks.cfg`,并将其放置在 PXE 服务器的根目录下。以下是一个示例 Kickstart 文件的内容: ``` # Install OS instead of upgrade install # Use graphical installer graphical # Set up network network --bootproto=dhcp --device=eth0 # Set up root password rootpw --iscrypted $6$SALT$HASH # Configure timezone timezone Asia/Shanghai --utc # Configure partitioning autopart --type=lvm # Configure packages to install %packages @^minimal @core kexec-tools %end ``` 这个 Kickstart 文件将使用图形界面安装 CentOS 操作系统,并自动配置网络、设置 root 密码、设置时区、使用 LVM 分区,以及安装一些基本的软件包。 注意,这个 Kickstart 文件中的 `--bootproto` 参数指定了使用 DHCP 自动配置网络。这个参数的值应该与 DHCP 配置文件中的 `bootproto` 属性保持一致。 4. 配置 PXE 引导文件 创建一个 PXE 引导文件 `pxelinux.cfg/default`,并添加以下内容: ``` default ks prompt 0 timeout 300 label ks kernel vmlinuz append initrd=initrd.img ks=http://192.168.1.2/ks.cfg ``` 这个 PXE 引导文件将使用 `vmlinuz` 和 `initrd.img` 内核文件,以及之前创建的 Kickstart 文件 `ks.cfg` 来启动自动安装程序。 注意,这个 PXE 引导文件中的 `ks` 标签指定了使用 Kickstart 文件自动安装系统,`kernel` 和 `initrd` 属性指定了内核文件,`append` 属性指定了 Kickstart 文件的 URL。 5. 启动 PXE 客户端 现在,启动一个 PXE 客户端并让其从网络引导。在启动过程中,客户端将自动从 DHCP 服务器获取 IP 地址,并下载启动文件 `pxelinux.0`。一旦下载完成,客户端将执行这个启动文件,并自动安装操作系统。 注意,整个过程是无人值守的,只需要启动客户端并等待自动安装完成即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值