Se SE/Tools/Kadischi/Documentation

= Kadischi Dokumentation =

Vad är Kadischi
Kadischi är en applikation för skapandet av Fedora-baserade Live CDs. Applikationen tar Fedora repository som källa och skapar sen en livecd isoavbild. Kadischi är fortfarande i början av utvecklingsstadiet, men har grundläggande funktionalitet och kan köras med framgång.

Hur Kadischi fungerar
Helt enkelt, så använder Kadischi sig av anaconda för att installera systemet i en tillfällig mapp (angiven i konfigurationsfilen) på användarens hårddisk. Sen startar den ett antal script (som finns i /usr/local/share/kadischi/post_install_scripts) för att modifiera systemet så att de körs framgångsrikt i en läs-endast miljö (CD). Efter att alla modifikationer är klara, så skapar Kadischi en initrd avbild, packar systemträdet (i själva verket, så skapar det en packad kopia, och tar bort orginalet), och skapar den en iso avbild av systemet. För mer detaljer om processen, see "Under skalet" sektionen.

Bug reports
Använd bugzilla för bug rapporter och önskemål. För en detaljerad info hur du gör, ta en titt på ["Kadischi"] sidan.

Kreditering
Kadischi är baserat på readonly-root paketet från Stateless-linux  projektet.

Många design beslut tas kollektivt av folk från fedora-livecd listan.

Många av idéerna kommer också från linux4all projektet.

Projektets namn kommer från Elliot Lee..

Föregående projekt underhållare var Darko Ilic (darko.ilic@gmail.com).

Eftersom prjektet startade som ett av Google. Det kommer att konfiguera paketet för att kunna bygga. Om du vill lägga till några val till, så kan du ge dom till   och den kommer att vidarebefodra valen till .

Efter det så måste du köra  så att applikationen byggs.

Kör  för att installera applikationen (standardsökväg är /usr/local/share/kadischi för applikationsfiler och /etc/kadischi för konfigurationsfiler). En annan sak som du måste göra för att kunna köra applikationen är att patcha anaconda. Filer som du behöver patcha är /usr/sbin/anaconda och /usr/lib/anaconda/flags.py. Patcherna finns i /usr/local/share/kadischi/patches dir, och är skapade mot anaconda-10.2.1.5-2 (fc4 standard). För instruktioner, konsultera "Hur du lägger till en patch" sektionen i Appendix.

Konfiguration
Du behöver ändra /etc/kadischi/build.conf

gedit /etc/kadischi/build.conf &

Och ange BUILDDIR variabel. T.ex.:

BUILDDIR=/tmp

BUILDDIR är en mapp som används för att lagra tillfälliga filer (temporära installationer körs i den mappen). Du kommer behöva runt 1.5x storlek för installation. 3GB fungerade bra för mig.

Avinstallation
Gå till rotmappen och kör. Se till att det inte finns några extra filer som lagts till i applikationens mappar (som exempel /etc/kadischi/build.conf~).

Grundläggande instruktioner
Det enkla sättet att köra Kadischi är att skriva följande kommando i en terminal

kadischi sökväg-till-repository sökväg-till-iso-avbild

där sökvägen kan vara till det lokala filsystemet, men också till ftp, http eller nån annan typ av repository. Exempel:

kadischi /tmp/fc4 /tmp/fedora-live.iso

där /tmp/fc4 är en mapp som håller ett Fedora repository (vilket betyder att rpms finns i /tmp/fc4/Fedora/RPMS och comps.xml, hdlist och några andra filer finns i /tmp/fc4/Fedora/base). För instruktioner om att skapa ett eget lokalt repository, konsultera "Hur du bygger ett repository" sektionen i Appendix. Exempel 2:

kadischi http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os /tmp/fedora-live.iso

Exempel 3: (använder mirror siten)

kadischi http://mirrors.kernel.org/fedora/core/4/i386/os/ /tmp/fedora-live.iso

