Portál AbcLinuxu, 8. května 2025 04:29

Lokální Buildservice (OBS) – sestavujte vlastní balíčky

19. 8. 2010 | Petr Vaněk
Články - Lokální Buildservice (OBS) – sestavujte vlastní balíčky  

Tento článek je volným pokračováním seriálu openSUSE Build Service. Neukážeme si v něm, jak poměrně snadno z dálky rozeznat různé druhy stromů. Mimo jiné. Ale jak si postavit vlastní Build Service.

Obsah

opensuse buildservice logo

Pozn. autora: Tristní situace okolo dokumentace OBS se během psaní tohoto článku změnila. Proto může následující text p.t. čtenáři připadat jako sprosté opisování, ale není tomu tak. Jednalo se o poměrně otravnou práci, kdy jsem otravoval tvůrce OBS dotazy a dělal vlastní pokusy. Alespoň některé výsledky jsou na výše zmíněném portále vidět.

Proč bychom chtěli stavět svou vlastní instanci OBS? Vždyť přece existuje běžící build.opensuse.org? Důvody mohou být různé. Autor měl motivaci následující:

suse m3geeko1

Architektura OBS

link

Buildservice je služba složená z několika částí. Stručný popis práce je zhruba následující.

Dispatcher (volaný klientem nebo interní notifikací) spustí worker. Worker stahuje binární balíky z repserveru, zdrojové kódy ze srcserveru a výsledné balíčky posílá zpět repserveru. Repserver může předat balíčky k podpisu signeru, pak je zařadí do lokálního repozitáře a informuje publisher, že může balíky publikovat do veřejného download repozitáře.

Backend
Výkonná část OBS. Tvořena několika démony:
srcserver
Jediný src server v OBS instanci. Stará se o zdrojové kódy balíčků, revize souborů, metadata, vyhledávání a další činnosti spojené se správou dat.
repserver
Vždy několik běžících procesů v jedné instanci. Poskytuje binární balíky workerům nebo frontendům, také předává výsledné balíky k podpisu signerovi.
scheduler
Jeden scheduler pro každou architekturu. Počítá závislosti balíků napříč souvisejícími repozitáři a projekty.
dispatcher
Jediný proces v OBS instanci. Předává zprávy od schedulerů odpovídajícím workerům.
publisher
Publikuje hotové balíky do repozitářů na tzv. download servery.
worker
Vlastní kompilace a sestavení balíku.
warden
Volitelná služba. Likviduje nekorektně ukončené buildy, workery.
signer
Volitelná, ale doporučené služba. Podepisuje balíky.
API
Nízkoúrovňové ovládací rozhraní, které používají klienti. Čistě teoreticky lze OBS ovládat přímo voláním jednotlivých API např. pomocí curl.
WebUI
Webové uživatelské rozhraní. Na základní práci postačuje, ale složitější správu projektu nebo balíku je nutno stále provádět pomocí osc.
Obecné klienty
Ve výše zmíněném seriálu popisovaný CLI klient osc, ale také různé GUI programy nebo např. Android aplikace.
Hermes
E-mailový notifikační systém.

OBS Appliance

link

Autory OBS doporučováno jako nejsnadnější cesta instalace. Appliance je v podstatě image disku, který může uživatel nakopírovat na zvolené médium. Jednotlivé části OBS se samy nakonfigurují. Kompilované balíky jsou pak ukládány na předdefinovaný disk.

Appliance by se měly snadno aktualizovat. Na druhou stranu použití appliance může představovat bezpečnostní riziko, protože implicitně otvírá své porty celé okolní síťi.

OBS Virtual Image

link

Občas se objeví jako výsledek dobrovolnické práce. Obsahuje všechny komponenty OBS, většinou starší verze, a je nakonfigurována pouze na lokální použití – tj. žádné DNS, žádný přístup na virtualizovaného hosta (guest) z okolní sítě.

Funguje ale automaticky, bez nutnosti jakékoliv konfigurace. I proto je to ideální způsob, jak si OBS vyzkoušet. Také řeší motivační bod č. 3 – odladit balík před finálním sestavením na oficiální OBS.

Vlastní instalace

link

