本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
1.在Ubuntu 18.04 上实现PXE自动化安装Ubuntu 18.04
1.1 安装httpd并启动
root@ubuntu1804:~# apt -y install apache2
root@ubuntu1804:~# systemctl start apache2
root@ubuntu1804:~# systemctl enable --now apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2
root@ubuntu1804:~# systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Sun 2021-11-28 14:31:40 CST; 1min 8s ago
Main PID: 2012 (apache2)
Tasks: 55 (limit: 2287)
CGroup: /system.slice/apache2.service
├─2012 /usr/sbin/apache2 -k start
├─2015 /usr/sbin/apache2 -k start
└─2016 /usr/sbin/apache2 -k start
Nov 28 14:31:40 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Nov 28 14:31:40 ubuntu1804 systemd[1]: Started The Apache HTTP Server.
1.2 安装dnsmasq
root@ubuntu1804:~# apt -y install dnsmasq
在安装过程中,你会看到一些关于端口53已经在使用的错误…在这个阶段,你可以忽略这些错误
1.3 创建您的TFTP文件夹结构
root@ubuntu1804:~# mkdir -p /tftp/boot
root@ubuntu1804:~# tree /tftp/
/tftp/
└── boot
1 directory, 0 files
1.4 将需要的文件复制到TFTP文件夹中
root@ubuntu1804:~# mount /dev/sr0 /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
root@ubuntu1804:~# cp -r /mnt/install/netboot/* /tftp/boot/
root@ubuntu1804:~# tree /tftp/boot/
/tftp/boot/
├── 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
1.5 将安装文件复制到web服务器中
root@ubuntu1804:~# mkdir -p /var/www/html/ubuntu/18
root@ubuntu1804:~# cp -r /mnt/* /var/www/html/ubuntu/18
1.6 配置您的系统使用dnsmasq服务
root@ubuntu1804:~# vim /etc/dnsmasq.conf
#接口信息
#使用IP addr查看系统上的接口名称
interface=eth0,lo
bind-interfaces
domain=raymonds.cc
#DHCP设置
#dhcp设置范围
dhcp-range=172.31.7.1,172.31.7.254,255.255.248.0,2h
#网关设置选项
dhcp-option=3,172.31.0.2
#设置DNS服务器选项
dhcp-option=6,180.76.76.76,223.6.6.6
#dns转发信息
server=8.8.8.8
#指定TFTP选项
#pxeboot文件的位置
dhcp-boot=/boot/pxelinux.0,pxeserver,172.31.2.18
#启用tftp服务
enable-tftp
#tftp的根文件夹
tftp-root=/tftp
root@ubuntu1804:~# systemctl enable --now dnsmasq
Synchronizing state of dnsmasq.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable dnsmasq
root@ubuntu1804:~# systemctl status dnsmasq
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-11-28 15:05:15 CST; 7s ago
Process: 3631 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
Process: 3622 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=0/SUCCESS)
Process: 3621 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
Main PID: 3630 (dnsmasq)
Tasks: 1 (limit: 2287)
CGroup: /system.slice/dnsmasq.service
└─3630 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --t
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth nett
Nov 28 15:05:15 ubuntu1804 dnsmasq-dhcp[3630]: DHCP, IP range 172.31.7.1 -- 172.31.7.254, lease time 2h
Nov 28 15:05:15 ubuntu1804 dnsmasq-dhcp[3630]: DHCP, sockets bound exclusively to interface eth0
Nov 28 15:05:15 ubuntu1804 dnsmasq-tftp[3630]: TFTP root is /tftp
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: using nameserver 8.8.8.8#53
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: reading /etc/resolv.conf
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: using nameserver 8.8.8.8#53
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: using nameserver 127.0.0.53#53
Nov 28 15:05:15 ubuntu1804 dnsmasq[3630]: read /etc/hosts - 5 addresses
Nov 28 15:05:15 ubuntu1804 systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
1.7 编辑响应文件
root@ubuntu1804:~# apt -y install system-config-kickstart
root@ubuntu1804:~# export DISPLAY=172.31.0.1:0.0
root@ubuntu1804:~# system-config-kickstart
(system-config-kickstart.py:6335): libglade-WARNING **: 16:32:17.475: Could not load support for `gnome': libgnome.so: cannot open shared object file: No such file or directory
#应答文件制作参考2.3 kickstart文件创建
root@ubuntu1804:~# cat /var/www/html/ks/ubuntu18.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 --disabled
#Initial user
user raymond --fullname "raymond" --iscrypted --password $1$GF21pNEY$zv4EuFzf5LjeBhaCGIu4p0
#Reboot after installation
reboot
#Use text mode install
text
#Install OS instead of upgrade
install
#Use Web installation
url --url http://172.31.2.18/ubuntu/18
#System bootloader configuration
bootloader --location=mbr --append net.ifnames=0
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype ext4 --size 1024
part swap --size 2048
part / --fstype ext4 --size 1 --grow
#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
1.8 编辑引导文件
root@ubuntu1804:~# vim /tftp/boot/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 1
default install
label install
append ks=http://172.31.2.18/ks/ubuntu18.cfg initrd=ubuntu-installer/amd64/initrd.gz –
1.9 修改网络引导器中的txt.cfg文件
root@ubuntu1804:~# vim /tftp/boot/ubuntu-installer/amd64/boot-screens/txt.cfg
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append ks=http://172.31.2.18/ks/ubuntu18.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz live-installer/net-image=http://172.31.2.18/ubuntu/18/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
1.10 通过pxeboot一台BIOS计算机测试您的设置
安装过程