FAI Jaunty installation
Från Ubuntu Sverige
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
- Welche Software soll installiert werden:
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:
- Få upp en FAI-miljö snabbt
- 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)
- 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!