för installation från http repository. För detaljer om tillgängliga installationsmetoder, konsultera "Anaconda installationmetoder" i Appendix. ””Om du inte använder Fedora repository””, så behöver du ändra /etc/kadischi/buildstamp eller använda en standard buildstamp fil. För detaljer, konsultera "buildstamp fil" i Appendi

Kommandoradsval
Skriv  för en lista över Kadischi kommandon.

Köra Kadischi automatiskt
Eftersom Kadischi inte kräver någon interaktion, och den enda interaktion som behövs är den med anaconda, så är det ända vi behöver göra är att få anaconda att köra automatiskt. Detta kan göras genom att använda kickstart filer. Om du ger anaconda en komplett kickstart fil, så kommer den att köra utan att fråga (om ks filen inte är komplett så kommer anaconda endast fråga efter information som den saknar). Om du vill köra Kadischi med kickstart. använd  kommandoradsval:

kadischi /tmp/fc4 /tmp/fedora-live.iso --kickstart=/path/to/kickstart.cfg

Några exempel av kickstart filer som kan användas är inkluderade i paketet och finns i /usr/local/share/kadischi/ks_examples. En annan sak som är av betydelse är att ta upp användargränssnittet. Även när en komplett ks fil finns med, så vill anaconda ta fram användargränssnittet (GUI eller TUI) och det är något som vi inte vill här. Lyckligtvis, så kan anaconda köras i terminalläge, där användargränssnittet inte aktiveras. Så, om du vill köra Kadischi i bakgrunden, så behöver du göra nåt i stil med:

kadischi /tmp/fc4 /tmp/fedora-live.iso --kickstart=/path/to/kickstart.cfg -C

där  kommandorad. Du kan också använda istället för.

Var uppmärksam på att i kommandorad läget så går det inte att interaktera med anaconda. så har du en inkomplett kickstart fil, så kommer anacinda skicka ett felmeddelande till stdout och stoppa (den kommer inte avbryta körningen). Genom att använda dessa kommandorad val, så kan du exempelvis skapa ett cron arbete som skapar fräscha ISOs från rawhide varje dag.

Skapa ett eget Live CD system
Jag kommer här att ge dig lite idéer hur du skapar en egen live CD. Var uppmärksam på att det förmodligen finns många smarta sätt att göra det på som jag inte känner till


 * Använd en kickstart fil, och alla valen som det ger, inkluderat %pre och %post installationsscript.
 * Lägga till script till /usr/local/share/kadischi/post_install_scripts/ eller ändra i dom som redan finns där. Dom scripten körs direkt efter att systemet är installerat till chroot miljön, men dom körs INTE i chroot miljön utan i huvudsystemet. Kadischi sorterar alla körbara från post_install_scripts mappen efter namn, och kör dem och ger dem sökvägen till det installerade systemet som ett argument.
 * Skapa rpmfiler med modifikationer, och lägga till dem till repository.

Tips: Om du vill skapa din egna live CD, ta en titt i "Under skalet" sektionen i detta dokument. Kolla extra noga på scripts in post_install_scripts mappen, och på /usr/local/share/kadischi/movefiles.py. Dom filerna är noga dokumenterade och att läsa dom första raderna kan vara hjälpsamma.

Tips och tricks

 * Skaffa en återskrivbar CD, du kommer att behöva en (men kom ihåg att systemet kommer att köras långsammare när det körs från en RW skiva)
 * Om du använder en kickstart fil, lägg till --excludedocs till %packages (så här: %packages --excludedocs) för att hindra att installation av dokument sker i /usr/local/doc (det sparar utrymme, beroende på antal paket)
 * lägg till så många paket som du vill (inte mer än 10GB dock), och skriv iso avbilden till en DVD skiva.

