Checklist:
Prepare the configuration server:
Install packages
Configure
DHCP and
TFTP to provide pxe-boot image files
Configure
lighttpd to serve operating system files
Prepare kickstart configuration file
Start client; intercept boot and request net boot
Note: the steps below expect all servers (
dhcp,
tftp and
web) to be on the same physical machine, here: 192.168.1.100. Both the installation server, and anticipated clients are Ubuntu machines.
----------------------
Step 1.
(a) Install
dhcp3 server. This will provide the initial network boot, for the client's PXE start.
$ sudo apt-get install dhcp3-server
(b) Edit its configuration.
Add the subnet info, leave all other elements of the file as they are.
$ sudo vi /etc/dhcp3/dhcpd.conf
ddns-update-style none;
# option definitions common to all supported networks...
option domain-name "example.com";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.111 192.168.1.222;
option domain-name-servers 212.135.1.36; # your DNS server
option domain-name "internal.example.com"; # your domain name
option routers 192.168.1.254; # your gateway
option broadcast-address 192.168.1.255;
filename "pxelinux.0";
}
(c) Start dhcp server.
$ sudo /etc/init.d/dhcp3-server start
----------------------
Step 2.
(a) Install
tftpd-hpa (and its super-daemon,
inetd):
$ sudo apt-get install openbsd-inetd tftpd-hpa
(b) Modify the main
tftp setup file, in
/etc/default/tftpd-hpa, to have the content as shown.
$ sudo vi /etc/default/tftpd-hpa
TFTP_USERNAME=”tftp”
TFTP_DIRECTORY=”/srv/tftp”
TFTP_OPTIONS=”--secure”
TFTP_ADDRESS=”192.168.1.100:69”
The address above is the IP address of your
tftp server.
(c) Start the
inetd superdaemon
$ sudo /etc/init.d/openbsd-inetd start
Starting internet superserver inetd [ OK ]
(d) Check the
tftpd is now active:
$ netstat -a | grep tftp
udp 0 0 *:tftp *:*
----------------------
Step 3.
Copy the netboot files into the
tftp server. (Check
lftp is there, if not – install it, with
sudo apt-get install lftp).
$ sudo mkdir -p /srv/tftp/
$ cd /srv/tftp/
$ sudo lftp -c “open http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/; mirror”
----------------------
Step 4.
(a) Edit
/srv/tftp/pxelinux.cfg/default and change string
menu.cfg into
text.cfg.
After the change, the file should look as follows:
include ubuntu-installer/i386/boot-screens/text.cfg
default ubuntu-installer/i386/boot-screens/vesamenu.c32
prompt 0
timeout 0
(b) Modify the
/srv/tftp/ubuntu-installer/i386/boot-screens/text.cfg file to have the following content:
timeout 1
default auto
label auto
menu label ^Auto
menu default
kernel ubuntu-installer/i386/linux
append vga=normal initrd=ubuntu-installer/i386/initrd.gz
ks=http://192.168.1.100/ubuntu/ks.cfg -- quiet
----------------------
Step 6.
(a) Install
lighttpd (may need to stop
apache first, if running).
$ sudo /etc/init.d/apache2 stop # if running
$ sudo apt-get install lighttpd
(b) Ensure that the root directory is
/srv/www (the default
/var/www could be used, but we follow proper
FHS rules here ;-). This will serve all installation files. The
url directive in the kickstart file will direct the installation program to this web page.
$ sudo vi /etc/lighttpd/lighttpd.conf
change the document-root directive to read as follows:
server.document-root = "/srv/www/"
(c) Start
lighttpd
$ sudo /etc/init.d/lighttpd start
----------------------
Step 7.
Populate the the web server with the installation files.
Here, we will get the installation files from the Ubuntu installation CD (assumes Ubuntu installation CD is in the drive on the server machine, and mounted).
$ sudo mkdir /srv/www/ubuntu
$ sudo cp -rv /dev/sr0/* /srv/www/ubuntu
(time for a cuppa)
----------------------
Step 8.
Create a text file called ks.cfg with the kickstart instructions, and place it in the
/srv/www/ubuntu directory.
Notice that
/srv/tftp/ubuntu-installer/i386/boot-screens/text.cfg is pointing at this file.
#platform=x86
#System language
lang en_UK
#Language modules to install
langsupport en_UK
#System keyboard
keyboard gb # not uk !
#System mouse
mouse
#System timezone
timezone Europe/London
#Root password
rootpw --disabled
#Initial user
user fred --fullname "Fred User" --iscrypted --password
$1$TbZtLDPw$YG89LpNillhOvTH4zeEse/
#Reboot after installation
reboot
#Use text mode install
text
#Install OS instead of upgrade
install
#Use Web installation - provide the URL of your web server
url --url http://192.168.1.100/ubuntu
#cdrom
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype ext3 --size 10000000 # --grow failed for me ;-(
part swap --size 512
part /lvm --fstype lvm --size 512
#System authorization information
auth --useshadow --enablemd5
#Network information
network --bootproto=dhcp --device=eth0
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
%packages # comment out needed packages, or add new
openssh-server
# ubuntu-vm-builder
# libvirt-bin
# screen
%pre
%post
perl -pi -e "s/kickseed/myserver/g" /etc/hosts /etc/motd
perl -pi -e "s/ubuntu/myserver/g" /etc/hosts /etc/motd
cat > /etc/hostname <<>
myserver
EOF
cat >> /etc/hosts <<>
192.168.1.10 myserver.example.com myserver
192.168.1.11 yourserver.example.com yourserver
192.168.1.12 herserver.example.com herserver
EOF
# any other post-installation shell command(s) can go here
This concludes server configuration.
----------------------------
Step 9. On the client:
Boot, intercept the booting process and enter BIOS. Change the sequence of boot devices, and select network boot.
Ideally, you want to identify a separate key, like F12 on some machines, which request PXE boot without you changing the boot sequence. This will prevent repeated boots as the machine restarts after the installation.