PKGBUILD
PKGBUILD’s er en meget vigtig del af Arch Linux og vi kan derfor ikke undgå at benytte os af PKGBUILD’s. Det er fx PKGBUILD’s der gør det muligt for Arch Linux at få brugerne til selv at lave pakker til Arch Linux og dele dem med hinanden på en side som fx AUR hvor der er over 3500 pakker lavet af brugere.
Desuden kræver sådanne sider ikke ret meget plads da det kun er små tekstfiler der gemmes med informationer til at lave pakker. Hvis du ikke ved hvad en PKGBUILD er for noget kan det anbefales at læse afsnittet neden under.
Hvad er en PKGBUILD?
En PKGBUILD er kort fortalt en fil der fortæller om “hvordan” man laver en pakke. Altså står der fx hvordan man laver en pakke der installere et program ved navn bb (et program der kan lave ASCII grafik i en terminal). En sådan pakke kan fx se sådan ud:
# Contributor: Jacob Bang pkgname=bb pkgver=1.3rc1 pkgrel=10 pkgdesc="ASCII-art demo based on AAlib" url="http://aa-project.sourceforge.net/bb/" license="GPL" depends=('aalib' 'glibc' 'libx11' 'ncurses' 'libmikmod' 'libxau' 'libxdmcp') source=(http://ftp.debian.org/debian/pool/main/b/bb/${pkgname}_${pkgver}.orig.tar.gz http://ftp.debian.org/debian/pool/main/b/bb/${pkgname}_${pkgver}-7.diff.gz) md5sums=('e6aed11dc5a59fb0896e04c947d3de43' 'a03027ad560b2a7339ef36db069b5717') build() { cd $startdir/src/${pkgname}-${pkgver}.orig patch -Np1 -i ../${pkgname}_${pkgver}-7.diff ./configure --prefix=/usr make make DESTDIR=$startdir/pkg/ install }
Dette kan lige i starten meget vanskeligt ud men det hele er opbygget logisk og er nemt for udvikleren at overskue. Ideen er at i stedet for at udvikleren skal uploade en hel pakke så kan han/hun i stedet uploade en PKGBUILD som flyder langt mindre. Det tager selvfølgelig længere tid for brugeren da computeren skal lave pakken før den kan installeres i stedet for hente pakken direkte fra serveren. Vi kan lige hurtigt se på hvordan en PKGBUILD er opbygget.
- # Contributor
Det er udvikleren af PKGBUILD’en og ham/hende der står for vedligeholdesen af den. Det er ikke nødvendigt at skrive dette felt men det er bare en god skik at gøre det. - pkgname
Navnet som pakken skal hedde. Dette er meget ofte navnet på det program som pakken indeholder. I vores tilfælde er navnet bb. - pkgver
Pakkens versionsnummer. Igen er det ofte programmets versionsnummer man angiver her. - pkgrel
Det sker meget ofte desværre at der er en eller anden fejl i en PKGBUILD og for at kende forskel på pakker lavet med den gamle PKGBUILD og den nye PKGBUILD angiver man ofte et tal her. Fx i vores tilfælde er der lavet 10 versioner af PKGBUILD’en da der har været mange fejl og ændringer. - pkgdesc
En kort beskrivelse af pakken. Fx er der jo ikke mange der ved hvad bb er for noget og ingen ved om jeg snakker om Bjørne Banden eller om et program til ASCII grafik. Derfor skal man som udgangspunkt altid skrive noget her. - url
Adressen til den hjemmeside der beskriver programmet pakken indeholder. Dette er ofte udviklerens side om programmet. - license
Dette er ikke et krav men hvis man ved hvad licens programmet er under kan man skrive det her. I vores tilfælde er det GPL licensen. - depends
Så godt som alle pakker kræver en anden pakke for at kunne kører. Fx kræver KDE ret sikkert noget X for at kunne kører. De pakker der kræves skriver man her. - source
Her skrives der hvor man kan finde kildekoden til programmet og andre ting der kræves for at bygge pakken. I vores tilfælde skal vi faktisk bruge 2 pakker. Den ene er sourcen til programmet og den anden er en patch der gør at pakken kan kompileres af nye versioner af GCC som Arch Linux benytter sig af. - md5sums
Der er intet krav om dette felt men det er igen en meget god ide at have. Dette er for at være helt sikker på at de filer som hentes fra source feltet også er de filer som udvikleren af PKGBUILD’en regner med. På den måde undgår man fejl i filer som måske skyldes download fejl. En md5sum er en kode der er unik til et program. Hvis der bliver lavet en bit om i et program vil det give en helt anden md5sum. - build()
Nok det vigtigste felt for det er her det hele sker. Her står der hvad der skal ske med de filer vi hentede i source feltet før de bliver til en rigtig pakke. I vores tilfælde står der kort at den skal skifte til den mappe hvor sourcen ligger, patche filerne med patchfilen der blev hentet, konfigurere sourcen så den er klar til vores formål, lav koden om til et program og tilsidst installere programmet i vores pakke.
Efter build() er kørt ligger der en pakke som kan installeres med pacman.
Hvordan bruger jeg en PKGBUILD?
Måske burde vi have startet med dette men lad det nu ligge. Det er meget nemt at benytte sig af en PKGBUILD og du skal slet ikke tænke på hvordan den er opbygget for at bruge den. Alt dette gør et program ved navn makepkg. Lad os tage et eksempel. Vi har installeret openoffice med pakken openoffice-base og har opdaget at der ikke er nogen dansk sprogpakke i Arch Linux current, extra eller andre steder. Vi kikker på AUR og finder ud af der findes pakken openoffice-da.
På siden kan man læse kommentarer og andre informationer. Tryk på Tarball for at downloade en tar.gz fil der indeholder PKGBUILD plus andre vigtige filer hvis det er nødvendigt. Gem filen et eller andet sted du kan huske hvor er. I dette eksempel er filen gemt i /tmp mappen. Det meste korrekte sted er /var/abs/local/ men der er ingen lov der siger den skal ligge der.
cd /tmp
tar -xzf openoffice-da.tar.gz
cd openoffice-da
su
makepkg
pacman -U openoffice-da-2.0.4-1.pkg.tar.gz
Sådan færdig arbejde. Nogle af tingene kan være anderledes som fx pakkens navn. makepkg kommandoen kan tage lang tid hvis der er meget der skal kompileres. Der kan komme forskellige beskeder om pakker du mangler at installere når du køre makepkg. Alle disse ting skal være i orden og hvis du ikke kan finde pakkerne med pacman ligger de 99% sikkert på AUR. Når makepkg har været kørt ligger der en del filer og du behøver ikke gemme nogen af dem. Jeg gemmer ofte bare PKGBUILD filen og nogen gange pakken. Alt det andet kan slettes. makepkg behøver desuden ikke at køres som root.
Dette er bare en kort beskrivelse af pacman og makepkg systemerne. Der findes mange muligheder som du selv kan læse om på wiki.archlinux.org og man-pages.