I had the same problem yesterday on a Maxdata Server. Similar problem you had, that's why I found your question.
My server started and after some time it spilled out many of those IP-Config: no response after xx secs - giving up
messages and lead to a kernel panic after about three minutes.
I spend almost a whole day on trying to solve this issue, but I couldn't find any direct solution.
The problem is that there are two DHCP calls: One at boot time (right before PXE jumps in) which works and another one at the point where our both nodes stopped booting. The second request is shorter than the first one is not answered by dnsmasq for unknown reason.
Basically you can try different approaches:
Use a different network device:
I used a real server having two physical NICs. Switching to the second networking interface immediately solved my problem.
I have to admit that I am no expert in virtual machines, but Oracle VM VirtualBox Manager enables me to install up to 4 distinct networking devices in the VM while one can even change the adapter type. Be sure to play a bit with the settings around since my setup does not allow such a thing to be tested here.
If this does not work, modify your default
config-file to explicitly use DHCP for network configuration:
label ubuntu_12.04.4-desktop-i386
kernel /ubuntu/12.04.4-desktop-i386/vmlinuz nosplash
append boot=nfs root=/dev/nfs nfsroot=192.168.0.99:/path/to/ubuntu-12.04.4-desktop-i386 initrd=/ubuntu/12.04.4-desktop-i386/initrd.lz ip=:<server-ip>::::eth0:dhcp rw live-netdev=eth0 ethdevice-timeout=10
Remember to insert <server-ip>
.
However, if those solutions do not work for you, you can switch to static IP's:
label ubuntu_12.04.4-desktop-i386
kernel /ubuntu/12.04.4-desktop-i386/vmlinuz nosplash
append boot=nfs root=/dev/nfs nfsroot=192.168.0.99:/path/to/ubuntu-12.04.4-desktop-i386 initrd=/ubuntu/12.04.4-desktop-i386/initrd.lz ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:static rw live-netdev=eth0 ethdevice-timeout=10
You will have to create an additional config-file for each client (PXE boot should show which files it is looking for at boot time).
I consider that you should first create a customized live-dvd of Ubuntu-14.04.
Procedure:
a- Download an official Desktop CD from http://releases.ubuntu.com/ (You already did)
b- Move it into an empty directory.
mkdir ~/livecdtmp
mv ubuntu-14.04-desktop-amd64.iso ~/livecdtmp
cd ~/livecdtmp
c- Mount and extract the Desktop .iso, and extract the SquashFS filesystem
mkdir mnt
mkdir extract-cd
sudo su
mount -o loop ubuntu-10.04-desktop-amd64.iso mnt
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
unsquashfs mnt/casper/filesystem.squashfs
mv squashfs-root edit
cp /etc/resolv.conf edit/etc/
cp /etc/hosts edit/etc/
d- Prepare and chroot
sudo su
mount --bind /dev/ edit/dev
chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
e- Customize, remove any temporary files and delete temporary files using commands:
sudo su
apt-get install package
apt-get remove --purge package
apt-get clean
apt-get autoremove
rm /etc/hosts
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
f- umount special filesystems and exit chroot
sudo su
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit
g- Producing the CD image
sudo su
chmod +w extract-cd/casper/filesystem.manifest
chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop
umount edit/dev
rm extract-cd/casper/filesystem.squashfs
mksquashfs edit extract-cd/casper/filesystem.squashfs -comp xz -e edit/boot
printf $(sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size
nano extract-cd/README.diskdefines
cd extract-cd
rm md5sum.txt
find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt
mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-14.04-desktop-amad64-custom.iso
Source: https://help.ubuntu.com/community/LiveCDCustomization
Best Answer
Fully Automated Ubuntu 20.04 server install using PXE
These are steps to do a fully automated Ubuntu 20.04 Server install using PXE with the live server image. I found the process to be lightly documented and filled with issues. In these steps I am installing 20.04 on a UEFI based server.
(edit: I adapted these steps for a BIOS based server at Deploy Ubuntu 20.04 on bare metal or virtualbox VM by pxelinux, cloud-init doesn't pick up user-data file )
There are many variations to these steps possible. They can be customized and tailored to suit one's needs. The goal is to provide one example of how to accomplish this and to help other users overcome the issues encountered.
links about the installer
config references
source code
Build a tftp server
All the following steps are run as root. These were tested on an Ubuntu 18.04 server.
Install the tftp server and a web server
Configure apache to serve files from the tftp directory
Download the live server iso
Extract the kernel and initramfs from the live server iso
Download the grub image to load via PXE
Configure grub. This configuration will provide a fully automated boot option as well as a manual boot option
Configure cloud-init with the autoinstall configuration. I first ran the install manually to get the generated
/var/log/installer/autoinstall-user-data
file to use as the basis. I then made modifications based on my needs and errors encountered.Configure DHCP
Set the DHCP Options 66,67 according to the documentation for your DHCP server.
Boot your server
At this point, you should be able to boot your UEFI based server and perform a completely automatic install.
Errors encountered
cloud-config-url=/dev/null
kernel argument will preventcloud-init
from unnecessarily downloading the iso, which reduces the memory required, reduces network traffic, and speeds up boot time./var/log/installer/autoinstall-user-data
file was broken in the following waysversion
property, which caused a validation failure. I added the propertynetwork
section required another level of nesting. This bug is mentioned in the config referencepreserve
property on each item instorage
config
needed to be set to false. Otherwise curtin would not install on a blank diskkeyboard
propertytoggle
was set to null, which caused a validation failure. I simply removed the propertyreorder_uefi
. Luckily, subiquity happens to pass this configuration to curtinapt
config optiongeoip
doesn't seem to work. There were always logs for geoip requestssize: 512M
) resulted in the size being stored as a float, leading to errors when sizing LVM volumes as a percentage. Avoiding human readable values seems to fix thisOther missing features
I didn't dig into these as much. They are based on what my preseed files would do. Most of them could probably be fixed with clever use of
early-commands
,late-commands
, and cloud-init. I may have also missed somethingapt-cacher-ng
for apt, but it does not work as a general proxy. The installer assumes any proxy you configure is for everythinginteractive-sections
, but that results in 3 pauseslate-commands
, but I did not try it/run/kernel-meta-package
. This is hardcoded tolinux-generic
in the initramfs. I prefer to use thelinux-virtual
package for VMs. I was able to use the cloud-init configuration to overwrite the fileEdit 1
The resulting
/target/var/lib/cloud/seed/nocloud-net/user-data
file used by cloud-init during first boot. The replies indicate thelock-passwd
property has a typo and may affect some users