FAI (Fully Automatic Installation) Is a large scale deployment solution, basicaly it boots from dhcp+pxe+tftp mounts a nfs root, from where the installation runs. You can use it to install Workstations and servers in your network. This guide tries to explain installation of fai into a Debian Edu network, and example config to install an Thin Client server and Workstations

Information sources

Package sources


This page describes how to install a Debian Edu workstation or thin-client-server with FAI.


  1. install main server, or if you wish a dedicated barebone profile
  2. configure network sources, update, upgrade
    • make sure you include deb http://layer-acht.org/debian etch fai

  3. Make sure you cache debian packages to improve speed You can either install a deb proxy server, or tune squid
    • [optionally] installing and configuring appprox,apt-proxy
    • [optionally] tune squid
    • [optionally] install a local debian mirror
  4. [optionally] to avoid warning grab holgers key
    • gpg --keyserver keyring.debian.org --recv 5072D036AC583520 && gpg --armor --export 5072D036AC583520 | apt-key add -

  5. make sure you have enough space for /srv (my /srv is 365M at the moment, so create a logical volume with 400MB and mount it as /srv)
  6. aptitude install fai-doc fai-server syslinux perl-tk libproc-daemon-perl
  7. verify that you got fai pacakges from holgers repo and not the ones in etch. it should be version 3.2.1, the rest of this text depends on it.
  8. edit the following in these files. leave the rest at the default.
    • in /etc/fai/fai.conf
      • LOGUSER=fai
    • in /etc/fai/make-fai-nfsroot.conf
      • FAI_DEBOOTSTRAP="etch http://tjener:9999/debian" /!\ example shows a approx server, replace with whatever suites you


    • in /etc/fai/NFSROOT
      • in the first PACKAGES install part add debian-edu-archive-keyring. if you use setup_harddisks_2 also add libparse-recdescent-perl parted lvm2

    • in /etc/fai/apt/sources.list use sane sources, consider copying the ones from the faiserver, (Yes you'll need holgers repo here too)
  9. run fai-setup -v



  1. add a service called faiserver
    • bind config, add a CNAME from faiserver to tjener (or staticxx if you have a dedicated) update serial and reload bind.
  2. Adjust the dhcp configuration
    • edit /etc/dhcp3/dhcp.conf add all your ltspserver hosts (as normally, or as a separate group) You will need.
      • add use-host-decl-names on;
      • add server-name faiserver;
      • add next-server faiserver;
      • add filename "fai/pxelinux.0";
  3. edit /etc/inetd.conf /!\ this will break a combined server. so use a main-server or a barebone server.

    • point tftp server to /srv/tftp
    • /etc/init.d/openbsd-inetd restart
  4. use lwat and add all ltspservers you want to install into the ltsp-server-hosts group


Everything here are examples, People knowing how to use FAI will cry at the spagetti. And It will most likely not work for your case. you should write your own configurations.

The FAI configspace that is necessary for these things is now avilable from svn - see http://svn.debian.org/wsvn/debian-edu/trunk/src/fai-configspace

Class needed


# assign classes hosts

# use a list of classes for our demo machine
case $HOSTNAME in
        echo "" ;;

(ifclass I386 || ifclass AMD64) && echo GRUB
exit 0

Files needed






# The loopback interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static

/srv/fai/config/files/usr/share/ltsp/plugins/ltsp-build-client/Debian/015-sources-list/ EDUCONFIG

#This provides the --copy-sourceslist argument to ltsp-client-builder
#Grab this file from the unstable ltsp source package. it's not part of the ltsp-server in etch. but needed if you want to run ltsp-client-builder from a network repo

Hooks needed

/srv/fai/config/hooks/# cat instsoft.EDUCONFIG /!\ must be executable

#copy files from files area
fcopy -iM  /etc/default/update-hostname
fcopy -iM etc/debian-edu/config

#get the tasks in early
$ROOTCMD apt-get -y install debian-edu-archive-keyring debian-edu-config education-tasks
$ROOTCMD apt-get -y install debian-edu-install

Script needed


error=0 ; trap "error=$((error|1))" ERR
fcopy -iM /etc/default/update-hostname
$ROOTCMD /etc/init.d/update-hostname restart
exit $error


error=0 ; trap "error=$((error|1))" ERR
$ROOTCMD cfengine-debian-edu -Dinstallation
exit $error


error=0 ; trap "error=$((error|1))" ERR
fcopy -iM /usr/share/ltsp/plugins/ltsp-build-client/Debian/015-sources-list
$ROOTCMD ltsp-build-client --mirror http://www:9999/debian --security-mirror http://www:9999/security  --copy-sourceslist --accept-unsigned-packages --dist etch --debconf-seeds /usr/lib/debian-edu-install/defaults.ltsp-chroot --late-packages sitesummary-client,debian-edu-artwork,debian-edu-artwork-usplash,debian-edu-archive-keyring,ltspfsd

exit $error


error=0 ; trap "error=$((error|1))" ERR
$ROOTCMD update-initramfs -k all -u
exit $error

Package lists needed

/!\ A better aproch would be to use the taskinst and install our task, but i can not make it work reliably recomendations are not installed. So i list every package needed. This probably includes noise so it needs cleaning.


PACKAGES aptitude
kde kdm alsa-base alsa-utils aspell-he avahi-daemon bzip2 culmus cupsys-bsd cupsys-client debian-edu-artwork dhcdbd dhcp3-client dvgrab
education-astronomy education-chemistry education-electronics education-geography education-graphics education-language education-logic-games education-mathematics education-misc education-music education-physics
fam ffmpeg gcompris gij-4.1 gimp gimp-data-extras gimp-print gnome-themes gnucap gnuchess gnupg-agent gnupg2 gperiodic
gsfonts-x11 hspell iamerican ibrazilian ibritish icatalan iceweasel
iceweasel-l10n-en-gb iceweasel-l10n-nb-no iceweasel-l10n-nn-no ingerman inkscape inorwegian java-gcj-compat k3b k3b-i18n
kaffeine kaffeine-mozilla kalzium kbruch keduca kgeography khangman kino klatin klettres kmplot kooka kseg ksokoban kstars
ktouch ktuberling kverbos kvoctrain libfribidi0 libnss-mdns myspell-en-gb
myspell-en-us myspell-nb myspell-nn ocrad openoffice.org openoffice.org-l10n-nb openoffice.org-l10n-nn
rdesktop sane sane-utils scim-anthy scim-canna scim-prime scim-skk scim-tables-ja scim-uim
scribus stopmotion ttf-freefont ttf-mgopen ttf-vlgothic tuxpaint tuxpaint-config unifont unzip vgrabbj xfonts-75dpi-transcoded xfs xorg zip
abakus artsbuilder atlantik atlantikdesigner auctex autoconf avahi-autoipd avahi-discover celestia cupsys-driver-gimpprint cvs dbdesigner ddd dia drgenius drgeo earth3d education-desktop ekiga firefox-locale-nb firefox-locale-nn flashplugin-nonfree foomatic-gui g++ gaim gcc gcompris-sound-en gdb geg gettext ghostview gnupg-doc gnuplot gstreamer0.10-alsa gstreamer0.10-audiosink gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3 gstreamer0.10-plugins-base gtablix gtk2-engines-gtk-qt gv icedove
icedove-locale-nb  icedove-locale-nn
k3dsurf kalgebra kasteroids katomic kbabel kbackgammon kbattleship kbear kblackbox kbounce kchart kdissert kdnssd kernel-package keuklid kformula kfouleggs kgeo kgoldrunner kgraph kig kivio kjumpingcube klearnspelling klickety klogic kmahjongg kmidi kmines kmultiply knorskverbs kolf kolourpaint konqueror-plugin-gnash konquest koshell kpaint kpat kpercentage kpoker kppp kreversi ksame kshisen ksirtet ksmiletris ksnake kspaceduel ktron kugar kuser kworldclock lacheck libaudiofile0 libc-dev libdvdcss2 libncurses5-dev libogg0 libvorbis0 libvorbis0a libxml1 lightspeed lyx make mdns-scan monopd mozilla-plugin-gnash mozilla-plugin-vlc mozilla-thunderbird-locale-nn mplayer mutt myspell-de-at myspell-de-ch myspell-fr-gut ncftp netpbm noteedit ogle-gui openoffice.org-filter-binfilter openoffice.org-filter-mobiledev openoffice.org-help-en openoffice.org-help-nb openoffice.org-help-nn
openoffice.org-hyphenation openoffice.org-l10n-common openoffice.org-l10n-en-us openoffice.org-style-crystal openoffice.org-style-default openoffice.org-style-industrial openoffice.org-thesaurus-en-us qcad qliss3d quanta rsibreak screen serpentine smbclient sodipodi solfege sql-ledger subversion swfdec-mozilla tablix2 tetex-bin tetex-brev tetex-doc tetex-extra texmacs timidity-patches totem totem-mozilla ttf-malayalam-fonts tuxmath ucblogo vlc wget wine wine-doc wine-utils xfonts-100dpi-transcoded xfonts-base-transcoded xine xine-dvdnav xine-ui xmms-arts xmms-cdread xmmsarts xpdf xpdf-japanese xplanet yacas zlib1g


PACKAGES aptitude
atftpd dhcp3-server iptables ltspfs nbd-server rdiff-backup tftp xfs syslinux
ltsp-server openssh-server


PACKAGES aptitude
apt-listchanges bc bind9-host cfengine2 cpufrequtils dash debconf-utils debian-archive-keyring
debian-edu-archive-keyring debian-edu-artwork-usplash debsecan dmidecode eject etherwake
ethtool finger gdebi hdparm hwinfo iftop iproute iputils-arping less libpam-foreground
libpam-ssh libwww-perl localization-config lsscsi lvm2 man-db manpages mdetect mii-diag
mtools ncftp nictools-pci nmap nscd nullidentd openssh-client openssh-server pciutils
popularity-contest procinfo procmail psmisc read-edid reportbug resolvconf rsync scsiadd
ssh strace sudo sysfsutils tcpdump tcptraceroute traceroute udev wget xdebconfigurator


PACKAGES aptitude
autofs-ldap cupsys education-common foomatic-db-engine foomatic-db-gutenprint
foomatic-filters-ppds hpijs hpijs-ppds hplip ijsgutenprint ldap-utils libnss-ldap
libpam-ldap munin-node nfs-common ng-utils ntp pnm2ppa rwho rwhod sitesummary-client
cupsomatic-ppd gq krb5-user libldap2-tls libpam-mount


PACKAGES aptitude
amarok ark digikam gwenview gwenview-i18n kaddressbook kaddressbook-plugins kamera kcalc kcharselect kde-i18n-nb kde-i18n-nn kdebase kdegraphics-kfile-plugins kdemultimedia-kio-plugins kdenetwork-kfile-plugins kdepasswd kdepim-kio-plugins kdeutils kdewallpapers kdf kdict kdm kfloppy kghostview kiosktool kipi-plugins kmail kmix knotes konq-plugins konqueror konsole korganizer kpilot kscreensaver ksirc ksmserver ksnapshot kwin menu menu-xdg
kate-plugins kcron kde kde-i18n-no kde-i18n-nony kdeaddons-kfile-plugins kdeedu kdepim-kfile-plugins kedit kfilereplace kfind kiconedit kmid kmidi knode kpaint kpm kpresenter krecord krita kruler kscd kschoolmenu kspread kuser kview kword

Installing a fai client

  1. fai-chboot -FIv ltpserver[nn], and boot the machine.

Default boot

to set the default to boot from local harddrive use fai-chboot -o default


LVM is not supported in the current fai packages, youll need to use svn versions, this is a moving target and your milage may vary basicaly checkout using svn co svn://svn.debian.org/fai/people/michael/features/setup_harddisks_2 hd2 put it into /srv/fai/nfsroot/usr/local. You must also make sure you install lvm2 package into your target.

Read more at http://wiki.fai-project.org/index.php/Setup-storage

Files needed for lvm


#clean drives, BAD BAD HAX wipe the drive before lvm is loaded. 
dd if=/dev/zero of=/dev/sda2 bs=1k count=1
dd if=/dev/zero of=/dev/sda1 bs=1k count=1
dd if=/dev/zero of=/dev/sda bs=1k count=1
hdparm -z /dev/sda

modprobe dm_mod

#run setup_harddisks_2
cd /usr/local/hd2/implementation/
debug=1 ./shdd2 -X

# skip the original parititioning
. $LOGDIR/disk_var.sh
skiptask partition

Example partition file for lvm /srv/fai/config/disk_config/EDUCONFIG

disk_config disk1 bootable:1
primary  /boot          250             ext3    defaults
primary  -              0-               -      -

# config the LVM
disk_config lvm

vg              vg_system               sda2

vg_system-root  /                       1548        ext3        defaults        -O dir_index,resize_inode
vg_system-usr   /usr                    4000        ext3        defaults        -O dir_index,resize_inode
vg_system-var   /var                    1000         ext3       defaults        -O dir_index,resize_inode
vg_system-opt   /opt                    3596         ext3       defaults        -O dir_index,resize_inode
vg_system-var+opt+ltsp+swapfiles /var/opt/ltsp/swapfiles 3000 ext3  defaults    -O dir_index,resize_inode
vg_system-swap  swap                    48         swap  -


These people have followed these instructions successfully: