FAI Jaunty installation

Från Ubuntu Sverige

Hoppa till: navigering, sök

Originaldokument [1]

Innehåll

[redigera] Introduktion

Mål: Använda FAI för att installera ubuntu 9.04 'Jaunty Jackalope' (eller vilken annan distribution som helst). Jag antar att du vill köra FAI-servern på en ubuntu 9.04 server, men tillvägagångssättet är väldigt likartat om du vill använda debian på serversidan.

Eftersom jag vet hur frustrerande det kan vara för en nykomling att förstå de många olika delarna i den här tekniken är intentionen med den här howton att få igång en fungerande grundläggande FAI-installation där du kan bygga på din kunskap. Den är avsiktligt väldigt grundläggande, och beskriver och förklarar *alla* nödvändiga steg för att nå detta mål. Så bli inte avskräckt av längden av den här howton, systemet bör vara uppe och snurra ganska snabbt.

Du är välkommen att redigera den här artikeln om du känner att det krävs. Det är ju trots allt en wiki!

Tack för hjälpen till Henning Glawe, Richard Grant och Henning Sprang, som hjäpte mig med den här lösningen. Tack för ert vänliga stöd!

Observera: Innan vi dyker in i ämnet, notera att på grund av avsaknad av fysiska maskiner, är all testning gjord i en VirtualBox-miljö, med både servern och klienten i en virtuell maskin på samma värddator. Stegen som tas här bör fungera oavsett, men håll detta i minnet om något inte fungerar som väntat.

Ansvarsfriskrivning: Du använder den här howton på egen risk! Jag tar inte något ansvar för om hela din IT-miljö går åt skogen!

Nu ska jag gå igenom steg för steg hur man sätter upp en komplett FAI-infrastruktur från grunden. Detta innebär att en del av stegen redan finns implementerade i ditt nätverk, såsom en DHCP-server, men du kan fortfarande behöva kontrollera din nuvarande konfiguration för att se om den motsvaras av konfigurationen som beskrivs här.

[redigera] Förutsättningar

Jag utgår ifrån att du bygger en separat testmiljö genom att följa stegen nedan. Det är hur som helst inte en dålig idé första gången och en väldigt bra väg att gå är att installera både ubuntu-servern såväl som target-klienterna i en VirtualBox-miljö (eller någon annan virtuell miljö).

[redigera] VirtualBox-konfiguration

Ställ in maskininställningarna i VirtualBox på det här sättet:

  • ubuntuserver
    • Åtminstone 5 Gbyte diskutrymme
    • NIC 1 (aka eth0): Anslutet till: Bryggat kort, Namn: [namnet på ditt fysiska nätverkskort, t ex 'eth0' eller 'wlan0']
    • NIC 2 (aka eth1): Anslutet till: Internt nätverk, Namn: intnet
  • ubuntuklient
    • NIC 1 (aka eth0): Anslutet till: Internt nätverk, Namn: intnet, MAC: 112233445566

Sen ställer du in så att du har ett separat nätverk för din FAI-miljö:

  • ubuntu server ska ha IP 192.168.0.1 och agera som router till världen utanför (dvs. resten av nätverket).
  • ubuntu exempelklienten som vi ska installera ska ha IP-adress 192.168.0.10.
  • Alla andra klienter kommer att få ett IP från IP-skopet 192.168.0.20 - 192.168.0.30.

[redigera] Installation av Ubuntuservern

Vi börjar i rätt ände. Kom ihåg, detta är en grundläggande instruktion, så det är viktigt att vi använder samma typ av miljö.

Stoppa i ubuntus installations-CD i ubuntuservern och starta installationen. Under installationen svarar du på frågorna som beskrivs nedan (i den här installationen utgår jag ifrån en svensk installation. Varför? För att jag vill visa hur man får svensk tangentbords-layout på klientmaskinen, vilket är lite trixigt. Samma principer funkar för alla språk utom en_US. Om du vill använda en standard en_US installation, använd inte LANG_SWEDISH-klassen och allt är frid och fröjd).

  • Choose Language
    • Wählen Sie ein Land oder Gebiet: Deutschland
  • ubuntu-Installer-Hauptmenü
    • Tastaturmodell erkennen: Nein
    • Herkunft der Tastatur: Germany
    • Tastenbelegung: Germany
  • Netzwerk einrichten
    • Primäre Netzwerk-Schnittstelle: eth0
    • Rechnername: vm-ubuntuserver
  • Festplatten partitionieren
    • Partitionsmethode: Geführt - gesamte Platte verwenden und LVM einrichten
    • Wählen Sie die zu partitionierende Festplatte: SCSI2 (0,0,0) (sda)
    • Änderungen auf die Speichergeräte schreiben und LVM einrichten: Ja
    • Amount of volume group to use for guided partitioning: 4.0 GB
    • Änderungen auf die Festplatten schreiben: Ja
  • Benutzer und Passwörter einrichten
    • Voller Name des neuen Benutzers: John Doe
    • Benutzername für Ihr Konto: john
    • Wählen Sie ein Passwort für den neuen Benutzer: [Enter password]
    • Ihren persönlichen Ordner verschlüsseln: Nein
  • Den Paketmanager konfigurieren
    • HTTP-Proxy-Daten:
  • Software auswählen und installieren
    • Wie möchten Sie Aktualisierungen auf diesem System verwalten: Keine automatischen Aktualisierungen
  • Softwareauswahl
    • Welche Software soll installiert werden:
      • [ ] DNS server
      • [ ] LAMP server
      • [ ] Mail server
      • [*] OpenSSH server
      • [ ] PostgreSQL database
      • [ ] Print server
      • [ ] Samba file server
      • [ ] Tomcat Java server
      • [ ] Virtual Machine host
      • [ ] Manual package selection

Starta nu om maskinen.

[redigera] Konfigurera din ubuntuserver

Logga in med ditt användarnamn och ändra till root-användaren:

sudo su

[redigera] Konfigurera nätverket

Jag antar att ubuntuservern har två nätverkskort, eth0 med kontakt med yttervärlden och eth1 med kontakt mot det interna nätverket. Redigera följande fil:

vi /etc/network/interfaces

och ersätt innehållet med följande rader:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# The external network
auto eth0
iface eth0 inet static
        address	192.168.178.2
        netmask	255.255.255.0
        broadcast	192.168.178.255
        network	192.168.178.0
        gateway	192.168.178.1

# The internal network
auto eth1
iface eth1 inet static
        address	192.168.0.1
        netmask	255.255.255.0
        broadcast	192.168.0.255
        network	192.168.0.0

Starta om servern. Om du använder ubuntu server i en virtuell maskin, kan det vara praktiskt att skapa en ögonblicksbild (snapshot) nu. När servern startat om, logga in igen med ditt användarnamn och ändra till root-användaren som förut:

sudo su

[redigera] Installera apt-proxy

Du kommer att behöva ett antal paket för din server och dina klienter. Vi försöker därför vara smarta och använda en proxy som lagrar programpaketen för dig så att de inte måste laddas ner från internet vid varje installation och därför snabbar upp processen rätt rejält.

Installallera apt-proxy:

apt-get -y install apt-proxy

Öppna följande fil:

vi /etc/apt-proxy/apt-proxy-v2.conf

och ersätt raden:

;dynamic_backends = on

med följande rad:

dynamic_backends = on

Starta om apt-proxy:

/etc/init.d/apt-proxy restart

Ändra din sources.list-fil så att den använder apt-proxyn du nyss installerade:

vi /etc/apt/sources.list

och ersätt innehållet med följande rader (där 192.168.0.1 är IP-adressen till din apt-proxy):

## Main Repositories 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty main restricted 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty main restricted 

## Major bug fix updates produced after the final release of the 
## distribution. 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted 

## Universe Repositories 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty universe 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty universe 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates universe 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates universe 

## Multiverse Repositories 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty multiverse 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty multiverse 
deb http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse 
deb-src http://192.168.0.1:9999/se.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse 

## Security Updates 
deb http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security main restricted 
deb-src http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security main restricted 
deb http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security universe 
deb-src http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security universe 
deb http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security multiverse 
deb-src http://192.168.0.1:9999/security.ubuntu.com/ubuntu jaunty-security multiverse

# FAI Repository 
deb http://192.168.0.1:9999/www.informatik.uni-koeln.de/fai/download lenny koeln

Importera GPG-nyckeln för FAI-förrådet:

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AB9B66FD

Uppdatera källorna och installera alla säkerhetsfixar som kan finnas därute:

apt-get update && apt-get -y upgrade

[redigera] Installera DNS

För att dina klienter ska kunna använda DNS (t ex för att hitta google.com), behöver du installera en DNS-server:

apt-get -y install bind9

[redigera] Activate routing (optional)

Om du installerar ubuntuservern på ditt existerande nätverk (med både FAI-servern och FAI-klienterna på samma subnät som resten av nätverket), kan du hoppa över det här steget.his step.

Men, vill du ha en säker testmiljö med ubuntuservern och FAI i ett separat subnät (exempelvis köra dem i virtuella maskiner), behöver du aktivera routing på ubuntuserver, eftersom all nätverkstrafik från ditt testnätverk kommer att passera via ubuntuservern.

Aktivera IP-Forwarding:

sysctl -w net.ipv4.ip_forward=1

Aktivera IP-Masquerading:

apt-get -y install ipmasq

Starta om IPmasq:

/etc/init.d/ipmasq restart

[redigera] Installera och konfigurera en TFTP server

För att boota över PXE, behöver du en TFTP-server.

apt-get -y install tftpd-hpa

För att lära TFTP-servern att starta som en daemon, redigera följande fil:

vi /etc/default/tftpd-hpa

och ersätt innehållet med följande rader:

# Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /srv/tftp/fai"

Redigera sedan den här filen:

vi /etc/inetd.conf

och kommentera ut följande rad (=genom att placera en brädgård # framför raden):

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

Starta om TFTP-servern:

/etc/init.d/tftpd-hpa restart


[redigera] Installera FAI

Grattis, om du har klarat dig så här långt, är alla tråkiga grundläggande inställningar gjorda. Låt oss därför fortsätta med det roliga, dvs. installera och konfigurera FAI!

Installera FAI:

apt-get -y install fai-server fai-doc syslinux

Öppna konfigurationsfilen för FAI:

vi /etc/fai/fai.conf

och ersätt innehållet med följande rader:

# an account on the install server which saves all log-files
# and which can change the kernel that is booted via network.
LOGUSER=fai

# set protocol type for saving logs. Values: ssh, rsh, ftp
FAI_LOGPROTO=ssh

# the install server
SERVER=192.168.0.1

# the configuration space on the install server
FAI_CONFIGDIR=/srv/fai/config

# access the config space on the specified install server
# using NFS
FAI_CONFIG_SRC=nfs://192.168.0.1$FAI_CONFIGDIR

# mount point where the mirror will be mounted
MNTPOINT=/media/mirror

# the local configuration directory on the install client
FAI=/var/lib/fai/config

Öppna konfigurationsfilen för nfsroot:

vi /etc/fai/make-fai-nfsroot.conf

och ersätt innehållet med följande rader:

# the directory on the install server which contains
# the nfsroot
NFSROOT=/srv/fai/nfsroot

# TFTP root directory
TFTPROOT=/srv/tftp/fai

# Where to get the packages needed to build the
# nfsroot
FAI_DEBOOTSTRAP="lenny http://ftp.debian.org/debian"

# the encrypted (with md5 or crypt) root password on all install clients during
# installation process; used when log in via ssh; default pw is: fai
FAI_ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'

# following lines should be read only for most of you
FAI_DEBOOTSTRAP_OPTS="--exclude=dhcp-client,info"

Vi skapar medvetet en Debian NFS-root här, så det är viktigt att lämna kvar raden FAI_DEBOOTSTRAP som i exemplet ovan!

Om du tittar noga så ser du att jag inte använde vår apt-proxy för FAI_DEBOOTSTRAP ovan. Detta är för att jag av någon anledning hade problem med att bygga nfsrooten om jag hade specificerat en apt-proxy. Att inte använda apt-proxyn här gör inte så stor skada eftersom nfsrooten bara behöver byggas en gång - oavsett hur många distributioner du installerar efteråt.

Ställ in rätt ägarrättigheter för katalogen /var/log/fai (loggarna kommer att skrivas till denna katalog):

chown -R fai /var/log/fai

Det är dags att köra fai-setup för första ( och förhoppningsvis den enda) gången. Ta en kopp kaffe eller något annat gott och luta dig tillbaka en stund, eftersom detta kommer att ta ett tag. För att felsöka , kör fai-setup -v för att få en mer omfattande output):

fai-setup

Efter att fai-setup kört klart, se efter så att du ser båda dessa meddelanden i loggen:

make-fai-nfsroot finished properly.
FAI setup finished.

Kolla också i loggen efter andra konstiga meddelanden.

fai-setup satte snällt upp våra NFS-exporter åt oss, men du kan vilja dubbelkolla så att exporterna stämmer för din nätverksmiljö. I det exempel vi kör här, måste vi ändra exporterna för att passa in i vår nätverksstruktur. Öppna följande fil:

vi /etc/exports

och kommentera (genom att lägga till # först på raden) följande rader:

/srv/fai/config 192.168.178.2/255.255.255.0(async,ro,no_subtree_check) 
/srv/fai/nfsroot 192.168.178.2/255.255.255.0(async,ro,no_subtree_check,no_root_squash)

och lägg till raderna nedan:

# NFS3 exports for FAI and PXE boot
/srv/fai/config		192.168.0.0/24(ro,nohide,insecure,no_subtree_check,async)
/srv/fai/nfsroot	192.168.0.0/24(ro,nohide,insecure,no_subtree_check,async,no_root_squash)

Läs om exports-filen:

exportfs -rv

[redigera] Bygga FAIs configspace

Som vi redan nämnt, försöker den här howton åstadkomma tre saker:

  1. Få upp en FAI-miljö snabbt
  2. Vara distributions-agnostisk (i det här fallet, installera ubuntu 9.04 på klienterna: mer generellt istallera vilken annan distribution på klienterna som helst - nyckelord multi-distribution)
  3. Använda svensk tangentbordslayout på klienterna

Du kan givetvis anpassa inställningarna till din specifika setup, vilket jag uppmuntrar till hur som helst. Det finns inget bättre lärsätt än hands-on-erfarenhet!

[redigera] Skapa katalogstrukturen

Det första och viktigaste steget är att ställa in FAIs configspace. Förbered din configspace genom att skapa följande kataloger i /srv/fai/config (Jag kan posta en tar.gz-fil med alla filerna som beskrivs nedan om någon erbjuder en permanent hosting för denna fil):

cd /srv/fai/config/
mkdir basefiles && mkdir class && mkdir debconf && mkdir disk_config && mkdir -p files/etc/apt/secring.gpg && mkdir files/etc/apt/sources.list && mkdir files/etc/apt/trustdb.gpg && mkdir files/etc/apt/trusted.gpg && mkdir -p files/etc/default/console-setup && mkdir files/etc/default/locale && mkdir -p files/etc/network/interfaces && mkdir hooks && mkdir package_config && mkdir -p scripts/BC_BASE && mkdir scripts/GRUB && mkdir scripts/LAST

Detta kommer att ge dig följande katalogstruktur:

|-- basefiles
|-- class
|-- debconf
|-- disk_config
|-- files
|   `-- etc
|       |-- apt
|       |   |-- secring.gpg
|       |   |-- sources.list
|       |   |-- trustdb.gpg
|       |   `-- trusted.gpg
|       |-- default
|       |   |-- console-setup
|       |   `-- locale
|       `-- network
|           `-- interfaces
|-- hooks
|-- package_config
`-- scripts
    |-- BC_BASE
    |-- GRUB
    `-- LAST

[redigera] Skapa filer i configspace

Vi har skapat katalogstrukturen, låt oss fylla den med innehåll!

basefiles-katalogen:

  • Vi lämnar den katalogen tom tills vidare; senare kommer vi att kopiera in base.tar.gz-filen för varje klientdistribution här.

[redigera] class katalogen:

  • vi class/10-base-classes

Klistra in följande rader:

#! /bin/bash

# Echo architecture and OS name in uppercase. Do NOT remove these two lines.
uname -s | tr '[:lower:]' '[:upper:]'
[ -x "`which dpkg`" ] && dpkg --print-installation-architecture | tr a-z A-Z

[ -f /etc/RUNNING_FROM_FAICD ] && echo "FAICD"
exit 0
  • vi class/20-hwdetect.source

Klistra in följande rader:

#! /bin/bash

# (c) Thomas Lange, 2002-2008, lange@informatik.uni-koeln.de

# NOTE: Files named *.source will be evaluated, but their output ignored. Instead
# the contents of $newclasses will be added to the list of defined classes.

[ "$action" = "dirinstall" ] && return 0 # Do not execute when doing dirinstall

echo 0 > /proc/sys/kernel/printk

# load all IDE drivers

# DMA does not work if we load all modules in drivers/ide, so only try pci modules
mod=$(find /lib/modules/$(uname -r)/kernel/drivers/ide/pci -type f | sed 's/\.o$//' | sed 's/\.ko$//' | sed 's/.*\///')
for i in $mod; do
    modprobe $i 1>/dev/null 2>&1
done
# Booting from CD does not always enable DMA.
for d in $( echo /proc/ide/hd[a-z] 2>/dev/null); do
    [ -d $d ] && echo "using_dma:1" > $d/settings
done

# load additional kernel modules (from old 11modules.source)
# this order should also enable DMA for all IDE drives
kernelmodules="usbkbd ide-disk ide-cd"
case $(uname -r) in
    2.6*) kernelmodules="$kernelmodules ohci-hcd usbhid usbmouse ide-generic mptspi ata_piix dm-mod md-mod aes dm-crypt" ;;
esac

for mod in $kernelmodules; do
    [ "$verbose" ] && echo loading kernel module $mod
    modprobe -a $mod 1>/dev/null 2>&1
done

# let discover do most of the job
#[ -x /sbin/discover-modprobe ] && /sbin/discover-modprobe

# now we can mount the USB filesystem
mount -t usbfs  usbfs /proc/bus/usb

modprobe -a sd_mod sr_mod

echo $printk > /proc/sys/kernel/printk

set_disk_info  # calculate number of available disks
save_dmesg     # save new boot messages (from loading modules)

  • vi class/50-host-classes

Klistra in följande rader:


#! /bin/bash

# assign classes hosts

# use a list of classes for our demo machine
case $HOSTNAME in
    vm-ubuntu904)
	echo "BC_BASE HDD_SINGLE NW_DHCP LANG_GERMAN OS_UBUNTU_904_X32" ;;
    *)
	echo "BC_BASE HDD_SINGLE NW_DHCP LANG_GERMAN OS_UBUNTU_904_X32" ;;
esac

(ifclass I386 || ifclass AMD64) && echo GRUB 
exit 0
  • vi class/BC_BASE.var

Klistra in följande rader:

# Base class which is shared among clients (which includes servers)
# may be overridden with custom *.var files

# allow installation of packages from unsigned repositories
FAI_ALLOW_UNSIGNED=1

KEYMAP=se-latin1-nodeadkeys

# set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
UTC=yes
TIMEZONE=Europe/Stockholm

# root password for the new installed linux system; md5 and crypt are possible
# pw is "fai"
ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'

# MODULESLIST contains modules that will be loaded by the new system,
# not during installation these modules will be written to /etc/modules
# If you need a module during installation, add it to $kernelmodules
# in 20-hwdetect.source. But discover should do most of this job
MODULESLIST="usbkbd ehci-hcd ohci-hcd uhci-hcd usbhid psmouse"

# erros in tasks greater than this value will cause the installation to stop
STOP_ON_ERROR=700

LOGSERVER=$SERVER
LOGPASSWD='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'

# use the new partitioning tool
USE_SETUP_STORAGE=1

# limit the number of packages install added to apt-get or aptitude
#MAXPACKAGES=

# if fai is usded to do softupdates, any local changes on the
# install clients are lost. However, fai makes backup copies of
# locally changed files; by default, they are written to the same
# directory as the original file, with .pre_fcopy appended.
# If you wish to save them together with the logfiles, this will
# do the job:
#FAI_BACKUPDIR=$LOGDIR/backup

# if log files are saved via FTP on the server, this specifies the
# path to save logfiles to. Not needed if $FAI_LOGPROTO in file
# fai.conf is set to 'ssh'.
#LOGREMOTEDIR=

#CONSOLEFONT=
#liloappend=

[redigera] debconf katalogen:

  • vi debconf/LANG_SWEDISH

Klistra in följande rader:


locales		locales/default_environment_locale select sv_SE.UTF-8
locales		locales/locales_to_be_generated multiselect sv_SE.UTF-8 UTF-8
xserver-xorg	xserver-xorg/config/inputdevice/keyboard/layout	string	se
xserver-xorg	xserver-xorg/config/inputdevice/keyboard/model	string	pc105
xserver-xorg	xserver-xorg/config/inputdevice/keyboard/options	string	lv3:ralt_switch
xserver-xorg    xserver-xorg/autodetect_monitor         boolean false
xserver-xorg    xserver-xorg/autodetect_keyboard        boolean true
xserver-xorg    xserver-xorg/autodetect_mouse           boolean true
xserver-xorg    xserver-xorg/autodetect_video_card      boolean true
console-setup	console-setup/variant	select	Germany
console-setup	console-setup/charmap	select	UTF-8
console-setup	console-setup/layoutcode	string	se
console-setup	console-setup/compose	select	No compose key
console-setup	console-setup/fontsize-text	select	16
console-setup	console-setup/optionscode	string	lv3:ralt_switch
console-setup	console-setup/layout	select	Swedish
console-setup	console-setup/detected	note	
console-setup	console-setup/variantcode	string	
console-setup	console-setup/codesetcode	string	Lat15
console-setup	console-setup/modelcode	string	pc105
console-setup	console-setup/ask_detect	boolean	false
console-setup	console-setup/altgr	select	Right Alt
console-setup	console-setup/ttys	string	/dev/tty[1-6]
console-setup	console-setup/model	select	Generic 105-key (Intl) PC
console-setup	console-setup/fontsize-fb	select	16
console-setup	console-setup/switch	select	No temporary switch
console-setup	console-setup/codeset	select	# Latin1 and Latin5 - western Europe and Turkic languages
console-setup	console-setup/toggle	select	No toggling
console-setup	console-setup/fontface	select	VGA
console-setup	console-setup/fontsize	string	16

[redigera] disk_config katalogen:

  • vi disk_config/HDD_SINGLE

Klistra in följande rader:


#
# <type> <mountpoint> <size> <fs type> <mount options> <misc options>
disk_config disk1 disklabel:msdos

primary		/	4G	ext3	rw,relatime,errors=remount-ro
primary		-	1G	swap	sw

[redigera] files katalogen:

[redigera] hooks katalogen:

  • vi hooks/savelog.LAST.source

Klistra in följande rader:


#! /bin/bash

# parse all log files for error messages
# print errors and warnings found to error.log
# WARNING: This will only work with english error messages!

errfile=$LOGDIR/error.log

# Define grep patterns. Do not start or end with an empty line!
globalerrorpatterns="error
fail
warn
bad
no space
syntax
Couldn't stat
Cannot access
is bigger than the limit
did not exist
non existent
not found
couldn't
can't
E: Sorry, broken packages
operator expected
ambiguous redirect
No previous regular expression
No such
Device or resource busy
unknown option
[a-z]\+\.log:E: 
No candidate version found
segfault
Couldn't find any package whose name or description matched
cannot create
The following packages have unmet dependencies"

globalignorepatterns="[a-z]\+\.log:# 
:+ error=0
:+ trap error=
task_error_func=
STOP_ON_ERROR=
courier-webadmin
gstreamer0.10-plugins-bad
ibwebadmin
kernel-patch-badram
kolab-webadmin
kolabadmin
gstreamer0.10-plugins-really-bad
gsambad
libad
libtest-nowarnings-perl
libtest-warn-perl
libclass-errorhandler-perl
zope-ploneerrorreporting
libroxen-errormessage
liberror-perl
libgpg-error-dev
libgpg-error0
^fstab.\+errors=remount
[RT]X packets:
WARNING: unexpected IO-APIC
warned about = ( )
daemon.warn
kern.warn
rw,errors=
Expect some cache
no error
failmsg
RPC call returned error 101
deverror.out
(floppy), sector 0
mount version older than kernel
Can't locate module 
Warning only 896MB will be used.
hostname: Host name lookup failure
I can't tell the difference.
warning, not much extra random data, consider using the -rand option
confC._FILE
Warning: 3 database(s) sources
were not found, (but were created)
removing exim
The home dir you specified already exists.
No Rule for /usr/lib/ispell/default.hash.
/usr/sbin/update-fonts-.\+: warning: absolute path
hostname: Unknown server error
EXT2-fs warning: checktime reached
RPC: sendmsg returned error 101
can't print them to stdout. Define these classes
warning: downgrading
suppress emacs errors
echo Error: 
Can't open dependencies file
documents in /usr/doc are no longer supported
if you have both a SCSI and an IDE CD-ROM
Warning: /proc/ide/hd?/settings interface is obsolete, and will be removed soon
Monitoring disabled
Error: only one processor found.
Error Recovery Strategy:
sector 0 does not have an
syslogin_perform_logout: logout() returned an error
grub is not in an XFS filesystem.
is harmless
not updating .\+ font directory data.
register_serial(): autoconfig failed
Fontconfig error: Cannot load default config file
asking for cache data failed
However, I can not read the target:
fai-kernels/modules.dep: No such file
Warning: The partition table looks like it was made
task_error=0
^info: Trying to set 
warning: /usr/lib/X11/fonts
can't read /etc/udev/rules.d/z25_persistent-net.rules
/cow': No such file or directory
Dummy start-stop-daemon called
cdrom: open failed."

# add pattern on some conditions
if [ -n $FAI_ALLOW_UNSIGNED ] ; then
   globalignorepatterns="$globalignorepatterns
WARNING: untrusted versions
Ignoring these trust violations"
fi
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Here you can define your own patterns. Put one pattern in a line,
# do not create empty lines.
myerrorpatterns="XXXXX"
myignorepatterns="XXXXX"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# The main routine
errorpatterns="$globalerrorpatterns
$myerrorpatterns"
ignorepatterns="$globalignorepatterns
$myignorepatterns"

cd $LOGDIR || exit 3
if [ -s $errfile ]; then
    echo "Errorfile already exists. Aborting."
    exit
fi

grep -i "$errorpatterns" *.log | grep -vi "$ignorepatterns" > $errfile
if [ "$verbose" ]; then
    egrep -v '^software.log:' $errfile > $LOGDIR/tempfile
    mv $LOGDIR/tempfile $errfile
fi

if [ -s $errfile ]; then
   echo "ERRORS found in log files. See $errfile"
else
   echo "Congratulations! No errors found in log files."
   export flag_reboot=1
fi
  • vi hooks/updatebase.OS_UBUNTU_904_X32

Klistra in följande rader:

#! /bin/bash
# Import custom apt sources.list and apt keys.

echo "Preparing apt"
fcopy -v /etc/apt/secring.gpg
fcopy -v /etc/apt/sources.list
fcopy -v /etc/apt/trustdb.gpg
fcopy -v /etc/apt/trusted.gpg

# Initialize apt-key before apt is called the first time
if [ -x $target/usr/bin/apt-key ]; then
  echo "Apt: list of keys"
  $ROOTCMD /usr/bin/apt-key list
fi

# Copy the console-setup file early to avoid unnecessary
# error messages
fcopy -v /etc/default/console-setup

[redigera] package_config katalogen:

  • vi package_config/BC_BASE

Klistra in följande rader:


PACKAGES aptitude
apt
apt-utils
cfengine2
console-setup
debconf-utils
dhcp3-client
fai-client
grub
language-pack-de
less
locales
openssh-server
vi
  • vi package_config/LANG_SWEDISH

Klistra in följande rader:

PACKAGES aptitude
language-pack-sv
openoffice.org-l10n-common
openoffice.org-l10n-sv
openoffice.org-help-sv
openoffice.org-hyphenation
language-pack-gnome-sv-base
language-pack-gnome-sv
evolution-documentation-sv
language-support-translations-sv
thunderbird-locale-sv-se
myspell-sv-se
language-support-writing-sv
wswedish
  • vi package_config/OS_UBUNTU_904_X32

Klistra in följande rader:

PACKAGES aptitude
linux-image-generic

PACKAGES aptitude-r
ubuntu-desktop

PACKAGES aptitude
ubuntu-restricted-extras

[redigera] scripts katalogen:

  • vi scripts/BC_BASE/10-misc

Klistra in följande rader:

#! /bin/bash

# (c) Thomas Lange, 2001-2008, lange@debian.org

error=0 ; trap "error=$((error|1))" ERR

# a list of modules which are loaded at boot time
fcopy -i /etc/modules
for module in $MODULESLIST; do
    ainsl -a $target/etc/modules "^$module$"
done

fcopy /etc/hostname || echo $HOSTNAME     > $target/etc/hostname
echo $TIMEZONE    > $target/etc/timezone
ln -fs /usr/share/zoneinfo/${TIMEZONE} $target/etc/localtime

fcopy -iM /etc/hosts /etc/motd

# set root password
echo "root:$ROOTPW" | $ROOTCMD chpasswd --encrypted
# make /root accessible only by root
chmod 0700 $target/root
chown root:root $target/root
# copy default dotfiles for root account
fcopy -ir /root

exit $error
  • vi scripts/BC_BASE/20-fcopy

Klistra in följande rader:

#! /bin/bash

# Copy files from $FAI/files
fcopy -v /etc/network/interfaces
fcopy -v /etc/ssh_known_hosts
fcopy -v /etc/default/locale
  • vi scripts/GRUB/10-setup

Klistra in följande rader:

#! /bin/bash

error=0 ; trap "error=$((error|1))" ERR

# Eventual source the disk_var.sh just in case 
# the BOOT_DEVICE/BOOT_PARTITION/ROOT_PARTITION 
# variables are overwritten
[ -r /tmp/fai/disk_var.sh ] && . /tmp/fai/disk_var.sh

ifclass NOMBR && BOOT_DEVICE=$BOOT_PARTITION

[ -z "$BOOT_DEVICE" ]    && exit 701
[ -z "$BOOT_PARTITION" ] && exit 702

# call grub-install from ubuntu
$target/usr/sbin/grub-install --no-floppy --root-directory=/$target $BOOT_DEVICE

# call update-grub inside ubuntu chroot with special "no user questions" flag
$ROOTCMD /usr/sbin/update-grub -y

exit $error
  • vi scripts/GRUB/20-initramfs

Klistra in följande rader:

#! /bin/bash

error=0 ; trap "error=$((error|1))" ERR

not_up2date() {
  if [ $# -eq 0 ] ; then
    echo "No package name given!"
    return 127
  fi

  egrep -q "(^Unpacking $1 |^Unpacking replacement $1 )" $LOGDIR/*.log
  return $?
}

if [ `not_up2date lvm2` -o `not_up2date mdadm` ] ; then
  $ROOTCMD update-initramfs -k all -u
fi


exit $error
  • vi scripts/LAST/50-misc

Klistra in följande rader:

#! /bin/bash

# copyright Thomas Lange 2001-2007, lange@debian.org

error=0 ; trap "error=$((error|1))" ERR

# remove backup files from cfengine
dirs="root etc var"
for path in $dirs; do
    find $target/$path -maxdepth 20 -name \*.cfedited -o -name \*.cfsaved | xargs -r rm
done

[ "$FAI_DEBMIRROR" ] && 
echo "#$FAI_DEBMIRROR $MNTPOINT nfs ro 0 0" >> $target/etc/fstab

# set bios clock
if [ $do_init_tasks -eq 1 ] ; then
    case "$UTC" in
       no|"") hwopt="--localtime" ;;
       yes)   hwopt="--utc"       ;;
    esac
    $ROOTCMD hwclock $hwopt --systohc || true
fi

# Make sure everything is configured properly
echo "Running \"apt-get -f install\" for the last time."
$ROOTCMD apt-get -f install

lskernels=$(echo $target/boot/vmlinu*)
[ -f ${lskernels%% *} ] || echo "ERROR: No kernel was installed. Have a look at shell.log"

exit $error

Det var mycket klipp&klistra på en gång! Efter att ha gjort scripten exekverbara genom att ge kommandot

chmod -R 755 /srv/fai/config

är det dags att skapa vår distributionsspecifika base.tar.gz.


[redigera] Skapa en anpassad base.tgz

För varje distribution som du vill rulla ut med FAI, behöver du skapa en separat base.tgz. Detta är den mest kritiska delen för att få FAI att bli multi-distribution!

Först och främst behöver du starta upp en instans av exakt den distribution och den version du vill rulla ut på klienterna. Om du vill rulla ut Ubuntu 9.04, behöver du starta upp en Ubuntu 9.04-miljö.

När du väl startat upp din valda distribution, byt användare till root:

sudo su

och uppdatera distributionen för att vara säker på att du använder uppdaterade paket. (Du kan vilja redigera distributionens /etc/apt/sources.list först, så att den använder din apt-proxy; se ovan):

apt-get update && apt-get -y upgrade

Installera nu pbuilder och debootstrap. Du behöver dessa för att skapa din base.tgz.

apt-get -y install pbuilder debootstrap

Du behöver modifiera dessa två paket en aning. Öppna filen:

vi /etc/pbuilder/pbuilderrc

och ändra följande två rader (observera att vi här använder vår apt-proxy):

MIRRORSITE=http://192.168.0.1:9999/archive.ubuntu.com/ubuntu
DISTRIBUTION=jaunty

Kopiera nödvändiga filer från /etc/apt till din pBuilder-katalog:

mkdir /etc/pbuilder/apt.config/
cp -ar /etc/apt/* /etc/pbuilder/apt.config/

Det är viktigt att kolla så att inte filen 99update-notifier ligger i katalogen /etc/pbuilder/apt.config/apt.conf.d/. Den filen kan komplicera saker längre fram. Gör därför:

rm /etc/pbuilder/apt.config/apt.conf.d/99update-notifier

Öppna filen:

vi /etc/pbuilder/apt.config/apt.conf.d/allow-unauthenticated

och lägg till följande rad:

APT::Get::AllowUnauthenticated 1;

Med följande kommando skapas chroot-miljön:

pbuilder create

Tid för ytterligare varm dryck och lite relax.

När processen väl avslutats, har base-imagen skapats i /var/cache/pbuilder/base.tgz. Den här filen måste sedan kopieras till $FAI/config/basefiles/-katalogen vi skapade ovan, till exempel genom:

scp /var/cache/pbuilder/base.tgz root@192.168.0.1:/srv/fai/config/basefiles/OS_UBUNTU_904_X32.tar.gz

Vad hände här? Jo, om du vill rulla ut flera olika distributioner med FAI, hur vet då FAI vilken distribution det ska peta in på vilken klient? Svaret är enkelt, genom att tilldela den till en klass. Säg att du vill rulla ut Ubuntu 9.04 x32 och Debian Lenny x32. Då kan du benämna dina klasser till exempel OS_UBUNTU_904_X32' och OS_DEBIAN_LENNY_X32 och lägga till dem till dina klienter i filen 50-host-classes. Vid installationen kollar FAI efter en base.tgz-fil med namnen OS_UBUNTU_904_X32.tar.gz och OS_DEBIAN_LENNY_X32.tar.gz.

Så en klient med klassen OS_UBUNTU_904_X32 kommer att serveras en base.tgz med namnet OS_UBUNTU_904_X32.tar.gz. Därför behöver du döpa om din base.tgz-fil till namnet på den klass som används (viket vi redan gjort genom scp-kommandot ovan).

Den här processen bör vara samma för andra distributioner också; det vill säga skapa en base.tgz-fil med pbuilder och kopiera den här filen till $FAI/basefiles/OS_DEBIAN_LENNY_X64.tar.gz. Bara kontrollera att du specificerar och applicerar klasserna ordentligt.

[redigera] Let's roll!

Efter lite trötta ögon och ömma fingrar är vi äntligen klara!

Allt vi behöver göra är att berätta för FAI vilken/vilka klient(er) som ska användas för installation. Detta gör du med kommandot:

fai-chboot -IB 192.168.0.10

Där 192.168.0.10 är IP-adressen för målklienten. Du kan tilldela en klient ett specifikt IP-nummer genom att använda dess nätverkskorts MAC-adress i DHCP-konfigurationen. Se detta kapitel i den är howton för att se hur man gör detta.

Om du upplever problem vid den här delen, t ex att klienten inte hittar TFTP-servern, starta då om ubuntuservern och försök igen. Mer än en gång löste detta mina problem.

Jag rekommenderar att använda en testklient för att testa. Om ingen fysisk klient finns tillgänglig, kan du använda VirtualBox eller någon annan virtualiseringsprodukt.

Nu, när målklienten startas upp nästa gång, kontrollera så att den är satt till att starta från nätverk (antingen via en inställning i BIOS eller genom att tillfälligt välja uppstartsenhet om din klient stödjer detta). VARNING: All din klients data - alltså hela hårddisken - kommer att skrivas över i processen! Var säker på att du vet vad du gör och vad det innebär!

Om allt gick bra, när klienten väl är installerad, kan du logga in med användarnamn root och lösenord fai. Kontrollera loggarna i /var/log/fai/vm-ubuntu904/last/error.log för att se eventuella fel.

Grattis! Du har slutfört din första FAI-installation!

Tack för att du läste!

Personliga verktyg