Je jedno, jestli se jedná o instalaci přímo na server/desktop nebo o instalaci do virtuálního stroje (zde by autor doporučil k rychlé a hrubé instalaci SuseStudio).

Požadavky

link

Samotná instalace je popsána v souboru README.SETUP (/usr/share/doc/packages/obs-api/). V následujícím textu uvedu doplňky chybějícího, popř. ozřejmím nejasnosti.

Změna adres/URL služeb

link

Po standardní instalaci jsou služby nastaveny s lokálními IP adresami:

SlužbaAdresa
WebUIhttp://127.0.42.1
APIhttp://127.0.42.2
Downloadnenastaveno, nebo v případě appliance/image http://localhost

Pokud chceme OBS zpřístupnit i do lokální nebo veřejné sítě, je třeba výše uvedené adresy změnit.

Zvolená doménová jména (DNS už nastaveno) se změní v konfiguraci virtuálních serverů použitého web serveru. V případě Lighttpd v souboru /etc/lighttpd/vhosts.d/obs.conf.

Příklad:

$HTTP["host"] =~ "build.yarpen.cz\.?" { rails_app   = "webui"
  rails_root  = "/srv/www/obs/webui"
  rails_procs = 5
  # production/development are typical values here
  rails_mode  = "production"
  log_root = "/srv/www/obs/webui/log"
  include "vhosts.d/rails.inc"
}
$HTTP["host"] =~ "api.yarpen.cz\.?" {
  rails_app   = "api"
  rails_root  = "/srv/www/obs/api"
  rails_procs = 5
  # production/development are typical values here
  rails_mode  = "production"
  log_root = "/srv/www/obs/api/log"
  include "vhosts.d/rails.inc"
}
$HTTP["host"] =~ "download.yarpen.cz\.?" {
  server.name = "download.yarpen.cz"
  server.document-root = "/srv/obs/repos/TOra/"  
  dir-listing.activate      = "enable"
  # … a dalsi vlastnosti vypisu adresaru
}

Dále je třeba změnit hodnotu proměnné FRONTEND_HOST v souboru /srv/www/obs/webui/config/environments/production.rb tak, aby obsahovala URL OBS API.

Podepisování balíků

link

Přestože obs signer běží a tváří se spokojeně, výsledné balíky nejsou podepsané. Pokusíme se to tedy změnit:

Balíky závislé na proprietárním SW

link

Nejprve je třeba nastavit OBS tak, aby daný SW dokázala nalézt a použít. Pokud není použitý SW k dispozici v podobě balíků, musíme z něj balíček vytvořit a následně jej naimportovat do vlastního OBS projektu. V následujícm textu dále předpokládejme, že budeme používat Oracle Instant Client, který je v dispozici v podobě RPM balíčků.

Krok první – nový projekt

link

Vytvořme nový OBS projekt, který bude sloužit jako veřejnosti neviditelný repozitář OBS. Potom vytvořme adresářovou strukturu, která se do OBS snadno naimportuje. Buď ve webovém rozhraní, nebo pomocí osc:

$ osc -A $API meta prj Oracle:InstantClient:11.2 -F – <<XML
<project name="Oracle:InstantClient:11.2">
  <title>Oracle Instant Client 11.2</title>
  <description>InstantClient from Oracle OTN.</description>
  <person role="maintainer" userid="pvanek"/>
  <person role="bugowner" userid="pvanek"/>
  <build>
    <enable/>
  </build>
  <publish>
    <disable/>
  </publish>
  <debuginfo>
    <disable/>
  </debuginfo>
  <repository name="standard">
    <arch>x86_64</arch>
    <arch>i586</arch>
  </repository>
</project>
XML

Všimněte si zejména vypnutého parametru publish. Licence nejspíše neumožňuje proprietární balíky redistribuovat, takže si je koncový uživatel bude muset nainstalovat sám.

Krok druhý – nový repozitář

link

V nově vzniklém projektovém adresáři na OBS serveru /srv/obs/build/Oracle\:InstantClient\:11.2/standard/ nyní připravíme repozitářovou strukturu:

