Server:
Client:
Install dnsmasq
$ apt install dnsmasqSetup interface.
$ ip link add br0 type bridge
$ ip addr add 192.168.0.1/24 dev br0
$ ip link set br0 upEdit /etc/dnsmasq.conf
interface=br0
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/ftpdStart server.
$ systemctl start dnsmasqSetup boot directory.
$ mkdir /var/ftpd
$ cd /var/ftpd
$ wget http://archive.ubuntu.com/ubuntu/dists/bionic-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz
$ tar xf netboot.tar.gzWorkaround: Enable serial console.
Prepend to /var/ftpd/pxelinux.cfg/default
console 0
serial 0 19200 0Edit /var/ftpd/ubuntu-installer/amd64/boot-screens/txt.cfg.
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
# append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
append initrd=ubuntu-installer/amd64/initrd.gz --- console=ttyS0,19200 earlyprint=serial,ttyS0,19200 $ virt-install --name=vm1 \
--ram=2048 \
--disk size=16 \
--pxe --boot network,menu=on \
--network bridge=br0 \
--os-variant ubuntu18.04 \
--nographicContinue of lab 01.
Server:
Client
Copy linux kernel and initrd to ftpd directory.
$ cp vmlinuz-5.15.0-164-generic /var/ftpd
$ cp initrd.img-5.15.0-164-generic /var/ftpdEdit /var/ftpd/ubuntu-installer/amd64/boot-screens/txt.cfg
label install
menu label ^Install
menu default
kernel vmlinuz-5.15.0-164-generic
append initrd=initrd.img-5.15.0-164-generic root=/dev/nfs nfsroot=192.168.0.1:/var/nfs --- console=ttyS0,19200 earlyprint=serial,ttyS0,19200Prepare root filesystem.
Setup NFS server.
Edit /etc/exports.
/var/nfs *(rw, sync, no_subtree_check, no_root_squash)Export nfs directory.
$ export -a
$ export -v$ virt-install --name=vm1 \
--ram=2048 \
--disk size=16 \
--pxe --boot network,menu=on \
--network bridge=br0 \
--os-variant ubuntu18.04 \
--nographicServer Log.
$ journalctl -f -u dnsmasqJan 23 08:02:42 pc dnsmasq-dhcp[5179]: DHCPDISCOVER(br0) 52:54:00:63:77:ac
Jan 23 08:02:42 pc dnsmasq-dhcp[5179]: DHCPOFFER(br0) 192.168.0.50 52:54:00:63:77:ac
Jan 23 08:02:45 pc dnsmasq-dhcp[5179]: DHCPREQUEST(br0) 192.168.0.50 52:54:00:63:77:ac
Jan 23 08:02:45 pc dnsmasq-dhcp[5179]: DHCPACK(br0) 192.168.0.50 52:54:00:63:77:ac
Jan 23 08:02:46 pc dnsmasq-tftp[5179]: sent /var/ftpd/pxelinux.0 to 192.168.0.50
Jan 23 08:02:46 pc dnsmasq-tftp[5179]: sent /var/ftpd/ldlinux.c32 to 192.168.0.50
Jan 23 08:02:46 pc dnsmasq-tftp[5179]: sent /var/ftpd/pxelinux.cfg/default to 192.168.0.50
Jan 23 08:02:47 pc dnsmasq-tftp[5179]: sent /var/ftpd/ubuntu-installer/amd64/boot-screens/stdmenu.cfg to 192.168.0.50
Jan 23 08:02:47 pc dnsmasq-tftp[5179]: sent /var/ftpd/ubuntu-installer/amd64/boot-screens/txt.cfg to 192.168.0.50
Jan 23 08:02:47 pc dnsmasq-tftp[5179]: sent /var/ftpd/ubuntu-installer/amd64/boot-screens/stdmenu.cfg to 192.168.0.50
Jan 23 08:02:47 pc dnsmasq-tftp[5179]: sent /var/ftpd/ubuntu-installer/amd64/boot-screens/adtxt.cfg to 192.168.0.50
Jan 23 08:02:47 pc dnsmasq-tftp[5179]: sent /var/ftpd/ubuntu-installer/amd64/boot-screens/rqtxt.cfg to 192.168.0.50
Jan 23 08:03:00 pc dnsmasq-tftp[5179]: sent /var/ftpd/vmlinuz-5.15.0-164-generic to 192.168.0.50
Jan 23 08:04:59 pc dnsmasq-tftp[5179]: sent /var/ftpd/initrd.img-5.15.0-164-generic to 192.168.0.50| File | Usage |
|---|---|
| pxelinux.0 | PXE bootloader. Loads config, kernel, initrd. |
| pxelinux.cfg/default | Configuration and boot menu. |
| vmlinuz | Linux kernel. |
| initrd.img | Initial RAM disk. Temporary rootfs in RAM to load drivers and mount real rootfs. |
sequenceDiagram
Client ->> Server: DHCPDISCOVER
Server ->> Client: DHCPOFFER
Client ->> Server: DHCPREQUEST
Server ->> Client: DHCPACK
Server ->> Client: pxelinux.0
Server ->> Client: pxelinux.cfg/default
Server ->> Client: vmlinuz
Server ->> Client: initrd.img