Changes between Initial Version and Version 1 of SynPackaging


Ignore:
Timestamp:
08/08/08 00:10:41 (12 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SynPackaging

    v1 v1  
     1= Syn-3 packaging =
     2
     3Packaging is het geen waarmee we Syn-3 continue kunnen uitbreiden. De meeste mensen zullen hier dus het meest mee bezig zijn. Vandaar deze uber pagina met uitleg. :)
     4
     5== Package manager ==
     6
     7Als package manager gebruiken we onder water nog steeds installpkg van Slackware. Feitenlijk is een Syn-3/slackware pakketje gewoon een droge tarbal die uitgepakt word in de root van het te updaten systeem. We gebruiken een wrapper om installpkg heen, om een aantal dingen automatisch af te handellen. Deze wrapper heet syn3-update. source:trunk/npl/syn3/syn3-scripts/scripts/syn3-update
     8
     9Eigenschappen Syn-3 packaging systeem:
     10
     11 * Pakketjes hebben een zeer basic, makkelijk te begrijpen indeling.
     12 * Geheel geautomatiseerd build systeem dat alle pakketjes altijd in een buildroot bouwt tegen de juiste dependencies. Ieder pakketje heeft een .SlackBuild waarin het 'recept' staat om dit pakketje te bouwen.
     13 * Source tarballs die met het standaard ''./configure-systeem'' werken kunnen meestal helemaal automatisch gebouwd worden, met weinig tot geen aanpasingen aan het buildscript.
     14 * Geen dependency tracking op de servers zelf. (voordeel hiervan is minder administratie)
     15 * Simpelle dependency tracking in het buildsysteem, om build-dependencies in de buildroot te krijgen.
     16 * ''1 for all'': 1 installatie, die gelijk is bij alle Syn-3 machines. Het is dus niet mogelijk om oudere versies vast te houden: je '''moet''' alle pakketjes op je server updaten na de laatste stabiele versie. Hierdoor zijn alle machines exact gelijk en voorkomen verschillende problemen.
     17 * Services kunnen makkelijk toegevoegd worden doordat we daemontools gebruiken. (maak gewoon een nieuw runscript in /service/''naam''/run) Zie SynService.
     18 * Automatische start en foutcontrole van post-installatie script in /etc/postinst.d/post.''scriptnaam''
     19 * Recht-toe-recht-aan update systeem: doordat er geen dependency tracking is, worden alle updates in een vaste volgorde geinstalleerd, voor alle systemen. Voordeel is wederom dat de system gelijk blijven en er minder problemen ontstaan. Iedereen heeft dezelfde problemen en die hoeven we maar 1x op te lossen.
     20 * Vaste plek voor data die gebackuped moet worden: '''/home/system/'''
     21 * Updates doen alles automatisch en werken altijd.
     22
     23
     24== Tree indeling ==
     25
     26Alle pakketjes staan onder source:trunk/npl. Deze is als volgt ingedeeld:
     27
     28 * '''system''' -- Basis systeem packages.
     29 * '''fileserver''' -- Onderdelen van de fileserver module
     30 * '''mailserver''' -- Onderdelen van de mailserver module
     31 * '''internetserver''' -- Onderdlene van de internetserver module
     32 * '''commonservers''' -- Server toepassingen die algemeen zijn voor alle syn-3 producten.
     33 * '''webapps''' -- Webapplicaties die onder apache draaien: vtiger, mediawiki etc.
     34 * '''phone''' -- Onderdelen van de telefoon server. (astersk & co)
     35 * '''kernel''' -- Linux kernel en paketten die kernel drivers bevatten. (Beginnen met drv_)
     36 * '''X''' -- Grafische toepassing en de X server en libraries
     37 * '''mediabox''' -- Packages die interesant zijn voor multimedia boxen. (players, codecs, etc)
     38 * '''games''' -- Spelletjes , emulators en andere onzin dingen.
     39 * '''p2p''' -- Peer2peer filesharing apps
     40 * '''perl''' -- Perl + perl modules. Plaats hier de perlmodules die je nodig bent.
     41 * '''slackware''' -- Native slackware packages. Geen nieuwe pakketjes meer aan toevoegen, maar altijd zelf bouwen aub!
     42 * '''syn3''' -- Packages van software en scripts die speciaal voor Syn3 geschreven zijn. Dus SCC, backup, monitoring, splash.
     43 * '''overig''' -- Overige packages.
     44
     45=== Klant specifieke packages ===
     46
     47 * '''kiosk''' --- I-Smart kiosk packages
     48 * '''onvelvet''' --- Onvelvet POS packages
     49 * '''infrait''' --- Infra IT spul
     50 * '''monitoring''' --- Monitoring systeem infra IT. Dit is GEEN syn3 monitoring.
     51
     52= Hoe een Syn-3 pakketje bouwen? =
     53
     54Hier volgt een stap voor stap handleiding over hoe je een pakketje correct maakt. Volg dit strict en je pakketje zal zeer lang mee kunnen en makkelijk geupdate kunnen worden naar nieuwe versies.
     55
     56== Build logboek ==
     57
     58Begin gelijk met een buildlogboek op deze wiki. Hier zet je in waar je files weghaalt, wat je gedaan, waarom je bepaalde dingen doet, welke problemen je tegenkomt, wat voor patches etc. Een buildlog hoeft niet supernetjes te zijn. Het is een logboek, dus als achteraf blijkt dat iets anders gemoeten had, dan wijzig je dat niet, maar tik je gewoon verder. (Zo word het dus een verhaal) Gebruik [wiki:npl/games/openmsx] als voorbeeld.
     59
     60Hier zie je een overzicht van alle reeds aanwezige build logs:
     61[[TitleIndex(npl/)]]
     62
     63
     64== Zoek het juiste sources en patches bijelkaar ==
     65
     66Het 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.
     67
     68 * Source tarball: pakket_naam-1.2.3.tar.gz
     69 * CVS tarball: pakketje_naam-12.04.2007.tar.gz
     70 * SVN tarball: pakketje_naam-3452.tar.gz
     71
     72Zorg dat je de patches er los bij zet. Dus geen pre-patched tarball, want dit is lastig met latere updates!
     73
     74Gebruik indien mogelijk altijd de laatste stable versie.
     75
     76Een goede plek voor patches zijn de debian en gentoo repository's.
     77
     78== Kies een lokatie en pakketnaam ==
     79
     80'''De pakketnaam mag alleen letters, cijfers en underscores bevatten. Dus foomatic_db in plaats van foomatic-db!!!!'''
     81
     82Bepaal met de lijst hier bovenaan in welke directory het pakketje thuis hoort. Maak hieronder een directory aan met de naam van het pakket.
     83
     84Je mag ook een subdirectory aanmaken om meerdere packages te groeperen. Zoals source:trunk/npl/overig/alsa.
     85
     86Kopieer de tarball en patches hierin.
     87
     88== File lokaties ==
     89
     90 * De standaard prefix voor binary packages is '''/usr'''.
     91 * Webapplicaties, die rechstreeks onder apache moeten draaien zet in '''/var/www/htdocs/syn3/''naam'''''. Om de applicatie automatisch in de webportal weer te geven moeten er minimaal 2 bestanden in deze directory staan:
     92   * ''webportal.desc'' Deze bevat de naam, als pure tekst.
     93   * ''webportal.png'' Deze bevat het logo.
     94
     95== Gebruik de standaard .SlackBuild als basis ==
     96
     97'''Als je wijzigingen maakt in het slackbuild script, vergeet dan niet om achter alle belangrijke regels een exit 1 toe te voegen:'''
     98{{{
     99commando bla bla bla || exit 1
     100}}}
     101
     102Kopieer het voorbeeld bestand source:trunk/npl/packagename.SlackBuild.example naar ''packagename''.SlackBuild. Het pakketje zal automatisch deze naam krijgen.
     103{{{
     104root@builder:/p/npl/fileserver/foomatic_db# cp ../../packagename.SlackBuild.example foomatic_db.SlackBuild
     105root@builder:/p/npl/fileserver/foomatic_db# ls -l
     106total 15720
     107-rw-r--r--  1 root root 16091293 2007-06-30 09:22 foomatic-db-3.0-20070630.tar.gz
     108-rwxr-xr-x  1 root root     1943 2007-08-23 16:33 foomatic_db.SlackBuild*
     109}}}
     110
     111Nu ben je al klaar om een eerste testbuild te doen. We starten het ''rebuildcheck'' commando vanuit de npl directory:
     112{{{
     113root@builder:/p/npl/fileserver/foomatic_db# cd ../..
     114root@builder:/p/npl# ./rebuildcheck foomatic_db
     115REBUILD REQUIRED: ./foomatic-db-3.0-20070630.tar.gz has changed!
     116REBUILDING /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild:
     117Buildroot up-to-date check: ............................................................................................................DONE
     118Buildroot /p/builder/buildroot0 repareren/syncen...OK
     119/p/npl/fileserver/foomatic_db word gekopieerd naar werkdirectory /p/builder/buildroot0/tmp/build
     120*** Chroot naar /p/builder/buildroot0 en starten van foomatic_db.SlackBuild in /tmp/build:
     121/home/vservers/builder/dev/pts/0: No such file or directory
     1221 /tmp/build > basename ./foomatic_db.SlackBuild
     123...
     1243 /tmp/build > DST=/tmp/pkg
     1255 /tmp/build > '[' /tmp/pkg ']'
     12617 /tmp/build > cd foomatic-db-3.0-20070630
     127/bin/syn3_build_automake: line 17: cd: foomatic-db-3.0-20070630: No such file or directory
     12817 /tmp/build > exit 1
     12957 /tmp/build > exit 1
     130*** Er ging iets mis tijdens het bakken in de buildroot!
     131Error while rebuilding /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild!
     132
     133}}}
     134
     135We 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:
     136
     137{{{
     138root@builder:/p/npl# chroot ../builder/buildroot0/
     139stderr is not a tty - where are you?
     140[Syn-3] root@darkstar.example.net /# cd /tmp/build/
     141[Syn-3] root@darkstar.example.net /tmp/build# ls
     142foomatic-db-20070630/  foomatic-db-3.0-20070630.tar.gz  foomatic_db.SlackBuild*
     143}}}
     144
     145De 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. Hierna proberen we het nog eens te builden:
     146
     147{{{
     148root@builder:/p/npl# ./rebuildcheck foomatic_db
     149...
     15037 /tmp/build/foomatic-db-20070630 > exit 0
     15160 /tmp/build > syn3_strip /tmp/pkg
     15263 /tmp/build > syn3_move_dev /tmp/pkg /tmp/pkgdev
     15364 /tmp/build > syn3_makepkg /tmp/pkgdev foomatic_db_dev 20070630 i586
     154Not creating empty pacakge
     15567 /tmp/build > syn3_makepkg /tmp/pkg foomatic_db 20070630 i586
     156tar-1.13: foomatic_db.pkg.tar is the archive; not dumped
     157*** Build gelukt.
     158* Packages terugmoven naar originele directory..
     159/p/builder/buildroot0/tmp/build/foomatic_db.arch ...
     160/p/builder/buildroot0/tmp/build/foomatic_db.version ...
     161/p/builder/buildroot0/tmp/build/foomatic_db.pkg ...
     162
     163* Klaar ja!
     164Updating md5 for /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild...
     165Updating dependency information for /p/npl/fileserver/foomatic_db/foomatic_db.SlackBuild...
     166All rebuilds completed.
     167}}}
     168
     169Woohooooooo het is gelukt! Je ziet nu de volgende files:
     170{{{
     171root@builder:/p/npl# ls fileserver/foomatic_db -l
     172total 30740
     173-rw-r--r--  1 root root 16091293 2007-06-30 09:22 foomatic-db-3.0-20070630.tar.gz
     174-rwxr-xr-x  1 root root     1925 2007-08-23 17:14 foomatic_db.SlackBuild*
     175-rw-r--r--  1 root root        5 2007-08-23 17:15 foomatic_db.arch
     176-rw-r--r--  1 root root      179 2007-08-23 17:15 foomatic_db.md5
     177-rw-r--r--  1 root root 15364391 2007-08-23 17:14 foomatic_db.pkg
     178-rw-r--r--  1 root root        9 2007-08-23 17:15 foomatic_db.version
     179}}}
     180
     181 * De .pkg is de 'droge slackware tarball', maar dan met een .pkg extentie.
     182 * De .arch bevat de architectuur. (meestal i386)
     183 * De .version bevat de versie. In dit geval 20070630.
     184 * De .md5 bevat md5sums, zodat het systeem kan zien dat het pakketje gewijzigd is en dus opnieuw gebuild moet worden.
     185
     186Kijk in de .pkg om te kijken of de files en directorys op de goede plekken staan:
     187{{{
     188root@builder:/p/npl# tar -tzvf fileserver/foomatic_db/foomatic_db.pkg
     189drwxr-xr-x root/root         0 2007-08-23 17:14:58 ./
     190drwxr-xr-x root/root         0 2007-08-23 17:14:43 usr/
     191drwxr-xr-x root/root         0 2007-08-23 17:14:43 usr/share/
     192drwxr-xr-x root/root         0 2007-08-23 17:14:43 usr/share/foomatic/
     193drwxr-xr-x root/root         0 2007-08-23 17:14:43 usr/share/foomatic/db/
     194-rw-r--r-- root/root     16156 2007-08-23 17:14:43 usr/share/foomatic/db/oldprinterids
     195drwxr-xr-x root/root         0 2007-08-23 17:14:43 usr/share/foomatic/db/source/
     196drwxr-sr-x /                 0 2007-06-30 09:22:45 usr/share/foomatic/db/source/PPD/
     197drwxr-sr-x /                 0 2007-08-23 17:14:45 usr/share/foomatic/db/source/PPD/Brother/
     198-rw-r--r-- /              7166 2007-06-30 09:22:04 usr/share/foomatic/db/source/PPD/Brother/BRHL32_3_GPL.ppd.gz
     199... (heel veel files)
     200
     201}}}
     202
     203Als dit goed lijkt is het pakketje eigenlijk al klaar!
     204
     205Kijk bij SynBuild hoe je het pakketje toevoegd aan de svn tree.
     206
     207'''Verderop staat uitgelegd HOE je het pakketje makkelijk op je Syn-3 server krijgt om te testen.'''
     208
     209== Build dependencies ==
     210
     211Soms heeft een pakketje andere paketten nodig om gebuild te kunnen worden. Deze geef je in het buildscript aan, er staan al wat voorbeelden in het standaard voorbeeld script:
     212
     213 * '''#NEED:''packagename''''' -- packagename word in de buildroot geinstalleerd, voordat de build begint.
     214 * '''#DEP:''packagename''''' -- packagename word eerst gerebuild-checked, en daarna in de buildroot geinstalleerd.
     215
     216Gebruik DEP voor paketten die exact moeten kloppen en altijd gerebuild moeten zijn. Bijvoorbeeld als je een kernel module bouwt tegen de kernel source.
     217
     218== Extra configure en make opties ==
     219
     220Bij de juiste regels in het standaard buildscript kun je extra opties aangeven. Bijvoorbeeld:
     221{{{
     222export CONFIGURE_OPTS="--uber-pimp-modus=yes --beer=/dev/psy"
     223export MAKE_OPTS="-j1"
     224export NOTEST=1
     225syn3_build_automake $SRC_DIR /tmp/pkg || exit 1
     226}}}
     227
     228In dit geval word het testen overgeslagen. De -j1 gebruik je om problemen bij parallel builds op te lossen. (op systemen waar j standaard hoger dan 1 is)
     229
     230Meer info over syn3_build_automake vind je in source:/trunk/npl/syn3/syn3_build/src/syn3_build_automake
     231
     232Soms is syn3_build_automake helemaal niet in staat om een pakketje te bouwen. (bijvoorbeeld als men geen automake-compatible sourcetar ball heeft). In dit geval is het het handigste om deze regel weg te halen en de handmatige build commando's er neer te zetten. Zorg er in elk geval voor dat het pakketje geinstalleerd word in ''/tmp/pkg'', zodat de rest van het buildscript het pakketje correct in kan pakken.
     233
     234== Bijzondere pakketten ==
     235
     236=== Kernel modules ===
     237
     238Iedere kernel module heeft wel weer zn eigen eigenaardig heden, vandaar dat we dit niet stap voor stap uitleggen.
     239
     240De package naam dient in elk geval met drv_ te beginnen. Kijk in source:trunk/npl/kernel bij de bestaande drv_pakketjes voor wat voorbeelden.
     241
     242=== Perl modules ===
     243
     244Perl modules zijn zeer eenvoudig en snel te builden. Maak een directory onder source:trunk/npl/perl/ en gooi daar de orginele perl module tarballs in.
     245
     246Je kan meerdere modules in 1 directory gooien.
     247
     248Kopieer hierna het voorbeeld script uit source:trunk/npl/perl/buildmods.SlackBuild.example er heen, en ga naar de npl directory:
     249{{{
     250root@builder:/home/psy/syn3/npl# ./rebuildcheck perl/Audio/buildmods.SlackBuild
     251REBUILD REQUIRED: ./Audio-Mixer-0.7.tar.gz has changed!
     252...
     253All rebuilds completed.
     254}}}
     255
     256Je kan het script eventueel weer aanpassen met extra opties of DEPs of NEEDs.
     257
     258=== Grafische programmas voor X ===
     259
     260Bij grafische programma voor X ben je vaak erg veel dependencies nodig en is het vaak nodig om /etc/xorg_build.conf in je script te 'sourcen'.
     261
     262Het is verstandig om eerst even naar bestaande X buildscripts te kijken en hier 1 van als voorbeeld te pakken.
     263
     264= Automatisch dingen laten doen =
     265
     266Moet er iets automatisch geconfigureerd of gestart worden? Kijk dan bij SynAutomation.
     267
     268= Testen en vrijgeven van het pakketje =
     269
     270Hier staat de juiste volgorde beschreven hoe je het pakketje test en released.
     271
     272== Installatie op een bestaande server ==
     273
     274Deze methode is erg handig in de eerste testfase van een pakketje:
     275
     276Om een pakketje naar een Syn-3 server te 'pushen' gebruik je de remoteinstall tool:
     277{{{
     278root@builder:/home/psy/syn3/npl# ./remoteinstall tar 192.168.0.1 rebuild
     279* Build check:
     280* Package tar zoeken:/home/psy/syn3/npl/.tmp/D/tar-1.16.1-i586-3023.tgz
     281* install:
     282Checking ssh key on 192.168.0.1...OK
     283192.168.0.1: Uploading and installing
     284192.168.0.1: Running installpkg /tmp/tar-1.16.1-i586-3023.tgz
     285192.168.0.1: Installing package tar-1.16.1-i586-3023...
     286192.168.0.1: PACKAGE DESCRIPTION:
     287192.168.0.1: Executing install script for tar-1.16.1-i586-3023...
     288192.168.0.1:
     289192.168.0.1: Running etc-update...
     290192.168.0.1: Running ldconfig...DONE
     291192.168.0.1: Syncing changes to disk...DONE
     292192.168.0.1: Postinstall check...
     293192.168.0.1: Installed /tmp/tar-1.16.1-i586-3023.tgz.
     294192.168.0.1: Install on 192.168.0.1 OK
     295All installs done
     296}}}
     297
     298Deze tool doet autmatisch een rebuild check, installeerd automatisch een sshkey, en installeerd daarna het pakketje.
     299
     300Werkt je pakketje niet? Maak dan de juiste wijzigingen aan de slackbuild en run dit commando nog een keer. Supersnel en handig.
     301
     302Je kan het pakketje zelfs naar parallel naar meerdere servers pushen. Tik ./remoteinstall zonder parameters voor meer info.
     303
     304== Opnemen in het update systeem ==
     305
     306Als het pakketje lijkt te werken is het tijd om het pakketje beschikbaar te maken voor meerdere mensen. Alleen de uber-gasten kunnen dit.
     307
     308=== Uploaden ===
     309
     310Gebruik de syncupdate tool om het pakketje naar de centrale Syn-3 update server te uploaden:
     311
     312{{{
     313root@builder:/home/psy/syn3/npl# sh syncupdates.sh tar
     314Checking ssh key on updates@banaan.datux.nl...OK
     315At revision 3428.
     316Verifying update ./overig/archivetools/tar/tar.pkg...Skipping, already uploaded
     317}}}
     318
     319=== Updatemanager ===
     320
     321Hierna ga je naar de update manager in de shop http://www.syn-3.nl/mosaddphp/regserver_2/regserver/listupdates.php en vul je de gegevens van de update eventueel alvast in. Vooral developers notities zijn handig.
     322
     323Ook is het belangrijk om eventueel een vereiste optie in te vullen, zodat alleen users met de juiste licentie de update krijgen. Zie SynRegserver.
     324
     325Een update gaat door 4 stadia:
     326 * '''Development:''' het pakketje is nog in ontwikkeling en moet alleen gebruikt worden om te prutsen. Het pakketje mag uberkrikky zijn.
     327 * '''Testing:''' het pakketje is klaar om getest te worden door andere mensen: het is vrij zeker dat er geen dataverlies of corruptie optreed door de update. Er kunnen natuurlijk wel andere dingen mis gaan.
     328 * '''Accepted:''' het pakketje is getest en goed bevonden. Vanaf nu kan er niks meer veranderd worden. De update is nog niet beschikbaar voor het grote publiek.
     329 * '''Released:''' het pakketje is beschikbaar voor het grote publiek. Syn-3 servers zullen hun administrator informeren via het monitoring systeem.
     330
     331Kijk dus uit met het zetten van het released statium!
     332
     333Naast deze stadia kunnen we ook Syn-3 versies aangeven in de update manager. Aan de hand van deze versie kun je vervolgens weer een installatie CD maken.
     334
     335Basis systeem pakketjes die minimaal nodig zijn om een server te installaren zet je in source:trunk/bootcd/base.list
     336
     337
     338Zie SynProducts voor meer info.
     339
     340= Zorgen dat het pakketje op de install CD komt =
     341
     342Zodra een pakketje in de shop staat kan er een Syn-3 release versie nummer aangehangen worden. Hierna is het mogelijk om een install cd te maken en automatisch te laten testen.
     343
     344Zie SynInstaller en SynTest.