Difference between revisions of "Arch Build System (Dansk)"

From ArchWiki
Jump to: navigation, search
Line 20: Line 20:
  
 
==== Hvad er ABS? ====
 
==== Hvad er ABS? ====
ABS er en forkortelse af Arch Build System - eller på dansk Archs byggesystem. Det er et 'ports'-lignende system til at bygge software fra '''kilden'''.  
+
ABS er en forkortelse af Arch Build System - eller på dansk Archs byggesystem. Det er et 'ports'-lignende system til at bygge software fra '''kilden'''.<br>Hvor Pacman er det specialiserede værktøj i Arch Linux til at håndtere binære pakker (inklusiv pakker, der er bygget med ABS ), er ABS det specialiserede værktøj til at kompilere fra en kilde til en installérbar pkg.tar.gz-pakke.
 
=====Hvad er et 'ports'-lignende system?=====
 
=====Hvad er et 'ports'-lignende system?=====
'Ports' er et system, anvendt af FreeBSD, der lader '''kilde'''-pakker blive downloadet, udpakket, tilrettet, kompileret og installeret. ''En 'port' er blot en lille mappe på brugerens computer med et navn, der svarer til det software der installeres. Denne mappe indeholder nogle få filer med instruktioner for download og installation af en pakke fra en kilde'', typisk ved at navigere til mappen - eller porten - og udføre kommandoerne ''make'' og ''make install''. Systemet vil så downloade, kompilere og installere det ønskede software. En typisk bruger af BSD-porte vil downloade hele port-hierarkiet, der blot er et mappetræ med mange undermapper - eller porte, der hver svarer til det respektive i9nstallerbare software.
+
'Ports' er et system, anvendt af FreeBSD, der lader '''kilde'''-pakker blive downloadet, udpakket, tilrettet, kompileret og installeret. ''En 'port' er blot en lille mappe på brugerens computer med et navn, der svarer til det software der installeres. Denne mappe indeholder nogle få filer med instruktioner for download og installation af en pakke fra en kilde'', typisk ved at navigere til mappen - eller porten - og udføre kommandoerne ''make'' og ''make install''. Systemet vil så downloade, kompilere og installere det ønskede software.
  
 
====='''ABS''' er et lignende koncept.=====
 
====='''ABS''' er et lignende koncept.=====
Line 28: Line 28:
 
=====Hurtig gennemgang=====
 
=====Hurtig gennemgang=====
 
Kør kommandoen ''abs'' som 'root' for at oprette ABS-træet. Hvis du f.eks. vil bygge editoren Nano fra '''kilden''', skal du kopiere filen /var/abs/core/base/nano til en byggemappe. Gå ind i byggemappen og kør en '''makepkg'''. Så enkelt er det.<br>
 
Kør kommandoen ''abs'' som 'root' for at oprette ABS-træet. Hvis du f.eks. vil bygge editoren Nano fra '''kilden''', skal du kopiere filen /var/abs/core/base/nano til en byggemappe. Gå ind i byggemappen og kør en '''makepkg'''. Så enkelt er det.<br>
'Makepkg' vil forsøge at læse og eksekvere de instruktioner, der findes i PKGBUILD-filen. Tar-arkivet fra kilden downloades, udpakkes, kompileres og klemmes ind i en pakke med fil-endelsen .pkg.tar.gz, som det instrueres i filen PKGBUILD.<br>
+
'Makepkg' vil forsøge at læse og eksekvere de instruktioner, der findes i PKGBUILD-filen. Tar-arkivet fra kilden downloades, udpakkes og kompileres i henhold til de 'CFLAGS', der angives i /etc/makepkg.conf og til sidst klemmes ind i en pakke med fil-endelsen .pkg.tar.gz, som det instrueres i filen PKGBUILD.<br>
 
Installation er så nemt, som at køre en ''pacman -U nano.pkg.tar.gz'', eller lav pakken og installér den rent med Pacman. Alt med kun én kommando.<br>
 
Installation er så nemt, som at køre en ''pacman -U nano.pkg.tar.gz'', eller lav pakken og installér den rent med Pacman. Alt med kun én kommando.<br>
 
Fjernelse af pakken håndteres også af Pacman.
 
Fjernelse af pakken håndteres også af Pacman.
Line 34: Line 34:
 
Filen PKGBUILD og andre filerkan selvfølgelig tilpasses som du ønsker, og du kan vælge at benytte 'makepkg'-funktionen i ABS til at lave egne brugertilpassede pakker fra kilder udenfor selve ABS-træet.(Se en prototype på en PKGBUILD og installationsfile under /var/abs/core/)
 
Filen PKGBUILD og andre filerkan selvfølgelig tilpasses som du ønsker, og du kan vælge at benytte 'makepkg'-funktionen i ABS til at lave egne brugertilpassede pakker fra kilder udenfor selve ABS-træet.(Se en prototype på en PKGBUILD og installationsfile under /var/abs/core/)
 
-----
 
-----
Med '''ABS-træet''' på plads har en Arch Linux-bruger, der vil kompilere fra kilde, alle tilgængelige pakker ved hånden. '''ABS'''-værktøjerne kan også bruges til at bygge fra kilde til dit system, og/eller dele det med fællesskabet i samspil med Arch linux-brugernes software-kilder [[AUR_Brugervejledning|AUR]].
+
Med '''ABS-træet''' på plads har en Arch Linux-bruger, der vil kompilere fra kilde, alle tilgængelige pakker ved hånden.
  
Som altid kan du se ''man makepkg'' for mere specifik information.
+
=====Er det det hele?=====
 +
Ikke helt endnu!<br>
 +
*Du kan også benytte ABS-værktøjet '''[[makepkg]]''' til - sammen med dine egne tilpassede PKGBUILDs - til at oprette pakker til dig selv, eller til at dele med fællesskabet. Igen er resultatet - ''foo''.pkg.tar.gz-pakkerne - rent installeres med Pacman.
 +
* ABS-værktøjerne lader dig benytte Arch Linux-brugernes software-kilde [[AUR_Brugervejledning|AUR]] ('''A'''rch '''U'''ser '''R'''epository), der er fyldt med allerede færdige PKGBUILDs til din bekvemmelighed.
  
=====TODO: kort forklaring om 'makeworld'=====
+
=====ABS - Systemoversigt=====
''makeworld'' har ingen 'man'-side, så benyt ''makeworld --help''.
+
'ABS' kan benyttes som en 'paraply'-terminologi, da det inkluderer - og er afhængig af - flere andre komponenter. Derfor henviser 'ABS' til følgende strukur og værktøjer - selv om det ikke er helt teknisk korrekt - som et komplet værktøjssæt:
  
 +
* '''ABS-træet:''' Mappestrukturen i ABS under /var/abs/. Det indeholder mange undermapper, navngivet af alle tilgængelige Arch linux software-pakker - men ikke selve pakkerne.
 +
* '''ABS:''' De faktiske mapper navngivet til det byggebare software og indeholdende PKGBUILD.
 +
* '''PKGBUILDs:''' Tekstfiler der ligger under ABS-mapperne med instruktioner til bygning af pakker og kildernes URL.
 +
* '''[[AUR]]:''' 'Arch Linux-brugernes software-kilde der indeholder PKGBUILDs fra brugerne til software, der måske ikke er tilgængelige som officielle Arch Linux-pakker.
 +
* '''makepkg:''' Skal-kommando der læser PKGBUILDs, kompilerer kilderne og opretter .pkg.tar.gz-arkiver.
 +
* '''Pacman:''' Pacman er helt udenfor, men bliver nødvendigvis kaldt af scriptet 'makepkg' eller manuelt, til installation eller fjernelse af de byggede pakker eller til at hente afhængigheder.
 
====Hvorfor skulle jeg bruge ABS?====
 
====Hvorfor skulle jeg bruge ABS?====
 
'''A'''rch '''B'''ygge'''S'''ystem (ABS) anvendes til:
 
'''A'''rch '''B'''ygge'''S'''ystem (ABS) anvendes til:
 
* At lave nye pakker fra kilde af software, der endnu ikke er tilgængelig. (Se [[The Arch package making HOW-TO - with guidelines|hvordan du laver pakker til Arch Linux]])  
 
* At lave nye pakker fra kilde af software, der endnu ikke er tilgængelig. (Se [[The Arch package making HOW-TO - with guidelines|hvordan du laver pakker til Arch Linux]])  
 +
* Bygge og dele disse pakker via [[AUR_Brugervejledning|AUR]]
 
* Tilpas eksisterende pakker, så de passer til dit behov (aktivere eller deaktivere valgmuligheder)
 
* Tilpas eksisterende pakker, så de passer til dit behov (aktivere eller deaktivere valgmuligheder)
 
* Genopbyg hele dit system med dine kompileringsflag (a la FreeBSD)
 
* Genopbyg hele dit system med dine kompileringsflag (a la FreeBSD)
 +
* Bygge og installere din egen tilpassede kerne. (Se [[Kernel Compilation]])
 
* Få kernemoduler til at virke med din brugertilpassede kerne.
 
* Få kernemoduler til at virke med din brugertilpassede kerne.
  
ABS er ikke nødvendig for at bruge Arch Linux - men det er nyttigt.
+
ABS er ikke nødvendig for at bruge Arch Linux - men det er nyttigt til forskellige kompileringsopgaver.
  
 
Denne vejledning forsøger at give dig et overblik over ABS og Arch Linux-pakker. Det er ikke en komplet reference-guide!<br>Hvis du vil vide mere, skulle du prøve at kigge på ''man''-siderne.
 
Denne vejledning forsøger at give dig et overblik over ABS og Arch Linux-pakker. Det er ikke en komplet reference-guide!<br>Hvis du vil vide mere, skulle du prøve at kigge på ''man''-siderne.
  
====Installér pakker====
+
====Kom igang! Installér pakker====
  
For at benytte ABS skal du først installere '''cvsup''' og '''wget'''. Dette gøres med
+
For at benytte ABS skal du først installere '''csup''' og '''wget'''. Dette gøres med
  pacman -Sy cvsup wget
+
  pacman -Sy csup wget
 
+
Som et alternativ til '''cvsup''' kan du benytte '''csup''' - en hurtigere version skrevet i C:
+
pacman -Sy csup
+
  
 
====/etc/abs/abs.conf====
 
====/etc/abs/abs.conf====
Line 72: Line 80:
 
''Kommandoen '''abs''' bør også benyttes til regelmæssigt at synkronisere og opdatere dit ABS-træ.''
 
''Kommandoen '''abs''' bør også benyttes til regelmæssigt at synkronisere og opdatere dit ABS-træ.''
  
 +
====/etc/makepkg.conf====
 +
Redigér filen /etc/makepkg.conf for at angive miljøvariabler og 'CFLAGS':
 +
nano /etc/makepkg.conf
 
====ABS-træet====
 
====ABS-træet====
  
Line 106: Line 117:
 
* Endvidere kan en ABS-mappe indeholde rettelser og/eller andre filer, der er nødvendige for at bygge pakken.
 
* Endvidere kan en ABS-mappe indeholde rettelser og/eller andre filer, der er nødvendige for at bygge pakken.
 
''Det er vigtigt at forstå, at selve pakkens kildekode ikke findes i ABS-mappen.'' I stedet for indeholder '''PKGBUILD'''-filen en URL fra hvilken ABS automatisk vil downloade.
 
''Det er vigtigt at forstå, at selve pakkens kildekode ikke findes i ABS-mappen.'' I stedet for indeholder '''PKGBUILD'''-filen en URL fra hvilken ABS automatisk vil downloade.
 +
--------------
 +
-------------
 
=====/var/abs/local/=====
 
=====/var/abs/local/=====
 
Inde i ABS-træet er der en speciel mappe - '''local'''. Det er '''din''' mappe. I denne mappe kan du gøre alt, og du bør aldrig ændre noget i resten af ABS-træet. Kopiér en ABS fra træet (var/abs/branch/category/''pakkenavn'') til byggemappen (/var/abs/local/).
 
Inde i ABS-træet er der en speciel mappe - '''local'''. Det er '''din''' mappe. I denne mappe kan du gøre alt, og du bør aldrig ændre noget i resten af ABS-træet. Kopiér en ABS fra træet (var/abs/branch/category/''pakkenavn'') til byggemappen (/var/abs/local/).

Revision as of 21:58, 26 December 2007

Summary help replacing me
Forklarer om byggesystemet i Arch Linux
Tilgængelig på følgende sprog

Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry Template:I18n entry

Relaterede artikler (Engelsk)
AUR_Trusted_User_Guidelines
AUR
AUR Q & A
Aurbuild
Andre artikler på dansk
Main_Page_(Dansk)


Hvad er ABS?

ABS er en forkortelse af Arch Build System - eller på dansk Archs byggesystem. Det er et 'ports'-lignende system til at bygge software fra kilden.
Hvor Pacman er det specialiserede værktøj i Arch Linux til at håndtere binære pakker (inklusiv pakker, der er bygget med ABS ), er ABS det specialiserede værktøj til at kompilere fra en kilde til en installérbar pkg.tar.gz-pakke.

Hvad er et 'ports'-lignende system?

'Ports' er et system, anvendt af FreeBSD, der lader kilde-pakker blive downloadet, udpakket, tilrettet, kompileret og installeret. En 'port' er blot en lille mappe på brugerens computer med et navn, der svarer til det software der installeres. Denne mappe indeholder nogle få filer med instruktioner for download og installation af en pakke fra en kilde, typisk ved at navigere til mappen - eller porten - og udføre kommandoerne make og make install. Systemet vil så downloade, kompilere og installere det ønskede software.

ABS er et lignende koncept.