$ cd /srv/obs/build/Oracle\:InstantClient\:11.2/standard/
$ mkdir i586 x86_64
$ mkdir i586/:full x86_64/:full
$ find $ora_rpm_dir -name *i386.rpm | xargs -I@ ln @ i586/:full
$ find $ora_rpm_dir -name *x86_64.rpm | xargs -I@ ln @ x86_64/:full

$ /usr/lib/obs/server/bs_admin --rescan-repository Oracle:InstantClient:11.2 standard i586
$ /usr/lib/obs/server/bs_admin --rescan-repository Oracle:InstantClient:11.2 standard x86_64

$ chown -R obsrun:obsrun /srv/obs/build/Oracle:InstantClient:11.2

Krok třetí – automatické závislosti

link

Krok volitelný – dá se nahradit specifikací ve spec souboru. Aby nově sestavované balíky rovnou nacházely požadované závislosti, upravíme konfiguraci projektu, který bude Oracle klienta používat:

$ osc meta prjconf -e mujprojekt
Required: oracle-instantclient11.2-basic
Required: oracle-instantclient11.2-devel

Krok čtvrtý – intergrace proprietárního repozitáře

link

Nyní musíme cílový projekt donutit, aby bral náš Oracle repozitář na vědomí:

$ osc meta prj -e mujprojekt
<project name="mujprojekt">
  <title>Lorem ipsum…</title>
  <description></description>
  <person role="maintainer" userid="pvanek"/>
  <person role="bugowner" userid="pvanek"/>
  <repository name="openSUSE_11.2">
    <path project="openSUSE.org:openSUSE:11.2" repository="standard"/>
    <!-- nasledujici radek "prida" oracle repo do hlavniho repozitare distribuce -->
    <path project="Oracle:InstantClient:11.2" repository="standard"/>
    <arch>x86_64</arch>
    <arch>i586</arch>
  </repository>
</project>

Krok pátý – sestavujeme své balíky

link

A kocháme se výsledky.

Seriál openSUSE Build Service (dílů: 5)

První díl: openSUSE Build Service (OBS) aneb jak ho sbalit, poslední díl: Lokální Buildservice (OBS) – sestavujte vlastní balíčky.
Předchozí díl: openSUSE buildservice - 4 (spolupráce s upstreamem)

Související články

Seriál: openSUSE Build Service
Na co se často ptáme: Balíčkovací systémy
Seriál: Instalace softwaru v Linuxu
Seriál: Gentoo ebuild
Seriál: Rukověť baliče RPM
Seriál: Balíčky pro Debian
Seriál: Balíčkovací systém Arch Linuxu
Smart Package Manager - instalujeme chytře
Zdroje balíčkov pre Ubuntu
Balíčkovací systém Mandrake Linuxu
Balíčkovací systém Gentoo Linuxu

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

19.8.2010 04:58 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
Odpovědět | Sbalit | Link | Blokovat | Admin
Dík za pokračování kde jsem skončil. :))))
19.8.2010 10:53 pomgoe
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
Odpovědět | Sbalit | Link | Blokovat | Admin
A já se tak těšil na rozeznávání stromů z dálky. Neumím rozeznat modřín.
Heron avatar 19.8.2010 16:27 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
The Larch?
19.8.2010 12:38 Luboš Luňák | skóre: 19 | blog: Seli
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
Odpovědět | Sbalit | Link | Blokovat | Admin
Jakožto tvůrce balíků se necítí nejsilnější a při přípravě spec souborů dělá chyby. V oficiální OBS musel často čekat minuty i hodiny, než se dostane na řadu, zabral si cenné systémové prostředky, a pak sledoval, jak build padá s chybou na třetím řádku spec souboru.

Spustit lokálně 'osc build'. Při použití --ccache je to klidně i celý balík pod minutu.
belisarivs avatar 19.8.2010 13:00 belisarivs | skóre: 22 | blog: Psychobláboly
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
Tomu rikam shrnuti clanku do dvou vet :-D
IRC is just multiplayer notepad.
19.8.2010 13:36 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
Jenže na soukromém OBS můžeš mít i kodeky a buildit si třeba MPlayer. :-))) Nebo aircrack :D
19.8.2010 13:04 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
Rozbalit Rozbalit vše Re: Lokální Buildservice (OBS) – sestavujte vlastní balíčky
prima
Kuolema Kaikille (Paitsi Meille).

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.