Hvordan lage en Arch Linux pakke

Å lage en Arch Linux pakke er litt som å lage en kake, bortsett fra at man starter med deigen og har som mål å lage oppskriften. Kaken kommer først når pakken installeres hos brukeren.

Man begynner med å velge seg ut et program man har lyst å pakke. Her gjelder det å bruke god skjønnsmessig vurdering. En program som er dårlig egnet til å pakkes og kjøres på Arch Linux kan fort bli mye søl og brent kakefyll. Et program som er skrevet av unix-gourmeter, derimot, med god nese for hva som fungerer på Linux, kan fort lede til de deiligste pakker. Også vil man helst pakke noe som ikke har blitt pakket før.

La oss begynne med eksempel på en god deig. Det finnes et spill som heter “Robotfindskitten”. Først kan vi sjekke om websiden er fersk og fin og om den ser tilstrekkelig Linux-aktig ut: robotfindskitten.org
Ja, så sannelig. Plusspoeng for sans-serif og mono-spaced skrifttype. Så gjelder det å sjekke produksjonsdatoen under “download”: robotfindskitten.org/download/. Oj. Her var det som et helt konditori av godsaker, men allerede er vi ved en liten hindring. Det kreves en klype med standardiseringskunnskap for å gjenkjenne POSIX på listen. Linux er mer eller mindre POSIX-kompatibel, så vi går for den. Man kan nå laste ned en tarball (.tar.gz, .tgz, .tar.bz2, .tbz2, .tar.xz eller .txz). La oss velge den ferskeste: robotfindskitten.org/downlo…

Kjenn duften av persille (prøv i det minste).

[Bilde]

Så tar vi frem redskapene. En hvilken som helst Arch Liux kommandolinje burde holde. Trykk lett på tastene for å varme opp litt, skriv deretter clear og evt. reset. Godt. Når fingrene begynner å bli varme, kan følgende skrives inn i det du måtte ha tilgjengelig av teksteditor:

pkgname=robotfindskitten
pkgver=123abc
pkgrel=1
source=("http://robotfindskitten.org/download/POSIX/robotfindskitten-1.7320508.406.tar.gz")
arch=('any')

package() {
    echo "Det dufter herligt!"
}

Visp lett og lagre som en fil med navnet PKGBUILD. Prøv så å kjøre kommandoen

makepkg
.
Tarballen til robotfindskitten vil da lastes ned. Bollen er formelig i ovnen.

Men, her møter vi vår første utfordring. Variablene må krydres og integritetssjekk må på plass.
Rør pkgver til 1.7320508.406, til deigen blir fast. Legg så til en integritetssjekk. Dette laget med fyll kan enkelt trylles frem med “makepkg -g”. Legg fyllet på det du måtte ha så langt. Rasp så arch til den blir (‘x86_64’ ‘i686’). Pass på å raspe med enkeltfnutter og mellomrom mellom ordene. Ikke noe komma. Her kan vi trekke frem en fin huskeregel for fnutter forøvrig: bruk enkeltfnutter for å bevare baksten akkurat slik den er, men dobbeltfnutter dersom deigen mellom anførselstegnene kanskje skal heve. Prøv selv, med både enkelt og dobbeltfnutter:

pkgname=robotfindskitten
pkgver=1.7320508.406
pkgrel=1
source=("http://robotfindskitten.org/download/POSIX/robotfindskitten-1.7320508.406.tar.gz")
arch=('x86_64' 'i686')
md5sums=('6b9cf314ffee0de52ed85ac5ba11d66b')

package() {
    echo "Det dufter $pkgver"
    echo 'Jeg fornemmer $pkgver'
}

Nå skal alt heve litt, og det skal ende opp med å se slik ut:

Det dufter 1.7320508.406
Jeg fornemmer $pkgver

[Bilde]

Legg merke til hvordan fnuttføringen har alt å si for konsistensen. Kaken er nå hevet, og et lag med fyll er lagt på, men det gjenstår ennu litt.

Bytt ut innholdet i package med et lag med gammel, men raffinert, karamell. Det er viktig at du har base-devel på kjøkkenet før du setter i gang med dette (

pacman -S base-devel
):
cd "$srcdir/$pkgname-$pkgver"
./configure --prefix=/usr
make

Dette gir selve innholdet til kaken. Uten dette vil den ikke smake særlig godt. Her er det en del å ta tak i. Først beveger man seg inn til selve kjernen av kaken, før man sprer fyllet utover, ikke over alt, men kun i “$pkgdir”. Det må aldri havne fyll i ovnen! Fyllet skal kun havne i “$pkgdir”. Så bakes kaken med make.

Prøv selv nå, med


makepkg -f

for å tvinge frem ny bakst, og nyt synet av en liflig liten kake.

Dette ser tilsynelatende bra ut, men ved en liten sjekk av konsistensen, så ser man at det ble alt for mye luft. For en flopp!

find pkg

Her skulle det vært en hel liste med ferdig små nytelser, men man har bare .PKGINFO.

Hvor har kronen på verket og jordbæret som skulle vært på toppen gjemt seg hen?

find src -name robotfindskitten

Ah, den har gjemt seg i src/robotfindskitten. La oss passe på at den kommer med på kaken.

