ljzsdut
GitHubToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeToggle Dark/Light/Auto modeBack to homepage

Pxe Dnsmasq

pxe安装Ubuntu1804

安装dnsmasq和nginx

nginx:HTTP服务器

dnsmasq:充当DNS、tftp、dhcp服务器

apt install -y nginx dnsmasq
root@pxe:~# egrep -v '^#|^$' /etc/dnsmasq.conf
server=114.114.114.144
dhcp-range=172.16.2.50,172.16.2.150,255.255.255.0,12h
dhcp-boot=ubuntu/1804/x86_64/pxelinux.0
enable-tftp
tftp-root=/var/ftpd
log-queries
log-dhcp

说明:

dhcp-range指定的范围要与部署dnsmasq的服务器处于一个网段中。

准备ubuntu kickstart配置文件

root@pxe:~# mkdir -pv /var/ftpd
root@pxe:~# mkdir -pv /var/www/html/{ubuntu,centos}/{x86_64,aarch_64}
root@pxe:~# mount ubuntu-18.04.5-server-amd64.iso /var/www/html/ubuntu/x86_64/
root@pxe:~# cat /var/www/html/ubuntu/ks.cfg
#Generated by Kickstart Configurator
#platform=AMD64 or Intel EM64T

#System language
lang en_US
#Language modules to install
langsupport en_US
#System keyboard
keyboard us
#System mouse
mouse
#System timezone
timezone Asia/Shanghai
#Root password
rootpw --iscrypted $1$randoma$h0gKBphJeu7P27YUe6rSU/
#Initial user
user inspur --fullname "inspur" --iscrypted --password $1$randoma$h0gKBphJeu7P27YUe6rSU/
#Reboot after installation
reboot
#Use text mode install
#text
#Install OS instead of upgrade
#install
#Use Web installation
url --url http://172.16.2.30/ubuntu/x86_64/
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype ext4 --size 1 --grow --asprimary
#System authorization infomation
auth  --useshadow  --enablemd5
#Network information
#network --bootproto=dhcp --device=eth0
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
%packages
openssh-server
openssh-client
net-tools
curl
%post
#curl -o /root/installationytungsingle_offline.tar.gz http://192.168.209.32/installationytungsingle_offline.tar.gz
#tar -zxvf /root/installationytungsingle_offline.tar.gz -C /root
#cd /root/installationytungsingle_offline
#bash install.sh
mkdir -p /root/.ssh ||true
cat >> /root/.ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbi3APCvlgZ0Wtp+FAwfIbPKsMudJkvQbsk2SNcmCczRGxWUwe8kFVixrJrw4WYNLUvZZzuAUEEIf8MCU4kFHXmLhM8DNAK4DCSOBEv3tkqRH2LK7vlV8M71rogu9Whw/40hPo6LUZOxrEqKtBdE9XHLeU8+dSHg/vExVzHgdkG+prQK/LH746FFLitzgchu0SkpPzPhy67R+a3A/p3GjJnZHQWf4J8ahZrIHBMwVyPqnfOyy0C8NM9zp/WqeQyY6gKT4PF+8uTABtkRp4LD1x8iM4yPe4+odXoJAsICGc04zkmC6yPvggskmL6fqPaSwwFvQamBY2E5gPwB8l7AQP
EOF
chmod 600 /root/.ssh/authorized_keys

ks文件可以使用system-config-kickstart工具进行生成。注意:尽量在相同的操作系统(发行版、版本)上进行生成,例如CentOS6的ks要使用CentOS6系统上生成;CentOS7的ks要使用CentOS7系统上生成;Ubuntu1804的ks要使用Ubuntu1804的系统生成。不能通用。

pxelinux BootLoader下载

解压放至网络引导启动的根路径下:

可以从如下途径获取pxelinux BootLoader:

  1. 从iso安装光盘中(ISOROOT/install/netboot)获取(推荐,最不容易出错,下面的其他方式都可能有版本不兼容问题)

  2. 从netboot安装包(netboot.tar.gz)中获取:Ubuntu系统Netboot Images下载

  3. 从syslinux安装包(syslinux-6.03.zip)中获取:获取syslinux安装包

