Bygging i Koji

Beskrivelse av prosessen for å bygge en pakke i Koji, inkludert kommandoer som skal kjøres.

1   Forutsetninger

For at en bygging skal kunne fullføre må følgende være på plass i pakkens Git-repo:

  • En spec-fil for pakken
  • En fil Makefile (se under)
  • Ev. patcher og andre kildekodefiler (spesifisert i spec-fil)

Uten dette vil byggingen feile.

1.1   Makefile for nedlasting av ekstern kildekode

Kildekoden lastes ned fra nettet, og det må spesifiseres hvor og hvordan. Dette gjøres vha. en fil "Makefile" som har et target "sources". Et eksempel på en slik er listet under:

# Makefile for Koji

sources:
        curl http://example.com/minpakke-1.0.tar.gz -o minpakke-1.0.tar.gz

Dersom pakken ikke skal bruke ekstern kildekode må Makefile fremdeles eksistere, men den trenger ikke gjøre noe. Eksempel:

# Makefile for Koji

sources:
        @echo "Nothing to do here..."

Dette er aktuelt for pakker hvor all kildekode ligger i Git-repoet for pakken. Typisk vil dette gjelde programmer og script som er utviklet internt.

2   Bygging uten konsekvenser: scratch-build

Det er mulig å bygge en pakke uten at det blir et ferdig produkt som tagges osv. Dette gjøres med opsjonen --scratch til build:

koji build --scratch <target> <scm-url>

Eksempel:

$ koji build --scratch uio-el6-free git://koji-git.uio.no/uio-app-sync#7bdbbda932fded81e050845e147f3c40f6b116e9
Created task: 37
...
37 build (uio-el6-free, /uio-app-sync:7bdbbda932fded81e050845e147f3c40f6b116e9) completed successfully

Det er også mulig å bygge fra en SRPM vha. "scratch build":

$ koji build --scratch uio-el6-free ./sympaadmin-1.8-1.src.rpm
Uploading srpm: ./sympaadmin-1.8-1.src.rpm
[====================================] 100% 00:00:00  23.48 KiB  51.38 KiB/sec
Created task: 40
...
40 build (uio-el6-free, sympaadmin-1.8-1.src.rpm) completed successfully

Slik kan man teste om en SRPM vil bygge hos oss. Merk at kun administrator kan gjøre ekte bygging (dvs. ikke scratch-build) fra SRPM, og dette er ikke noe vi ønsker å bruke. Man skal alltid bygge fra Git-repoet.

3   Vanlig bygging

For å bygge en pakke brukes kommandoen koji build. Denne skal ha to argumenter:

  1. Build target: Her skal du bruke uio-el6-free

  2. SCM URL: Dette skal være en URL mot Git-repoet som vi bruker:

    git://koji-git.uio.no/<pakke>#<commit>
    

    <pakke> skal være pakkenavnet, mens <commit> er en commit-ID.

Eksempel:

$ koji build uio-el6-free git://koji-git.uio.no/uio-app-sync#b312930
Created task: 43
...
43 build (uio-el6-free, /uio-app-sync:b312930) completed successfully

Hvis byggingen går bra vil pakken bli tilgjengelig i "testing"-repoet.

4   Signering

Alle pakker må signeres. Vi hadde tidligere automatikk for å gjøre dette, men automatikken er foreldet og dette gjøres for tiden manuelt. Prosedyren er beskrevet på internsidene til SSD:

Manuell signering av pakker

5   Sette i prod

Ved vanlig bygging blir den nybygde pakken tilgjengelig i repoet "uio-el6-free-testing". Man kan da teste den på utvalgte maskiner. Man installerer/oppdaterer den slik:

yum --enablerepo=uio-free-testing clean expire-cache
yum --enablerepo=uio-free-testing install/update <pakke>

Det er opp til pakkens eier å bestemme hvor lenge den skal testes og når den skal ut i produksjon, om i det hele tatt.

Når pakken skal ut i produksjon, må den flyttes. Dette gjøres slik:

koji move-build uio-el6-free-testing uio-el6-free <build>

Merk at "<build>" her skal være en unik NVR (name-version-release). Eksempel:

$ koji move-build uio-el6-free-testing uio-el6-free uio-thunderbird-3.1-3.el6
Created task 406, moving uio-thunderbird-3.1-3.el6
Watching tasks (this may be safely interrupted)...
406 tagBuild (noarch): free
406 tagBuild (noarch): free -> open (koji-el6-build01.uio.no)
406 tagBuild (noarch): open (koji-el6-build01.uio.no) -> closed
  0 free  0 open  1 done  0 failed

mens kun pakkenavnet vil ikke virke:

$ koji move-build uio-el6-free-testing uio-el6-free uio-thunderbird
GenericError: invalid format: uio-thunderbird

Bruk f.eks. koji list-tagged for å liste opp pakker med full NVR for en tag. Eksempel:

$ koji list-tagged uio-el6-free-testing
Build                                     Tag                   Built by
----------------------------------------  --------------------  ----------------
bofh-0.9.7-2.el6                          uio-el6-free-testing  trondham
nedetid-1.0-2.el6                         uio-el6-free-testing  werner

Se også output fra:

koji move-build --help

Det er kun den brukeren som bygget pakken (eller admin) som kan flytte pakken til produksjon.

Av Trond Hasle Amundsen
Publisert 21. mai 2013 13:18 - Sist endret 28. nov. 2022 12:57