Voorbeeld van een handmatig gebouwd pakketje
Meestal gaan alle stappen gaan automatisch goed als je het ./npl/newpackage commando gebruikt. Mocht het toch niet goed gaan dan kun je deze pagina van een compleet handmatige build als lijdraad gebruiken:
Zoek het juiste sources en patches bijelkaar
Het is belangrijk dat je altijd de orginele source-tarball download en de daarbij behorende patches. Wil je een CVS of SVN versie bouwen? Maak dan van de CVS of SVN versie die je gebruikt een tarball met een juiste naam.
- Source tarball: pakket_naam-1.2.3.tar.gz
- CVS tarball: pakketje_naam-12.04.2007.tar.gz
- SVN tarball: pakketje_naam-3452.tar.gz
Zorg dat je de patches er los bij zet. Dus geen pre-patched tarball, want dit is lastig met latere updates!
Gebruik indien mogelijk altijd de laatste stable versie.
Een goede plek voor patches zijn de debian en gentoo repository's.
De SlackBuild file
De slackbuild is het 'recept' om een pakketje te bouwen. Er zijn een aantal example slackbuilds die je als basis kunt gebruiken. Deze detecteren alles automatisch waardoor je meestal niks hoeft aan te passen bij de standaard opensource GNU-automake pakketjes.
Kopieer het voorbeeld bestand source:trunk/npl/packagename.SlackBuild.example naar packagename.SlackBuild. Het pakketje zal automatisch deze naam krijgen.
root@builder:/p/npl/fileserver/foomatic_db# cp ../../packagename.SlackBuild.example foomatic_db.SlackBuild root@builder:/p/npl/fileserver/foomatic_db# ls -l total 15720 -rw-r--r-- 1 root root 16091293 2007-06-30 09:22 foomatic-db-3.0-20070630.tar.gz -rwxr-xr-x 1 root root 1943 2007-08-23 16:33 foomatic_db.SlackBuild*
Nu ben je al klaar om een eerste testbuild te doen. We starten het rebuildcheck commando vanuit de npl directory:
root@builder:/p/npl/fileserver/foomatic_db# cd ../.. root@builder:/p/npl# ./rebuildcheck foomatic_db REBUILD REQUIRED: ./foomatic-db-3.0-20070630.tar.gz has changed! REBUILDING /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild: Buildroot up-to-date check: ............................................................................................................DONE Buildroot /p/builder/buildroot0 repareren/syncen...OK /p/npl/fileserver/foomatic_db word gekopieerd naar werkdirectory /p/builder/buildroot0/tmp/build *** Chroot naar /p/builder/buildroot0 en starten van foomatic_db.SlackBuild in /tmp/build: /home/vservers/builder/dev/pts/0: No such file or directory 1 /tmp/build > basename ./foomatic_db.SlackBuild ... 3 /tmp/build > DST=/tmp/pkg 5 /tmp/build > '[' /tmp/pkg ']' 17 /tmp/build > cd foomatic-db-3.0-20070630 /bin/syn3_build_automake: line 17: cd: foomatic-db-3.0-20070630: No such file or directory 17 /tmp/build > exit 1 57 /tmp/build > exit 1 *** Er ging iets mis tijdens het bakken in de buildroot! Error while rebuilding /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild!
We zien in kleur stap-voor-stap wat er er gebeurd. Blijkbaar kan een directory niet gevonden worden. Laten we even in de buildroot duiken om te kijken watsgebeurd:
root@builder:/p/npl# chroot ../builder/buildroot0/ stderr is not a tty - where are you? [Syn-3] root@darkstar.example.net /# cd /tmp/build/ [Syn-3] root@darkstar.example.net /tmp/build# ls foomatic-db-20070630/ foomatic-db-3.0-20070630.tar.gz foomatic_db.SlackBuild*
De directory in de tarball is anders dan de tarball naam zelf, vandaar dat het mis gaat. Dit lossen we op door SRC_DIR=... in het buildscript aan te passen naar foomatic-db-20070630.
Als je wijzigingen maakt in het slackbuild script, vergeet dan niet om achter alle belangrijke regels een exit 1 toe te voegen:
commando bla bla bla || exit 1
Hierna proberen we het nog eens te builden:
root@builder:/p/npl# ./rebuildcheck foomatic_db ... 37 /tmp/build/foomatic-db-20070630 > exit 0 60 /tmp/build > syn3_strip /tmp/pkg 63 /tmp/build > syn3_move_dev /tmp/pkg /tmp/pkgdev 64 /tmp/build > syn3_makepkg /tmp/pkgdev foomatic_db_dev 20070630 i586 Not creating empty pacakge 67 /tmp/build > syn3_makepkg /tmp/pkg foomatic_db 20070630 i586 tar-1.13: foomatic_db.pkg.tar is the archive; not dumped *** Build gelukt. * Packages terugmoven naar originele directory.. /p/builder/buildroot0/tmp/build/foomatic_db.arch ... /p/builder/buildroot0/tmp/build/foomatic_db.version ... /p/builder/buildroot0/tmp/build/foomatic_db.pkg ... * Klaar ja! Updating md5 for /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild... Updating dependency information for /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild... All rebuilds completed.
Woohooooooo het is gelukt! Je ziet nu de volgende files:
root@builder:/p/npl# ls fileserver/foomatic_db -l total 30740 -rw-r--r-- 1 root root 16091293 2007-06-30 09:22 foomatic-db-3.0-20070630.tar.gz -rwxr-xr-x 1 root root 1925 2007-08-23 17:14 foomatic_db.SlackBuild* -rw-r--r-- 1 root root 5 2007-08-23 17:15 foomatic_db.arch -rw-r--r-- 1 root root 179 2007-08-23 17:15 foomatic_db.md5 -rw-r--r-- 1 root root 15364391 2007-08-23 17:14 foomatic_db.pkg -rw-r--r-- 1 root root 9 2007-08-23 17:15 foomatic_db.version
- De .pkg is de 'droge slackware tarball', maar dan met een .pkg extentie.
- De .arch bevat de architectuur. (meestal i386)
- De .version bevat de versie. In dit geval 20070630.
- De .md5 bevat md5sums, zodat het systeem kan zien dat het pakketje gewijzigd is en dus opnieuw gebuild moet worden.
Kijk in de .pkg om te kijken of de files en directorys op de goede plekken staan:
root@builder:/p/npl# tar -tzvf fileserver/foomatic_db/foomatic_db.pkg drwxr-xr-x root/root 0 2007-08-23 17:14:58 ./ drwxr-xr-x root/root 0 2007-08-23 17:14:43 usr/ drwxr-xr-x root/root 0 2007-08-23 17:14:43 usr/share/ drwxr-xr-x root/root 0 2007-08-23 17:14:43 usr/share/foomatic/ drwxr-xr-x root/root 0 2007-08-23 17:14:43 usr/share/foomatic/db/ -rw-r--r-- root/root 16156 2007-08-23 17:14:43 usr/share/foomatic/db/oldprinterids drwxr-xr-x root/root 0 2007-08-23 17:14:43 usr/share/foomatic/db/source/ drwxr-sr-x / 0 2007-06-30 09:22:45 usr/share/foomatic/db/source/PPD/ drwxr-sr-x / 0 2007-08-23 17:14:45 usr/share/foomatic/db/source/PPD/Brother/ -rw-r--r-- / 7166 2007-06-30 09:22:04 usr/share/foomatic/db/source/PPD/Brother/BRHL32_3_GPL.ppd.gz ... (heel veel files)
Als dit goed lijkt is het pakketje eigenlijk al klaar!
Kijk bij SynBuild hoe je het pakketje toevoegd aan de svn tree.
Lees meer op SynPackaging.