Hur Kadischi fungerar (detaljerat)
I denna sektion, så kommer jag att beskriva vad som händer från det att du kör Kadischi från kommandoraden till att det skriver "Finished" i loggen. Om du bara vill använda Kadischi så behöver du inte läsa denna sektion, men om du vill göra några större förändringar på din Live CD eller om du är nyfiken på hur allt fungerar, så kan du fortsätta att läsa.

När du skriver kadischi på kommandoraden, så körs /usr/bin/kadischi. Det är ett enkelt bash skript som sätter PYTHONPATH variabler för att inkludera Kadischi bibliotek, och kör /usr/local/share/kadischi/kadischi.py. kadischi.py är ett script som har hand om koordinationen mellan alla element. Det
 * kör kommandoradsval och argument
 * kollar om allt är OK (antal givna argument, förekomst av destinationsfil, UID, förekomst av krävda RPM filer, konfigurationsfil)
 * sätter värden till variabler (från information som den får från kommandoraden och från konfigurationsfilen)
 * skapar en undermapp med namnet 'livecd_build_no${number}' under den specifierade huvudmappen; alla temporära filer sparas där
 * startar anaconda; anaconda körs med --live cd flagga, --rootpath val och alla andra val specifierade på kommandoraden )som --kickstart, --cmdline etc.). Detta är den viktigaste delen av processen. Anaconda installerar hela systemet i mappen på den lokala hårddisken.
 * startar script från /usr/local/share/kadischi/post_install_scripts. Dom scripten används för att modifiera systemet så att det fungerar ordentligt från Live CDn
 * startar /usr/local/share/kadischi/livecd-mkinitrd.sh som skapar en initrd avbild som kommer att användas på Live CD systemetimage that will be used on the live CD system
 * startar /usr/local/share/kadischi/movefiles.py som flyttar alla filer och mappar som skall vara skrivbara när Live CDn bootas till en specifik mapp. Den mappen packas sen i kadischi.tar.gz. När skivan sen bootas, så hamnar detta arkivet på tmpfs disken, och alla uppackade filer och mappar monteras (med mount --bind) i deras riktiga platser.
 * skapar en packad kopia av hela systemet (zisofs används till komprimering)
 * kopierar några filer som inte skall vara packade (kärnan, initrd etc)
 * tar bort det uppackade trädet
 * startar /usr/local/share/kadischi/create-iso.sh som skapar en isoavbild av det packade systemträdet
 * städar byggmappen

Kadischi källträd
Det förklarar sig själv hoppas jag, men det skadar ju inte om jag skriver några rader här. Jag kommer bara att nämna mappar här, filer är redan dokumenterade (dom flesta i alla fall).

kadischi/

conf/

Innehåller alla konfigurationsfiler. Under installation så hamnar dessa filer i /etc/kadischi/

doc/

Kadischi dokumentation

find_live_cd/

Källkod för hitta-live-cd (find-live-cd) verktyget. hitta-live-cd startas av linuxrc, och har uppgiften att hitta disken som håller vår live cd och montera den

ks_examples/

Några exempel på kickstart filer som kan användas med Kadischi

lib/

Funktioner och moduler som används av Kadischi

linuxrc/

linuxrc script som används i Live CD initrd avbilden

livecd_generator/

Denna mapp innehåller huvudscriptet, det script som är chef över hela processen av genereringen av Live CDn. Här finns också några script som används under processen.

patches/

Patcher som jag skapade för anaconda så att anaconda fungerar tillsammans med Kadischi. En dag när vi är säkra på att dom är ok, så kommer dom att gå uppåt.

po/

En mapp där pot filer skall placeras. Finns inget där just nu.

post_install_scripts/

En samling script som körs på det nya systemet (innan det packas och läggs i en iso fil) så att allt körs ordentligt från Live CDn. En del av dem kan ändras för att anpassa systemet efter dina önskemål.

rc/

Scripts som används under start av Live CD systemet

scanswap/

scanswap är ett verktyg som söker efter swap partitioner på den lokala hårddisken, och gör den tillgänglig ifall den hittar en

