Difference between revisions of "Ubuntu PXE Install"

From C4 Wiki
Jump to: navigation, search
(Get the files: clarify, and one step less (no need for the "mv netboot/*" if we use lftp properly to get the content of netboot dir rather than the dir itself), add urls for debian netboot, ...)
(after all, what is described here works perfectly with debian too)
Line 1: Line 1:
 
=Howto=
 
=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 drive at all.
+
Installing Ubuntu or Debian via PXE network boot is the way to go if you have no cd-r at hand, or if you have no cdrom drive on the machine to be installed.
 
 
After reading Installation of Woody with PXE it wasn't hard to setup a PXE boot environment.
 
  
 
==Install services==
 
==Install services==
Line 12: Line 10:
 
  sudo apt-get install tftpd-hpa dhcp3-server netkit-inetd
 
  sudo apt-get install tftpd-hpa dhcp3-server netkit-inetd
  
Note: On Gutsy (7.10) netkit-inetd is a "virtual package." Either inetutils-inetd or openbsd-inetd must be chosen. On one system, openbsd-inetd is already installed - the default now?
+
Note: On Gutsy (7.10) and Debian Etch netkit-inetd is a "virtual package". Either inetutils-inetd or openbsd-inetd must be chosen. On one system, openbsd-inetd is already installed - the default now?
  
 
==Prepare your tftp server==
 
==Prepare your tftp server==
Line 27: Line 25:
  
 
==Prepare your dhcp-server==
 
==Prepare your dhcp-server==
On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
+
On what network interfaces should the DHCP server (dhcpd) serve DHCP requests?
 
Answer this question by editing the line in /etc/default/dhcp3-server file.
 
Answer this question by editing the line in /etc/default/dhcp3-server file.
Separate multiple interfaces with spaces, e.g. "eth0 eth1".
+
Separate multiple interfaces with spaces, e.g. "eth0 eth1". Eg:
INTERFACES="eth1 eth2"
+
 
 +
INTERFACES="eth1 eth2"
  
 
If you have a working dhcp server add the following lines to your group in /etc/dhcpd.conf file (or, from Feisty upward, the /etc/dhcp3/dhcpd.conf file), substituting IP and MAC address as needed:
 
If you have a working dhcp server add the following lines to your group in /etc/dhcpd.conf file (or, from Feisty upward, the /etc/dhcp3/dhcpd.conf file), substituting IP and MAC address as needed:
Line 37: Line 36:
 
   hardware ethernet [MAC address of PXE client networkcard, without brackets];
 
   hardware ethernet [MAC address of PXE client networkcard, without brackets];
 
   
 
   
   # this is the unused IP address we will assign temporarly to the PXE client
+
   # this is the unused IP address we will assign temporarily to the PXE client
 
   fixed-address 10.0.0.16;
 
   fixed-address 10.0.0.16;
 
   
 
   
Line 43: Line 42:
 
   next-server [ip-address of the server serving tftp];  
 
   next-server [ip-address of the server serving tftp];  
 
   
 
   
 +
  # path of the bootloader file, relative to tftpd's root
 
   filename "pxelinux.0";
 
   filename "pxelinux.0";
 
  }
 
  }
Line 54: Line 54:
 
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''' .
 
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 "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, if not on the same machine as the DHCP server (I spent a couple of hours trying to figure out why the destination address of the tftp UDP datagrams was 0.0.0.0).
+
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, if not on the same machine as the DHCP server.
  
 
Then start your dhcp server:
 
Then start your dhcp server:
Line 65: Line 65:
 
'''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 ("hardware ethernet xx:yy:zz:uu:vv:tt;"). As soon as the DHCP server was restarted the PXE boot process started. So in my case the first lines worked.
 
