Ubuntu PXE Install
Contents
Howto
Installing Ubuntu via PXE network boot is the way to go if you have no cd-r at hand or if you have no cdrom at all.
After reading Installation of Woody with PXE it wasn't hard to setup a PXE boot environment.
Install services
You need the following Debian packages:
- tftpd-hpa
- dhcp3-server
- netkit-inetd
sudo apt-get install tftpd-hpa dhcp3-server netkit-inetd
Prepare your tftp server
Start your tftpd server via inetd with the following line in /etc/inetd.conf:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
sudo update-inetd --enable BOOT
Don't forget to create the tftp directory /var/lib/tftpboot (if it hasn't already been created)
On Ubuntu 6.06 Server (or if /etc/inetd.conf doesn't exist) you might edit /etc/default/tftpd-hpa:
RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot"
Prepare your dhcp-server
On what interfaces should the DHCP server (dhcpd) serve DHCP requests? Answer this question by editing the line in /etc/default/dhcp3-server file. Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="eth1 eth2"
If you have a working dhcp server add the following lines to your group in /etc/dhcpd.conf file, substituting ip and mac address as needed
host pxeinstall { hardware ethernet [mac-address of pxe networkcard without brackets]; fixed-address 10.0.0.16; next-server [ip-address of the server serving tftp]; filename "pxelinux.0"; }
The following simpler file may also work in a trivial environment
subnet 0.0.0.0 netmask 0.0.0.0 { range 192.168.0.1 192.168.0.2; filename "pxelinux.0"; }
Note that you need to assign the client an IP address in the same subnet as the address of the server running tftpd. For example, if your server's address is 192.168.2.13, you should assign your client an IP address that begins with 192.168.2, NOT 192.168.0 .
(the one below worked for me, while the one above did not)
The next-server stanza tells the pxe boot client where to look for the boot image and associated data. It is required in newer editions of tftpd-hpa. (I spent a couple of hours trying to figure out why the destination address of the tftp UDP datagrams was 0.0.0.0).
Update (August 20, 2006): for an installation from an Ubuntu server to a Toshiba Portege 3480CT it was MANDATORY to indicate in the DHCP server configuration file the MAC address of the Toshiba laptop. As soon as the DHCP server was restarted the PXE boot process started. So in my case the first lines worked.
Prepare ubuntu netboot
Get the files
All the files you need are on the install media, or you can get them here: hoary 5.04 warty 5.10 breezy 5.10 dapper 6.06 edgy 6.10 feisty 7.04
Put the netboot files into the /tftpboot directory.
lftp -c "open http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/; mirror netboot/" cp -a netboot/* /var/lib/tftpboot # untar the pxeboot.tar.gz cd /var/lib/tftpboot/ tar xfz pxeboot.tar.gz
pxe bootloader config
Edit or patch pxelinux.cfg/default . Note : this is not needed for Feisty anymore.
--- default.org 2004-10-31 15:32:32.000000000 +0100 +++ default 2004-10-31 00:14:52.000000000 +0200 @@ -13,17 +13,11 @@ F0 debian-installer/boot-screens/f10.txt label linux - kernel debian-installer/linux - append vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- + kernel vmlinuz + append vga=normal initrd=initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- label expert - kernel debian-installer/linux - append DEBCONF_PRIORITY=low vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- -label custom - kernel debian-installer/linux - append ubuntu/install-type=custom vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- -label custom-expert - kernel debian-installer/linux - append ubuntu/install-type=custom DEBCONF_PRIORITY=low vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- + kernel vmlinuz + append DEBCONF_PRIORITY=low vga=normal initrd=initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw -- prompt 1 timeout 0
Make a symlink from default to the mac adresse (without the colons) of the pxe boot client.
cd /tftpboot/pxelinux.cfg ln -s default 000AE42EA642 # ie. my client's mac adress is 00:0A:E4:2E:A6:42
Directory layout
Should look like this:
/tftpboot/ /tftpboot/pxelinux.0 /tftpboot/initrd.gz /tftpboot/mini.iso /tftpboot/debian-installer /tftpboot/debian-installer/linux /tftpboot/debian-installer/initrd.gz /tftpboot/debian-installer/boot-screens /tftpboot/debian-installer/boot-screens/splash.rle /tftpboot/debian-installer/boot-screens/f1.txt /tftpboot/debian-installer/boot-screens/f2.txt /tftpboot/debian-installer/boot-screens/f3.txt /tftpboot/debian-installer/boot-screens/f4.txt /tftpboot/debian-installer/boot-screens/f5.txt /tftpboot/debian-installer/boot-screens/f6.txt /tftpboot/debian-installer/boot-screens/f7.txt /tftpboot/debian-installer/boot-screens/f8.txt /tftpboot/debian-installer/boot-screens/f9.txt /tftpboot/debian-installer/boot-screens/syslinux.txt /tftpboot/debian-installer/boot-screens/f10.txt /tftpboot/initrd.list /tftpboot/vmlinuz /tftpboot/pxelinux.cfg /tftpboot/pxelinux.cfg/default /tftpboot/pxelinux.cfg/0A000010
Start the PXE client
Just boot up the computer that will use DHCP and then PXE to get the images, if something isn't working you can use a sniffer on your install server to check.
tethereal -R bootp #tethereal -VR bootp tethereal port tftp tcpdump -n
Setup a mirror
If you wish to run your network installs over a private network and use your own Ubuntu mirror you can do the following:
- Download apt-mirror and write an /etc/apt/mirror.list configuration file eg.:
set base_path /usr/local/ubuntu/mirror deb http://gb.archive.ubuntu.com/ubuntu/ dapper main restricted deb http://gb.archive.ubuntu.com/ubuntu/ dapper main/debian-installer deb http://gb.archive.ubuntu.com/ubuntu/ dapper main restricted/debian-installer
- Create a 'var' and 'skel' directory under your chosen base path
- Run apt-mirror against the configuration file which you've created. This will replicate the ubuntu mirror to your chosen base path (you will need to create the soft links to the dists and pool directories yourself) eg.:
~$ ls -al /usr/local/ubuntu/mirror total 24 drwxr-xr-x 5 root root 4096 May 18 12:46 . drwxrwxrwx 11 root root 4096 May 18 12:27 .. lrwxrwxrwx 1 root root 34 May 18 12:46 dists -> gb.archive.ubuntu.com/ubuntu/dists drwxr-xr-x 3 root root 4096 May 18 12:46 gb.archive.ubuntu.com lrwxrwxrwx 1 root root 33 May 18 12:46 pool -> gb.archive.ubuntu.com/ubuntu/pool drwxr-xr-x 3 root root 4096 May 18 10:53 skel drwxr-xr-x 2 root root 8192 May 18 13:27 var
- Serve the /usr/local/ubuntu directory out with apache
- When you boot the ubuntu network installer, point it at the ip address and the 'mirror' directory