经测试,下载的netboot有问题,改用iso中的netboot就没有问题。

root@pxe:~# mkdir -pv /var/ftpd/ubuntu/1804/{x86_64,arm64}
mkdir: created directory '/var/ftpd/ubuntu'
mkdir: created directory '/var/ftpd/ubuntu/1804'
mkdir: created directory '/var/ftpd/ubuntu/1804/x86_64'
mkdir: created directory '/var/ftpd/ubuntu/1804/arm64'

root@pxe:~# cp -rfa /var/www/html/ubuntu/x86_64/install/netboot/* /var/ftpd/ubuntu/1804/x86_64
root@pxe:~# tree /var/ftpd/ubuntu/1804/x86_64
/var/ftpd/ubuntu/1804/x86_64
├── ldlinux.c32 -> ubuntu-installer/amd64/boot-screens/ldlinux.c32
├── pxelinux.0 -> ubuntu-installer/amd64/pxelinux.0
├── pxelinux.cfg -> ubuntu-installer/amd64/pxelinux.cfg
├── ubuntu-installer
│   └── amd64
│       ├── boot-screens
│       │   ├── adtxt.cfg
│       │   ├── exithelp.cfg
│       │   ├── f10.txt
│       │   ├── f1.txt
│       │   ├── f2.txt
│       │   ├── f3.txt
│       │   ├── f4.txt
│       │   ├── f5.txt
│       │   ├── f6.txt
│       │   ├── f7.txt
│       │   ├── f8.txt
│       │   ├── f9.txt
│       │   ├── ldlinux.c32
│       │   ├── libcom32.c32
│       │   ├── libutil.c32
│       │   ├── menu.cfg
│       │   ├── prompt.cfg
│       │   ├── rqtxt.cfg
│       │   ├── splash.png
│       │   ├── stdmenu.cfg
│       │   ├── syslinux.cfg
│       │   ├── txt.cfg
│       │   └── vesamenu.c32
│       ├── initrd.gz
│       ├── linux
│       ├── pxelinux.0
│       └── pxelinux.cfg
│           └── default -> ../boot-screens/syslinux.cfg
└── version.info

5 directories, 30 files

配置引导启动菜单

root@pxe:~# vim /var/ftpd/ubuntu/1804/x86_64/pxelinux.cfg/default
root@pxe:~# cat /var/ftpd/ubuntu/1804/x86_64/pxelinux.cfg/default
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
path ubuntu-installer/amd64/boot-screens/
include ubuntu-installer/amd64/boot-screens/menu.cfg  # 引入其他配置,是菜单的总入口
default ubuntu-installer/amd64/boot-screens/vesamenu.c32  # 指定启动菜单
prompt 0
timeout 50

timeout 由0修改为50。

root@pxe:~# cat /var/ftpd/ubuntu/1804/x86_64/ubuntu-installer/amd64/boot-screens/txt.cfg
default install
label install
	menu label ^Install
	menu default
	kernel ubuntu-installer/amd64/linux
	#append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
	append ks=http://172.16.2.30/ubuntu/ks.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz live-installer/net-image=http://172.16.2.30/ubuntu/x86_64/install/filesystem.squashfs clock-setup/ntp=false ip=dhcp ksdevice=bootif --- quiet
label cli
	menu label ^Command-line install
	kernel ubuntu-installer/amd64/linux
	append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet

自己整合(可选)

原生的netboot目录下,通过include指定将多个pxelinux的配置文件组合在一起。我们也可以只提取我们关心的信息。形成自己的目录结构。这样文件数量比较少,比较简单 。

cd /var/ftpd/ubuntu/1804/x86_64