ABS laves ud fra et mappetræ, (ABS-træet), der findes under /var/abs, som indeholder mange undermapper. Hver mappe i sin kategori og alle navngivet af deres respective byggebare pakke.
Du kan kalde enhver undermappe - med navn efter pakken - for et ABS. Det samme som man vilde kalde en 'port'. Disse ABS-er - eller undermapper indeholder hverken software-pakken eller kilden, men nærmere en PKGBUILD-fil (og somme tider andre filer). En PKGBUILD er en simpel tekstfil, der indeholder instruktioner til kompilering og pakning, så vel som en URL til det tar-arkiv, som skal downloades. Den vigtigste komponent i ABS er PKGBUILD.

Hurtig gennemgang

Kør kommandoen abs som 'root' for at oprette ABS-træet. Hvis du f.eks. vil bygge editoren Nano fra kilden, skal du kopiere filen /var/abs/core/base/nano til en byggemappe. Gå ind i byggemappen og kør en makepkg. Så enkelt er det.
'Makepkg' vil forsøge at læse og eksekvere de instruktioner, der findes i PKGBUILD-filen. Tar-arkivet fra kilden downloades, udpakkes og kompileres i henhold til de 'CFLAGS', der angives i /etc/makepkg.conf og til sidst klemmes ind i en pakke med fil-endelsen .pkg.tar.gz, som det instrueres i filen PKGBUILD.
Installation er så nemt, som at køre en pacman -U nano.pkg.tar.gz, eller lav pakken og installér den rent med Pacman. Alt med kun én kommando.
Fjernelse af pakken håndteres også af Pacman.

Filen PKGBUILD og andre filerkan selvfølgelig tilpasses som du ønsker, og du kan vælge at benytte 'makepkg'-funktionen i ABS til at lave egne brugertilpassede pakker fra kilder udenfor selve ABS-træet.(Se en prototype på en PKGBUILD og installationsfile under /var/abs/core/)


Med ABS-træet på plads har en Arch Linux-bruger, der vil kompilere fra kilde, alle tilgængelige pakker ved hånden.

Er det det hele?

Ikke helt endnu!

  • Du kan også benytte ABS-værktøjet makepkg til - sammen med dine egne tilpassede PKGBUILDs - til at oprette pakker til dig selv, eller til at dele med fællesskabet. Igen er resultatet - foo.pkg.tar.gz-pakkerne - rent installeres med Pacman.
  • ABS-værktøjerne lader dig benytte Arch Linux-brugernes software-kilde AUR (Arch User Repository), der er fyldt med allerede færdige PKGBUILDs til din bekvemmelighed.
ABS - Systemoversigt

'ABS' kan benyttes som en 'paraply'-terminologi, da det inkluderer - og er afhængig af - flere andre komponenter. Derfor henviser 'ABS' til følgende strukur og værktøjer - selv om det ikke er helt teknisk korrekt - som et komplet værktøjssæt:

  • ABS-træet: Mappestrukturen i ABS under /var/abs/. Det indeholder mange undermapper, navngivet af alle tilgængelige Arch linux software-pakker - men ikke selve pakkerne.
  • ABS: De faktiske mapper navngivet til det byggebare software og indeholdende PKGBUILD.
  • PKGBUILDs: Tekstfiler der ligger under ABS-mapperne med instruktioner til bygning af pakker og kildernes URL.
  • AUR: 'Arch Linux-brugernes software-kilde der indeholder PKGBUILDs fra brugerne til software, der måske ikke er tilgængelige som officielle Arch Linux-pakker.
  • makepkg: Skal-kommando der læser PKGBUILDs, kompilerer kilderne og opretter .pkg.tar.gz-arkiver.
  • Pacman: Pacman er helt udenfor, men bliver nødvendigvis kaldt af scriptet 'makepkg' eller manuelt, til installation eller fjernelse af de byggede pakker eller til at hente afhængigheder.

Hvorfor skulle jeg bruge ABS?

Arch ByggeSystem (ABS) anvendes til:

  • At lave nye pakker fra kilde af software, der endnu ikke er tilgængelig. (Se hvordan du laver pakker til Arch Linux)
  • Bygge og dele disse pakker via AUR
  • Tilpas eksisterende pakker, så de passer til dit behov (aktivere eller deaktivere valgmuligheder)
  • Genopbyg hele dit system med dine kompileringsflag (a la FreeBSD)
  • Bygge og installere din egen tilpassede kerne. (Se Kernel Compilation)
  • Få kernemoduler til at virke med din brugertilpassede kerne.

ABS er ikke nødvendig for at bruge Arch Linux - men det er nyttigt til forskellige kompileringsopgaver.

Denne vejledning forsøger at give dig et overblik over ABS og Arch Linux-pakker. Det er ikke en komplet reference-guide!
Hvis du vil vide mere, skulle du prøve at kigge på man-siderne.

Kom igang! Installér pakker