Hur du lägger till en patch
Synopsis för patch verktyget ser ut som följer

patch [options] [originalfile [patchfile]

och vad vi behöver här är

patch -b /usr/sbin/anaconda /usr/local/share/kadischi/patches/anaconda.patch patch -b /usr/lib/anaconda/flags.py /usr/local/share/kadischi/patches/flags.py.patch

-b står för backup, så patchen gör en backup av dina filer innan patchen läggs till. Backups får namnen /usr/sbin/anaconda.orig och /usr/lib/anaconda/flags.py.orig. För mer info om patch verktyget, skriv  eller kolla Merging with patch

Hur du bygger ett repositorium
Om du har en Fedora installationscd så är det bra om du kopierar över filerna till hårddiskan och kör installationen från hårddiskrepositoriet eftersom det är mcyket snabbare (och du kommer säkert att få flera livecd versioner innan du har skapat den rätta). Här är prodeduren: Och det är klart. Du kan använda detta repositorie till Kadischi (sökväg till repositorium är /tmp/fc4). Var uppmärksam på att detta inte är ett standard repositorie, och du kan inte, som exempel, använda det med yum. Om du vill skapa ett standard repositorie, var vänlig läs i något annat dokument.
 * skapa en rotmapp för ditt repositorium (ex. /tmp/fc4)
 * skapa under mapparna /tmp/fc4/Fedora, /tmp/fc4/Fedora/RPMS, /tmp/fc4/Fedora/base
 * kopiera innehållet från cdrom:/Fedora/base mappen (från disc1) till /tmp/fc4/Fedora/base
 * kopiera innehållet från cdrom:/Fedora/RPMS mappen (från alla 4 discs) till /tmp/fc4/Fedora/RPMS

Anaconda installationmetoder
(tagen från http://rau.homedns.org/twiki/bin/view/Anaconda/AnacondaISOLINUXOptions) Du kan kolla /usr/share/doc/anaconda-${version}/install-methods.txt för mer information.
 * method=nfs: -- Använd för en NFS installation.
 * method= http:// -- Använd för en HTTP installation
 * method= ftp:// -- Använd för en FTP installation
 * method=hd:// / -- Använd på för en hårddiskinstallation
 * method=cdrom -- Gör en CDROM baserad installation.

buildstamp fil
Anaconda använder buildstamp filer för att samla information som relaterar till distributionen. Här är ett exempel på buildstampfilen från FC 4:

200506062237.i386 Fedora Core 4 Fedora http://bugzilla.redhat.com/bugzilla/

Som du kan se så är det 5 rader. Den första raden är ett byggid, den andra är produktnamnet, den tredje är projektversionen, den fjärde är produktens sökväg och den femte är urlen till buggrapporter.

Den som är väldigt viktig är produktens sökväg (den fjärde) för den används för att komma åt repositoriet. Om ditt repositorie är t.ex. http://mirrors.kernel.org/fedora/core/4/i386/os/, så kommer anaconda att leta efter rpms i http://mirrors.kernel.org/fedora/core/4/i386/os/${productPath}/RPMS, så för Fedora så skall det fjärde raden i buildstamp filen vara "Fedora".

Om du får en evig loop av "Reading package information... Unable to read header list. This may be due to a missing file or bad media. Press to try again" från anaconda, så beror det sannolikt på att det är något fel med produktens sökväg.

Anaconda letar efter buildstamp filer i /tmp/product/.buildstamp och /.buildstamp (i den ordningen), så Kadischi lägger sin buildstamp file i /tmp/product/.buildstamp så anaconda kan hitta den. Om filen /tmp/product/.buildstamp redan existerar, så kommer Kadischi att flytta den till en temporär plats, lägga sin fil till /tmp/product/.buildstamp, köra anaconda, och när anaconda gjort klart arbetet så kommer orginalfilen att återställas.