mkdir pxelinux.cfg
cp -rf /var/www/html/ubuntu/x86_64/install/netboot/ubuntu-installer/amd64/{initrd.gz,linux,pxelinux.0} .
cp -rf /var/www/html/ubuntu/x86_64/install/netboot/ubuntu-installer/amd64/boot-screens/ldlinux.c32 .
cp -rf /var/www/html/ubuntu/x86_64/install/netboot/ubuntu-installer/amd64/boot-screens/syslinux.cfg pxelinux.cfg/default

root@pxe:/var/ftpd/ubuntu/1804/x86_64# tree /var/ftpd/ubuntu/1804/x86_64
/var/ftpd/ubuntu/1804/x86_64
├── initrd.gz
├── ldlinux.c32
├── linux
├── pxelinux.0
└── pxelinux.cfg
    └── default

1 directory, 5 files

Pxelinux配置文件修改如下:

root@pxe:~# cat /var/ftpd/ubuntu/1804/x86_64/pxelinux.cfg/default
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
default install
label install
	menu label ^Install
	menu default
	kernel linux
	append ks=http://172.16.2.30/ubuntu/ks.cfg vga=788 initrd=initrd.gz live-installer/net-image=http://172.16.2.30/ubuntu/x86_64/install/filesystem.squashfs clock-setup/ntp=false ip=dhcp ksdevice=bootif --- quiet
prompt 0
timeout 1

配置文件注意点:

  1. ks参数指定kickstart配置文件。而ks文件中指定如何读取安装介质,例如cdrom、硬盘、ftp、http等。
  2. live-installer/net-image=filesystem.squashfs配置是必须的。filesystem.squashfs是一个只读文件系统。貌似从Ubuntu12.04开始,Pxe安装Ubuntu就需要指定这个文件,否则会报错。(个人理解:在这个文件系统中,运行anaconda程序读取ks文件。)
  3. if=dhcp,指定pxe启动临时系统是自动获取IP。可以手动配置:ip=10.12.190.183 netmask=255.255.255.0 gateway=10.12.13.254 dns=202.106.0.20
  4. ksdevice= 是为了指定使用哪块网卡,因为机器有多块网卡,无人值守会卡在这里。ksdevice=eth0

如果要进入启动菜单,则:

root@pxe:/var/ftpd/ubuntu/1804/x86_64# cp ubuntu-installer/amd64/boot-screens/vesamenu.c32 .
root@pxe:/var/ftpd/ubuntu/1804/x86_64# cp ubuntu-installer/amd64/boot-screens/libcom32.c32 .
root@pxe:/var/ftpd/ubuntu/1804/x86_64# cp ubuntu-installer/amd64/boot-screens/libutil.c32 .
# vesamenu.c32会依赖libcom32.c32、libutil.c32。

# 配置文件中配置启动菜单:default指令
root@pxe:/var/ftpd/ubuntu/1804/x86_64# cat pxelinux.cfg/default
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
default vesamenu.c32
#menu background splash.png
menu color title        * #FFFFFFFF *
MENU TITLE INSPUR OS INSTALLER
label install
	menu label ^Install
	menu default
	kernel linux
	append ks=http://172.16.2.30/ubuntu/ks.cfg vga=788 initrd=initrd.gz live-installer/net-image=http://172.16.2.30/ubuntu/x86_64/install/filesystem.squashfs clock-setup/ntp=false ip=dhcp ksdevice=bootif --- quiet
prompt 0
timeout 50

引导方式:UEFI+Legacy

UEFI和Legacy模式PXE安装操作系统原理一致,不同模式安装仅有启动文件不同,UEFI模式下获取对应的启动文件即可。

pxe文件获取(UEFI)模式:

1. 执行mount /dev/cdrom /mnt命令将光盘挂载至/mnt目录下 2. 执行cd /mnt/EFI/BOOT/命令进入光盘启动文件目录下 3. 执行cp BOOTX64.EFI grub.cfg grubx64.efi /var/lib/tftpboot/   cp /mnt/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/命令将相关启动文件复制到tftp服务根目录下 4. 执行vim /var/lib/tftpboot/grub.cfg命令编辑grub.cfg文件

