Ubuntu 12.04 pxe install server

From Bitbull Wiki
Jump to navigation Jump to search


1 Install Packages

apt-get install tftpd-hpa syslinux apt-mirror apache2 lftp curl makepasswd screen dstat lsof dpkg-dev nano-

2 Configure Server

2.1 APT Mirror

  • vi /etc/apt/mirror.list
set base_path    /srv/apt-mirror
set nthreads     20
set _tilde 0
set defaultarch i386

deb http://archive.ubuntu.com/ubuntu precise main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu precise main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer

clean http://archive.ubuntu.com/ubuntu
  • create initial apt-mirror dirs
mkdir -p /srv/apt-mirror/skel /srv/apt-mirror/mirror /srv/apt-mirror/var
  • create soft link for pxe clients, clients will use this as install source
ln -s /srv/apt-mirror/mirror/archive.ubuntu.com/ubuntu /var/www/ubuntu
  • this is a post mirroring script called by default variable from apt-mirror config
    • vi /srv/apt-mirror/var/postmirror.sh
#!/bin/bash

DATE=$(date '+%Y%m%d%H%M')

cd /srv/apt-mirror/mirror/
echo Starting clean.sh ...
/bin/bash /srv/apt-mirror/var/clean.sh
test -d backup || mkdir backup
ls -1d * | egrep -v '^backup$' | while read MIRROR
do
   cp -al $MIRROR backup/$MIRROR.$DATE
done
chmod 755 /srv/apt-mirror/var/postmirror.sh
  • if you want apt-mirror to run daily, you can use this config, otherwise call it manually
    • vi /etc/cron.d/apt-mirror
apt-mirror

2.2 Kickstart

  • this is needed to pull the kickstart files during client setup
mkdir -p /srv/inst/ks
rm -f /var/www/index.html
ln -s /srv/inst /var/www/inst
  • this is just an example, not all vars from RedHat Kickstart are working, google for "Ubuntu Kickstart 12.04"
    • vi /srv/inst/ks/u1204-i386-workstation.ks
lang de_CH
langsupport de_CH
keyboard ch
mouse
timezone Europe/Zurich
# makepasswd --clearfrom=- --crypt-md5 |awk '{ print $2 }'
rootpw --iscrypted $1$GzZX7/W7$5wOo5UOEmBXdFk6DCfsHn.
user --disabled
# reboot
text
install
url --url http://wonder/ubuntu
bootloader --location=mbr
zerombr yes
clearpart --all --initlabel
part / --fstype ext4 --size 1 --grow --asprimary
part swap --size 2048
network --bootproto=dhcp --device=eth0
xconfig --startxonboot

%packages
openssh-server
acl
bash-completion
dstat
debconf-utils
heirloom-mailx
iftop
postfix
strace
screen
sudo
vim
xdm 
vlc 
xfce4-panel
xfce4-volumed
xfce4-xkb-plugin
xfdesktop4
xfce4-session
xfce4-screenshooter
xfce4-power-manager
xfce4-notifyd
xfce4-notes
xfce4-indicator-plugin
xfce4-datetime-plugin
xfce4-settings
xubuntu-wallpapers
xubuntu-artwork
xubuntu-default-settings
xubuntu-icon-theme
xubuntu-docs
plymouth-theme-xubuntu-logo
plymouth-theme-xubuntu-text
xfburn
thunar
ristretto
evince
gimp
simple-scan
file-roller
gmusicbrowser
pavucontrol
thunderbird-locale-de
thunderbird
mozilla-plugin-vlc
openjdk-7-jre
icedtea-7-plugin
flashplugin-installer
libreoffice
hyphen-de
libreoffice-help-de
libreoffice-l10n-de
mythes-de-ch
myspell-de-ch
pulseaudio 
vlc-plugin-pulse 
pulseaudio-module-x11 
gstreamer0.10-pulseaudio

%post
#---------- CONFIGURE SYSTEM ----------
#--- some resticted stuff ---
echo 'ttf-mscorefonts-installer       msttcorefonts/accepted-mscorefonts-eula boolean true' | debconf-set-selections 
apt-get -y install ubuntu-restricted-addons
bash /usr/share/doc/libdvdread4/install-css.sh

#--- configure cups ---
touch /etc/cups/printers.conf
chown root:lp /etc/cups/printers.conf
chmod 600 /etc/cups/printers.conf
sed -i 's/Browsing Off/Browsing On/g' /etc/cups/cupsd.conf

#--- configure apt ---
sed -i 's/^deb-src/# deb-src/g;s/security.ubuntu.com/wonder/g' /etc/apt/sources.list

#--- configure ntp ---
cat << EOF > /etc/cron.hourly/ntpdate.sh
#!/bin/bash
/usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1
EOF
chmod 755 /etc/cron.hourly/ntpdate.sh
ln -s /etc/cron.hourly/ntpdate.sh /etc/rc2.d/S99ntpdate.sh

#--- firewall ---
ufw enable
ufw allow 22/tcp

#--- user for testing ---
useradd -m -p '$1$GzZX7/W7$5wOo5UOEmBXdFk6DCfsHn.' chris

2.3 TFTPd

mv /var/lib/tftpboot /srv/
ln -s /srv/tftpboot /var/lib/tftpboot
/etc/init.d/tftpd-hpa restart
mkdir /srv/netboot-ubuntu-1204
cd /srv/netboot-ubuntu-1204
wget http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-i386/current/images/netboot/netboot.tar.gz -O u1204.i386.netboot.tar.gz
tar vxfz u1204.i386.netboot.tar.gz
cp /srv/netboot-ubuntu-1204/ubuntu-installer/i386/linux /srv/tftpboot/u1204.i386.linux
cp /srv/netboot-ubuntu-1204/ubuntu-installer/i386/initrd.gz /srv/tftpboot/u1204.i386.initrd.gz
cp  /usr/lib/syslinux/reboot.c32 /srv/tftpboot/
cp /usr/lib/syslinux/pxelinux.0  /srv/tftpboot/
cp /usr/lib/syslinux/menu.c32 /srv/tftpboot/
cp /usr/lib/syslinux/chain.c32 /srv/tftpboot/
mkdir /srv/tftpboot/pxelinux.cfg/
  • vi /srv/tftpboot/pxelinux.cfg/default
default menu.c32
TIMEOUT 3000
ONTIMEOUT reboot
PROMPT 0
NOESCAPE 1

MENU TITLE Install Server

LABEL reboot
        menu label Reboot System (Cold)
        COM32 reboot.c32

MENU SEPARATOR

label workstation
        menu label Xubuntu 12.04 Desktop i386
        kernel u1204.i386.linux
        append ks=http://wonder/inst/ks/u1204-i386-workstation.ks initrd=u1204.i386.initrd.gz -- quiet

2.4 DHCPd

On dhcp server, you need to declare the pxe location and its boot file (next-server, filename):

subnet 192.168.123.0 netmask 255.255.255.0 {
   range 192.168.123.30 192.168.123.40;
   option domain-name "gallien.bitbull.ch";
   option domain-name-servers 192.168.123.50, 195.186.1.110;
   option broadcast-address 192.168.123.255;
   option subnet-mask 255.255.255.0;
   option routers 192.168.123.254;
   default-lease-time 86400;
   max-lease-time 86400;
   next-server 192.168.123.64;
   filename "pxelinux.0";

   # --- KVM VMs on master --------------------------------------------------------
   host name {                               # DNS + DHCP
      hardware ethernet 52:54:00:5e:c1:15;
      fixed-address 192.168.123.50;
   }