For at benytte ABS skal du først installere csup og wget. Dette gøres med

pacman -Sy csup wget

/etc/abs/abs.conf

Redigér /etc/abs/abs.conf til at inkludere dine software-kilder:

nano /etc/abs/abs.conf

Fjern udråbstegnet '!' foran de passende software-kilder som f.eks.:

SUPFILES=(core extra !unstable community !testing)

Opret ABS-træet

Som 'root' køres:

abs

Dit ABS-træ er nu oprettet under /var/abs. Bemærk de passende grene på ABS-træet nu eksisterer og svarer til dem du specificerede i /etc/abs/abs.conf.

Kommandoen abs bør også benyttes til regelmæssigt at synkronisere og opdatere dit ABS-træ.

/etc/makepkg.conf

Redigér filen /etc/makepkg.conf for at angive miljøvariabler og 'CFLAGS':

nano /etc/makepkg.conf

ABS-træet

Når du kører abs for første gang, synkroniseres ABS-træet med Ardh-serveren ved hjælp af 'cvs'-systemet. Hvad er så ABS-træet helt specifikt? Det findes under /var/abs, og ser såledesud:

|-
| -- core/
|-
|     ||-- autoconf/
|-
|     ||-- automake/
|-
|     ||-- ...
|-
| -- devel/
|-
| -- ...
|-
| -- extra/
|-
|      || -- daemons/
|-
|      ||      || -- acpid/
|-
|      ||      ||      || -- PKGBUILD
...    ...    ...    ...

ABS-træet har altså nøjagtigt den samme struktur som pakkedatabasen:

  • Første mappebane repræsenterer kategorier.
  • Anden mappebane repræsenterer selve ABS-erne, hvis navne svarer til de pakker du vil bygge.
  • PKGBUILD-filerne indeholder alt nødvendig information omkring pakken.
  • Endvidere kan en ABS-mappe indeholde rettelser og/eller andre filer, der er nødvendige for at bygge pakken.

Det er vigtigt at forstå, at selve pakkens kildekode ikke findes i ABS-mappen. I stedet for indeholder PKGBUILD-filen en URL fra hvilken ABS automatisk vil downloade.



/var/abs/local/

Inde i ABS-træet er der en speciel mappe - local. Det er din mappe. I denne mappe kan du gøre alt, og du bør aldrig ændre noget i resten af ABS-træet. Kopiér en ABS fra træet (var/abs/branch/category/pakkenavn) til byggemappen (/var/abs/local/).

Opret din byggemappe /var/abs/local/:

mkdir /var/abs/local

BEMÆRK: Den første download af ABS-træet er den største. Derefter er det kun nødvendigt med mindre opdateringer, så vær ikke bange, hvis du kun har en 56k-tilslutning. Der er kun tale om tekstfiler, som er komprimerede under overførslen.

Nu hvor vi ved, hvad et ABS-træ er - hvordan kan vi så bruge det?

Byggefunktionen - traditionel metode

Hvis du ikke kender til at kompilere fra kilde, skal du vide, at de fleste pakker (dog ikke alle) kan bygges fra kilde på denne traditionelle måde:

  • Download kildens tar-arkiv fra en ekstern server med en web-browser, ftp, wget eller andre metoder.
  • Pak kildefilen ud som eks.:
 tar -xzf foo-0.99.tar.gz
 tar -xjf foo-0.99.tar.bz2
  • Gå ind i mappen:
cd foo-0.99
  • konfigurér pakken. Generelt er der et lille script ved navn configure i kildemappen, der benyttes til at konfigurere pakken (tilføje eller fjerne understøttelse for noget, vælge destination for installation osv.). Scriptet tjekker også, om din computer har det nødvendige software for pakken. Det kan køres med:
./configure <valgmulighed>

Du skulle først prøve valgmuligheden 'help', for bedre at forstå, hvordan det virker:

./configure --help

Hvis ikke valgmuligheden --prefix sættes i scriptet, vil de fleste scripts benytte /usr/local som sti til installationen, mens andre benytter /usr. For en bedre konsistens tilrådes generelt at sætte valgmuligheden --prefix=/usr/local. Det er god praksis at installere personlige programmer i /usr/local, og at have dem, der vedligeholdes af distributionen, anbragt i /usr. Dette tilsikrer, at personlige programmer kan sameksistere med dem, der håndteres af ditributionens pakkehåndtering - i Arch Linux' tilfælde er det Pacman.

./configure --prefix=/usr/local
  • Kompiler kilderne:
make
  • Installér
make install
  • Afinstallering udføres ved at gå ind i kildemappen og køre:
make uninstall

Dog burde du altid læse filen INSTALL, for at se, hvordan pakken skal bygges og installeres! Ikke alle pakker anvender systemet configure; make; make install!