'''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 ("hardware ethernet xx:yy:zz:uu:vv:tt;"). As soon as the DHCP server was restarted the PXE boot process started. So in my case the first lines worked.
  
==Prepare ubuntu netboot==
+
==Prepare netboot files==
 
===Get and install the files===
 
===Get and install the files===
 
All the files you need are on the install media, or you can get them from internet:  
 
All the files you need are on the install media, or you can get them from internet:  
Line 150: Line 150:
 
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, and look at log files for daemons misconfigurations.
 
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, and look at log files for daemons misconfigurations.
 
  tethereal -R bootp
 
  tethereal -R bootp
#tethereal -VR bootp
 
 
  tethereal port tftp
 
  tethereal port tftp
  tcpdump -n
+
  sudo tcpdump -s 1600 -neeevvvX 'proto (\udp or \tcp) and port( 67 or 68 or 69)'
 
  tail /var/log/daemon.log
 
  tail /var/log/daemon.log
  
 
==Setup a mirror==
 
==Setup a mirror==
With the previous setup, Ubuntu will download install packages straight over the internet.
+
With the previous setup, Ubuntu or Debian will download install packages straight over the internet.
If you prefer to run your network installs over a private network and use your own Ubuntu mirror you can do the following:
+
If you prefer to run your network installs over a private network and use your own Ubuntu or Debian mirror you can do the following:
  
 
* Download apt-mirror and write an /etc/apt/mirror.list configuration file eg.:
 
* Download apt-mirror and write an /etc/apt/mirror.list configuration file eg.:

Revision as of 15:03, 24 March 2008

Howto

Installing Ubuntu or Debian via PXE network boot is the way to go if you have no cd-r at hand, or if you have no cdrom drive on the machine to be installed.

Install services

You need the following packages:

  • tftpd-hpa
  • dhcp3-server
  • netkit-inetd
sudo apt-get install tftpd-hpa dhcp3-server netkit-inetd

Note: On Gutsy (7.10) and Debian Etch netkit-inetd is a "virtual package". Either inetutils-inetd or openbsd-inetd must be chosen. On one system, openbsd-inetd is already installed - the default now?

Prepare your tftp server

Start your tftpd server via inetd after adding 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 and Feisty Fawn 7.04 (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 network 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". Eg:

INTERFACES="eth1 eth2"

If you have a working dhcp server add the following lines to your group in /etc/dhcpd.conf file (or, from Feisty upward, the /etc/dhcp3/dhcpd.conf file), substituting IP and MAC address as needed:

host pxeinstall {
  # ie. "hardware ethernet 00:0A:E4:2E:A6:42;"
  hardware ethernet [MAC address of PXE client networkcard, without brackets];

  # this is the unused IP address we will assign temporarily to the PXE client
  fixed-address 10.0.0.16;

  # Not needed if the tftp server is on the same host as the DHCP server. ie. "next-server 10.0.0.2;".
  next-server [ip-address of the server serving tftp]; 

  # path of the bootloader file, relative to tftpd's root
  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 "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, if not on the same machine as the DHCP server.

Then start your dhcp server:

/etc/init.d/dhcp3-server start

And verify it runs (if not, you've a problem in the dhcpd config file):

ps ax | grep dhcpd

(the one config sample below worked for me, while the one above did not)

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 ("hardware ethernet xx:yy:zz:uu:vv:tt;"). As soon as the DHCP server was restarted the PXE boot process started. So in my case the first lines worked.

Prepare netboot files

Get and install the files

All the files you need are on the install media, or you can get them from internet:

Download and put the netboot directory content at the root of the tftpd's served /var/lib/tftpboot/ directory:

cd /var/lib/tftpboot/
lftp -c "open http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/netboot/; mirror"

# then untar the pxeboot.tar.gz (this step is NOT needed anymore, as off Feisty)
tar xfz pxeboot.tar.gz

If Ubuntu is in your cdrom drive:

mount /media/cdrom
cp -a /media/cdrom/install/netboot/* /var/lib/tftpboot/

pxe bootloader config

Edit or patch pxelinux.cfg/default . Note : this modification is NOT needed anymore (at least from Feisty).

--- 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

Directory layout

Should look like this, more or less (depending on the Ubuntu or Debian installer version used):

/var/lib/tftpboot/
/var/lib/tftpboot/pxelinux.0
/var/lib/tftpboot/initrd.gz
/var/lib/tftpboot/mini.iso
/var/lib/tftpboot/debian-installer
/var/lib/tftpboot/debian-installer/linux
/var/lib/tftpboot/debian-installer/initrd.gz
/var/lib/tftpboot/debian-installer/boot-screens
/var/lib/tftpboot/debian-installer/boot-screens/splash.rle
/var/lib/tftpboot/debian-installer/boot-screens/f1.txt
/var/lib/tftpboot/debian-installer/boot-screens/f2.txt
/var/lib/tftpboot/debian-installer/boot-screens/f3.txt
/var/lib/tftpboot/debian-installer/boot-screens/f4.txt
/var/lib/tftpboot/debian-installer/boot-screens/f5.txt
/var/lib/tftpboot/debian-installer/boot-screens/f6.txt
/var/lib/tftpboot/debian-installer/boot-screens/f7.txt
/var/lib/tftpboot/debian-installer/boot-screens/f8.txt
/var/lib/tftpboot/debian-installer/boot-screens/f9.txt
/var/lib/tftpboot/debian-installer/boot-screens/syslinux.txt
/var/lib/tftpboot/debian-installer/boot-screens/f10.txt
/var/lib/tftpboot/initrd.list
/var/lib/tftpboot/vmlinuz
/var/lib/tftpboot/pxelinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default
/var/lib/tftpboot/pxelinux.cfg/000AE42EA642

In more detail we need to provide:

  • a bootloader, which name (or path relative to tftpd's served directory, here /var/lib/tftpboot) is mentioned in the dhcpd.conf file (pxelinux.0)
  • a configuration file for the bootloader (default for all clients, or mac specific)
  • a kernel with an initrd file (vmlinuz,initrd.gz)
  • an image of the base system (mini.iso)

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, and look at log files for daemons misconfigurations.

tethereal -R bootp
tethereal port tftp
sudo tcpdump -s 1600 -neeevvvX 'proto (\udp or \tcp) and port( 67 or 68 or 69)'
tail /var/log/daemon.log

Setup a mirror

With the previous setup, Ubuntu or Debian will download install packages straight over the internet. If you prefer to run your network installs over a private network and use your own Ubuntu or Debian 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 'mirror', '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

Links