# CENTOS
mount /dev/cdrom /mnt
cd /mnt/EFI/BOOT/
cp BOOTX64.EFI grub.cfg grubx64.efi /var/lib/tftpboot/   
cp /mnt/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
vim /var/lib/tftpboot/grub.cfg
   set default="0" 
   set timeout=3 
   menuentry 'Install CentOS Linux 8.0.1905' { 
			linuxefi /vmlinuz ip=dhcp ks=http://PXE源服务器IP地址/ks.cfg 
   		initrdefi /initrd.img
   }
   
dhcp服务中要将dhcp-boot=ubuntu/1804/x86_64/pxelinux.0修改为BOOTX64.EFI
# Ubuntu

root@pve02:~/pxeboot/html/ubuntu/x86_64# cp -rfa EFI/BOOT/{BOOTx64.EFI,grubx64.efi}  /root/pxeboot/files/ftpd/UEFI/Ubuntu/1804/x86_64/
cp -rf /root/pxeboot/html/ubuntu/x86_64/boot/grub/grub.cfg UEFI/

root@pve02:~/pxeboot/html/ubuntu/x86_64# cp -rfa install/netboot/ubuntu-installer/amd64/{initrd.gz,linux} /root/pxeboot/files/ftpd/UEFI/Ubuntu/1804/x86_64/

参考:https://support.huawei.com/enterprise/zh/knowledge/EKB1100052627

https://blog.csdn.net/qq_44839276/article/details/123528872

https://www.cnblogs.com/lixuebin/p/10814282.html

https://www.jianshu.com/p/631e57ce38f1?from=singlemessage

BOOTx64.EFI,grubx64.efi区别于联系

系统启动项/系统引导原理(BIOS、UEFI、GRUB)

混合架构模式

Legacy模式使用pxelinux.0引导;UEFI模式使用BOOTAA64.EFI(ARM架构引导文件),x86架构为(BOOTX64.EFI)引导。

对于内核文件和initrd文件是不区分Legacy模式和UEFI模式的。

mkdir -pv {UEFI,Legacy}/{Ubuntu,CentOS,UOS,KylinOS}
mkdir -pv {UEFI,Legacy}/Ubuntu/{1804,2004}/{x86_64,aarch_64}
mkdir -pv {UEFI,Legacy}/CentOS/{76,79}/{x86_64,aarch_64}
mkdir -pv {UEFI,Legacy}/UOS/v20/{x86_64,aarch_64}
mkdir -pv {UEFI,Legacy}/KylinOS/v10/{x86_64,aarch_64}

mkdir -pv Ubuntu/{1804,2004}/{x86_64,aarch_64}/{UEFI,Legacy}
mkdir -pv CentOS/{76,79}/{x86_64,aarch_64}/{UEFI,Legacy}
mkdir -pv UOS/v20/{x86_64,aarch_64}/{UEFI,Legacy}
mkdir -pv KylinOS/v10/{x86_64,aarch_64}/{UEFI,Legacy}

参考连接

https://blog.51cto.com/u_14783669/2993435

https://blog.csdn.net/weixin_46243964/article/details/119650128

https://www.docin.com/p-2246823087.html

Syslinux Wiki推荐

Ubuntu20.04:

PXE 批量安装 Ubuntu 20.04-automated installation

https://blog.bwcxtech.com/posts/4b16559e

PXE网络启动提示no default or ui configuration directive问题解决

cobbler:

https://www.cnblogs.com/f-ck-need-u/p/7347883.html

https://blog.csdn.net/weixin_40228200/article/details/123222782

https://blog.csdn.net/weixin_46108954/article/details/105869201

https://os.51cto.com/article/694341.html

BIOS/UEFI与BootLoader:BootLoader是由固件(BIOS 或 UEFI)启动的软件。

1、https://wiki.archlinux.org/title/Arch_boot_process#System_initialization

2、https://wiki.archlinux.org/title/Syslinux#BIOS_Systems