Byggefunktionen - ABS-måden

ABS er et elegant værktøj, der yder en stærk assistance og tilpasningsmuligheder til byggeprocessen, samt opretter en pakkefil til installation. ABS-metoden involverer kopiering af en ABS fra træet til en byggemappe og køre en 'makepkg'. I vores eksempel vil vi bygge pakken slim display-håndtering.

  • 1. Kopiér slim ABS fra træet til en byggemappe:
cp -r /var/abs/extra/x11/slim /var/abs/local
  • 2. Navigér til byggemappen:
cd /var/abs/local/slim
  • 3. Kør kommandoen makepkg, der automatisk downloader tar-arkivet fra kilden, pakker ud, kompilerer og opretter filen slim.pkg.tar.gz Valgmuligheden -i kalder Pacman til automatisk at installere den resulterende pakkefil slim.pkg.tar.gz:
makepkg -i

Det var det! Du har lige bygget slim fra kilde og installeret det rent på dit system med Pacman. At fjerne pakken håndteres også af Pacman:

pacman -R slim

Alternativt kan du køre 'makepkg' uden valgmuligheden '-i' og installere pakken manuelt med Pacman:

pacman -U slim.pkg.tar.gz

Nyttige valgmuligheder

Nogle nyttige valgmuligheder for 'makepkg options' fra man-siden (Forklaringer er oversat til dansk):

-c, --clean
             Fjerner efterladte arbejdsfiler og mapper efter successfuld opbygning
-f, --force
             makepkg  bygger ikke en pakke, hvis en bygget pakke allerede findes i mappen PKGDEST (sat i /etc/makepkg.conf), 
             der som standard viser til den aktuelle mappe. Dette tillader, at en bygget pakke overskrives.
-i, --install
             Installér eller opgradér pakken efter successfuld bygning med Pacman.
-s, --syncdeps
             Installér manglende afhængigheder med Pacman. Når der mangler byggetids- eller kørselstids-afhængigheder
             prøver Pacman at løse dem. Hvis det lykkes, downloades og installeres de manglende pakker.

Således vil kommandoen makepkg -csi hente alle afhængigheder (hvis der er nogen), installere (med Pacman) og fjerne alle overskydende arbejdsfiler fra byggemappen.

Igen - se man makepkg for mere information.

TODO: Forklare funktionen makeworld til at genopbygge hele systemet osv.

Hvad er en pakkefil?

Husk at ABS downloader automatisk kildekoden for netop det software, du kompilerer. Derefter pakker det ud, kompilerer kilderne og klemmer det hele ind i en installerbar pakke. Typisk er resultatet en pakkefil ved navn foo.pkg.tar.gz.

Faktisk er det blot en g-zippet tar-arkiv eller 'tarball', der indeholder:

  • De filer der skal installeres.
  • Filen .PKGINFO: indeholder alle metadata, der er nødvendige, for at Pacman kan håndtere pakker, afhængigheder osv.
  • Filen .FILELIST: viser en liste over alle filer i arkivet. Det benyttes i forbindelse med afinstallation , eller for at tjekke for filkonflikter.
  • Filen .INSTALL: bruges til at eksekvere kommandoer efter installér-/opgradér-/fjern-trinet (Denne fil findes kun, hvis den er specificeret i PKGBUILD.)

Eftersom Pacman håndterer 'tar.gz'-pakker, kan 'foo.pkg.tar.gz' nu let installeres/fjernes.

Hvad er en PKGBUILD? Og hvad indeholder det?

Som forklaret før indeholder filen PKGBUILD metadata om en pakke. Det er en simpel tekstfil.
Her er et eksempel:

# $Id: PKGBUILD,v 1.12 2003/11/06 08:26:13 dorphell Exp $
# Maintainer: judd <jvinet@zeroflux.org>
# Contributor: Judd Vinet <jvinet@zeroflux.org>
pkgname=foo
pkgver=0.99 # BEMÆRK: Hvis pakkeversionen havde været '0.99-10', så benyt en bundstreg som f.eks. '0.99_10'.
pkgrel=1
pkgdesc="en kort beskrivelse af 'foo'"
arch=(i686 x86_64)
url="http://www.foo.org"
license=('GPL')
groups=
provides=
depends=('qt' 'python')
makedepends=('guile')
conflicts=('yafoo')
replaces=('mffoo')
backup=('etc/foo/foo.conf')
install=('foo.install')
source=(http://www.foo.org/download/$pkgname-$pkgver.tar.gz)
md5sums=('2c0cca3ef6330a187c6ef4fe41ecaa4d35175bee593a7cc7d6205584a94d8625')

build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

Så lad os forklare hvert felt:

  • # text : kommentarer
  • # $Id: PKGBUILD,v ...: Er cvs-flaget for denne pakke (oprettet fra systemet 'archlinux-cvs').
  • # Maintainer: Den ansvarlige vedligeholder for denne pakke i de officielle software-kilder.
  • # Contributor: Personen der skrev den første PKGBUILD for denne pakke.
  • pkgname: Pakkens navn.
  • pkgver: Pakkens version.
  • pkgrel: Arch-pakkens udgivelsesnummer. Dette er forskelligt fra pakkeversionen, og ændres når PKGBUILD ændres. Der kan være mange årsager til dette, f.eks hvis du aktiverer understøttelse af kompileringstid for noget.
  • pkgdesc: En kort beskrivelse af pakken. Dette er hvad du sernår du browser pakkedatabasen
  • arch: Viser på hvilke arkitekturer, det er kendt for at bygge og virke - se Arch64_FAQ for detaljer om portering.
  • url: Hjemmesiden for softwaren (som kommer frem, når du klikker på en pakke i pakkedatabasen).
  • license: Licensen under hvilken dette software distribueres.
  • groups: Dette anvendes til at gruppere pakker. Hvis du f.eks. installerer KDE, installeres alle pakker, der tilhører gruppen KDE.
  • provides: Dette anvendes, hvis pakken leverer en anden pakke, som f.eks. 'kernel-scsi' leverer 'kernel'.
  • depends: Dette viser en lisgte over kørselstids-afhængigheder (hvad den skal bruge for at fungere).
  • makedepends: Afhængigheder der er kræves for at bygge pakken, men ikke er nødvendige, når pakken er bygget.
  • conflicts: Disse pakker kan ikke installeres på samme tid. Her konflikter foo med yafoo (yet another foo).
  • replaces: Den nye pakke erstatter den gamle. Her understøttes mffoo (min første foo) ikke længere og erstattes af foo
  • backup: Hvilke filer der skal tages backup af (som fil.pacsave), når pakken fjernes.
  • install: Angiver et specielt installations-script, som skal inkluderes i pakken (det skal forefindes i samme mappe som PKGBUILD).
  • source: Dette angiver, hvorfra pakkens kildekode skal downloades. Dette kan være en lokal pakke, en 'http' eller en 'ftp'. Dette navngives med pkgver for at undga at ændre kilden, hver gang der skiftes version.
  • md5sums: Kildens md5-sum for at tjekke integriteten.

Så lad os nu forklare funktionen:

  • build: alle krævede aktioner for at bygge pakken (dette forklares nærmere senere i denne artikel).

Du kan se, at filen PKGBUILD indeholder alt det information, der kan kræves af pakkehåndteringen. Dette er hjertet af Pacman og ABS.

Der er også installationsfiler. Denne PKGBUILD specificerer 'foo.install' som pakkens installationsfil. Her er et eksempel på en installationsfil:

post_install() {
/bin/true
}

post_upgrade() {
/bin/true
}

pre_remove() {
/bin/true
}

op=$1
shift

$op "$@"

Her er en forklaring på funktionerne:

  • post_install: Dette script køres lige efter filerne er installerede. Det kræver ét argument:
    • Pakkeversionen
  • post_upgrade: Dette script køres efter alle filer er opgraderede. Det kræver to argumenter:
    • Den nye pakkeversion
    • Den gamle pakkeversion
  • pre_remove: Dette script køres umiddelbart før filer fjernes (til f.eks at stoppe en dæmon). Det kræver ét argument:
    • Pakkeversionen

De tre linjer i bunden kræves af alle installationsfiler, for at de kan køres ordentligt.

Byggefunktionen forklaret

Lad os kigge på en byggefunktion, som den dikteres af PKGBUILD-eksemplet ovenfor. Bemærk byggesektionen:

build() {
  cd $startdir/src/$pkgname-$pkgver
  ./configure --prefix=/usr
  make || return 1
  make prefix=$startdir/pkg/usr install
}

Der sker følgende:

  • går ind i mappen, hvor kilderne blev pakket ud:
cd $startdir/src/$pkgname-$pkgver
  • konfigurerer pakken og fortæller at den skal installeres i mappen /usr:
  ./configure --prefix=/usr
  • kompilerer
  make || return 1
  • installerer softwaren - ikke i /usr men i stedet i $startdir/pkg/usr så Pacman har kontrol over filerne.
  make prefix=$startdir/pkg/usr install

Det, vi vil gøre, er at bygge pakken - ikke at installere den. Så i stedet for at installere den i standardmappen (/usr), siger vi til make, at den skal lægge alle filer ind i vores specielle mappe: $startdir/pkg/usr. På denne måde kan 'makepkg' se, hvilke filer pakken installerer, og derefter komprimere dem ind i Arch-pakken.

BEMÆRK: Det sker, at prefix ikke anvendes i Makefile, hvor DESTDIR bruges i stedet for. Hvis pakken bygges med autoconf/automake benyttes DESTDIR. Det er, hvad der beskrives i manualerne. Tjek om den genererede filelist er meget kortere ned den burde være, i så fald prøv at bygge den med make DESTDIR=$startdir/pkg install. Hvis dette ikke virker, skal du prøve at kigge dybere ind i de installationskommandoer, der eksekveres af "make <...> install=".

Første gang du bruger ABS: Tilpas en pakke

Denne situation kan forekomme oftere end du tror. Officielle pakker er kompilerede med et antal valgmuligheder --enable eller --disable forvalgt, hvor de ikke er i overensstemmelse med dine valg.

For at illustrere dette, vil vi tage et eksempel - foo. Pakken foo er bygget med arts-understøttelse deaktiveret. Forestil dig, at vi ønsker at aktivere arts. Det gøres på følgende måde:

  • find ud af, hvor pakken foo er placeret. Det kan du gøre med:
  find /var/abs -name "foo"
    • med kommandoen slocate:
  slocate foo | grep ^/var/abs

på begge måder finder du f.eks. at foo er en del af extra og multimedia

  • kopiér foo-ABS til /var/abs/local/foo
  cp -r /var/abs/extra/multimedia/foo/ /var/abs/local
  cd /var/abs/local/foo
  • ret filen PKGBUILD, så vi tilføjer arts-understøttelse:
  build() {
    cd $startdir/src/$pkgname-$pkgver
    ./configure --prefix=/usr
    make || return 1
    make prefix=$startdir/pkg/usr install
  }

rettes til:

  build() {
    cd $startdir/src/$pkgname-$pkgver
    ./configure --enable-arts --prefix=/usr
    make || return 1
    make prefix=$startdir/pkg/usr install
  }
  • kør makepkg:
  makepkg -c

(Valgmuligheden '-c' fjerner overskydende filer fra pakkebygningen)

  • installér den nye pakke med en af de følgende kommandoer (-A for installation [ikke så god metode], -U for at opgradere eller installere pakken):
  pacman -A foo-*.pkg.tar.gz
  pacman -U foo-*.pkg.tar.gz

Kompilér flag og tilpas 'makepkg'

Konfigurationsfilen for makepkg er /etc/makepkg.conf. Her kan du sætte miljøvarianter for gcc og make, samt nogle for selve makepkg. Det følgende er et eksempel på /etc/makepkg.conf.

#
# /etc/makepkg.conf
#

#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The FTP/HTTP download utility that makepkg should use to acquire sources
FTPAGENT="/usr/bin/wget --continue --passive-ftp --tries=3 --waitretry=3 --no-check-certificate"
#FTPAGENT="/usr/bin/snarf"
#FTPAGENT="/usr/bin/lftpget -c"

#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="i686"
CHOST="i686-pc-linux-gnu"

#-- Exclusive: will only run on i686
# -mtune builds exclusively for an architecture
# -mcpu optimizes for an architecture, but builds for the whole processor family
CFLAGS="-march=i686 -O2 -pipe"
CXXFLAGS="-march=i686 -O2 -pipe"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j2"

#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!fakeroot !distcc color !ccache)
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc:   Use the Distributed C/C++/ObjC compiler
#-- color:    Colorize output messages
#-- ccache:   Use ccache to cache compilation
#
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""

#########################################################################
# GLOBAL PACKAGE OPTIONS
#   These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(strip !docs !libtool emptydirs)
#
#-- strip:     Strip symbols from binaries/libraries
#-- docs:      Save doc and info directories
#-- libtool:   Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#
OPTIONS=(strip !docs libtool emptydirs)

#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Info and doc directories to remove (if option set correctly above)
DOC_DIRS=(usr/{,share/}{info,doc,gtk-doc} opt/gnome/{,share/}{info,doc,gtk-doc})

#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
SRCDEST=/home/sources
#-- Packager: name/email of the person or organization building packages
PACKAGER="John Doe <john@doe.com>"

# vim: set ft=sh ts=2 sw=2 et:

Lige en lille advarsel: Brugere skal være helt sikre, før de ændrer på variablerne CFLAGS, CXXFLAGS, og MAKEFLAGS, da det kan forårsage, at pakker bliver ustabile eller umulige at kompilere. Den almindelige Arch Linux-bruger har heller ikke behov for at ændre værdierne for CARCH, CHOST, og USE_FAKEROOT.

Referencer for 'gcc'- og 'make'-flag:

Yderligere ABS-information