pkgname=robotfindskitten
pkgver=1.7320508.406
pkgrel=1
source=("http://robotfindskitten.org/download/POSIX/robotfindskitten-1.7320508.406.tar.gz")
arch=('x86_64' 'i686')
md5sums=('6b9cf314ffee0de52ed85ac5ba11d66b')

build() {
  cd "$srcdir/$pkgname-$pkgver"
  ./configure --prefix=/usr
  make
}

package() {
  cd "$srcdir/$pkgname-$pkgver"
  make prefix="$pkgdir/usr" install
}

Legg merke til at $pkgname er robotfindskitten, at det som før var i package() nå er flyttet ut der det hører hjemme, i build(), og at make prefix=“$pkgdir/usr” installerer filene et sted i $pkgdir. Spis så en dusk med persille.

Kaken er nå nesten klar til å spises, den trenger bare pynt. Bak og prøvesmak forsiktig med:

makepkg -f
find pkg

Påse at pkg/usr/bin/robotfindskitten er på plass. Nå skal det pyntes. Ingen tyvsmaking med:

sudo pacman -U robotfindskitten-1.7320508.406-1-x86_64.pkg.tar.gz

eller, for de med mindre komfyrer:

sudo pacman -U robotfindskitten-1.7320508.406-1-i686.pkg.tar.gz

takk!

På med pynten:

# Maintainer: Monsieur cuire moi un gâteau 
pkgname=robotfindskitten
pkgver=1.7320508.406
pkgrel=1
pkgdesc="Yet another zen simulation"
arch=('x86_64' 'i686')
url='http://www.robotfindskitten.org/'
license=('GPL2')
depends=("ncurses")
source=("http://robotfindskitten.org/download/POSIX/${pkgname}-${pkgver}.tar.gz")
md5sums=('6b9cf314ffee0de52ed85ac5ba11d66b')

build() {
  cd "$srcdir/$pkgname-$pkgver"
  
  msg2 "Configuring..."
  ./configure --prefix=/usr
  msg2 "Compiling..."
  make
}

package() {
  cd "$srcdir/$pkgname-$pkgver"

  make prefix="$pkgdir/usr" install
  msg2 "Packaging license..."
  install -Dm644 COPYING \
    "$pkgdir/usr/share/licenses/$pkgname/COPYING"
}

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

Her er også lisens, url, en avhengighet på ncurses (verktøyet namcap vil advare en om de mest svidde bommertene her), fargerike meldinger med msg2 og vim-vennlig krydder lagt til. install -Dm644 installerer vanlige filer, mens de eksekverbare piskes godt på plass med install -Dm755. Husk filnavnet til slutt.

Erfarne kokker vil også ønske å utføre et siste og litt mer avansert grep, nemlig å legge til en liten fiks og litt dokumentasjon. Dette er ikke strengt nødvendig, og fiksing/patches skal man vanligvis unngå så langt det er mulig, men i dette tilfellet er det greit. Vi har jukset litt her, så her er hele sullamitten fiks ferdig:

# Maintainer: Monsieur cuire moi un gâteau
pkgname=robotfindskitten
pkgver=1.7320508.406
pkgrel=1
pkgdesc="Yet another zen simulation"
arch=('x86_64' 'i686')
url='http://www.robotfindskitten.org/'
license=('GPL2')
depends=("ncurses")
source=("http://robotfindskitten.org/download/POSIX/${pkgname}-${pkgver}.tar.gz")
md5sums=('6b9cf314ffee0de52ed85ac5ba11d66b')

build() {
  cd "$srcdir/$pkgname-$pkgver"
  
  msg2 "Configuring..."
  ./configure --prefix=/usr
  msg2 "Patching..."
  sed -i src/Makefile -e \
    's:execgamesdir = $(prefix)/games:execgamesdir = $(prefix)/bin:'
  msg2 "Compiling..."
  make
  make -C doc
}

package() {
  cd "$srcdir/$pkgname-$pkgver"

  make prefix="$pkgdir/usr" install
  msg2 "Packaging documentation..."
  make -C doc prefix="$pkgdir/usr" install
  msg2 "Packaging license..."
  install -Dm644 COPYING \
    "$pkgdir/usr/share/licenses/$pkgname/COPYING"
  msg2 "Cleaning up..."
  rm -r "$pkgdir/usr/share/info"
}

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

Her er det brukt to mellomrom som innrykk, det gir en fin smak. (Jeg har forsøkt å bruke det lenger opp også, men hadde litt trøbbel med code og pre-taggene).

For å dele oppskriften med hele verden, slik at ingen noen sinne skal trenge å sette seg inn i akkurat robotfindskitten igjen, installer burp, registerer deg på aur.archlinux.org (gratis), sjekk pakken med

namcap robotfindskitten-1.7320508.406-1-x86_64.pkg.tar.gz
, lag kildepakken med
makepkg —source
, send den inn med
burp robotfindskitten-1.7320508.406-1-x86_64.src.tar.gz
og fiks detaljene ved å søke opp pakken din på aur.archlinux.org.
pacman -U robotfindskitten-1.7320508.406-1-x86_64.pkg.tar.gz
robotfindskitten

Denne metoden for å installere pakker anbefales av kjennere.

De vågale og skruppelløse kan installere rett fra aur med disse slikkepottene:

yaourt -S robotfindskitten --noconfirm

eller

packer -S robotfindskitten

Denne metoden kan gi luft i magen.

Velbekomme!

[Bilde]