Portál AbcLinuxu, 26. dubna 2024 17:58

openSUSE Build Service (OBS) - 2

25. 6. 2008 | Mark Stopka
Články - openSUSE Build Service (OBS) - 2  

Výběr repozitářů, do kterých bude nově sestavený balíček přidán. Řešení závislostí a přebírání balíčků z repozitářů určených pro jiné distribuce.

Přidáváme repozitáře, pro které chceme balíček sestavit

Přidáme si tedy repozitáře, pro které chceme balíček sestavit. To můžeme udělat například pomocí osc -e prj home:m4r3k, přičemž se nám opět spustí $EDITOR. Do něj pak napíšeme kód podobný tomu následujícímu:

<project name="home:m4r3k">
  <title<m4r3k's Home Project</title>
  <description>My packages :-).</description>
  <person role="maintainer" userid="m4r3k"/>
  <repository name="openSUSE_10.3">
    <path project="openSUSE:10.3" repository="standard"/>
    <arch>i586</arch>
    <arch>x86_64</arch>
  </repository>
</project>

Jak vidíte, tento soubor má poměrně složitou syntaxi (alespoň já si ji ne a ne zapamatovat :-)), naštěstí se však repozitáře dají přidat i pomocí webového rozhraní. Přihlásíme se tedy na build.opensuse.org, v našem domovském projektu klikneme na tlačítko Add Repository a vybereme si některý z repozítářů, pro které chceme sestavovat. V našem příkladu se jedná o repozitáře openSUSE 10.3, Fedora 8 a Mandriva 2008.

opensuse buildservice - Webové rozhraní pro přídávání repozitářů

Po přidání repozitářů se nám začnou sestavovat jednotlivé balíčky. Průběh sestavování si můžeme vypsat pomocí příkazu osc buildlog distribuce architektura, například tedy:

osc buildlog openSUSE_10.3 i586

Po nějaké době by nám měly vzniknout balíčky pro distribuce openSUSE, Fedora a Mandriva. Každá by měla obsahovat jeden textový soubor umístěný v adresáři /etc/ s příslušným jménem. To si můžeme zkontrolovat tak, že si sestavené balíčky stáhneme a pomocí rpm -qlp balíček.rpm necháme vypsat jejich obsah.

for foo in *.rpm; do echo "balíček $foo obsahuje"; rpm -qlp $foo; echo "---"; done

balíček fedora-testovaci-balik.rpm obsahuje
warning: fedora-testovaci-balik.rpm: Header V3 DSA signature: NOKEY, key ID a575c4b8
/etc/Fedora.txt
---
balíček mandriva-testovaci-balik.rpm obsahuje
warning: mandriva-testovaci-balik.rpm: Header V3 DSA signature: NOKEY, key ID a575c4b8
/etc/Mandriva.txt
---
balíček openSUSE-testovaci-balik.rpm obsahuje
warning: openSUSE-testovaci-balik.rpm: Header V3 DSA signature: NOKEY, key ID a575c4b8
/etc/openSUSE.txt
---

Poněkud pokročilejší podmínky

Mezi verzemi distribucí se často přejmenovávají, rozdělují a slučují balíčky. Proto je výhodné mít k dispozici i rozlišování podle verze jednotlivých distribucí. Například, pokud chceme, aby se nějaká část kódu provedla jen v případě, že jde o distribuci openSUSE a zároveň se jedná o verzi novější než 10.2, pak použijeme tento kód:

%if 0%{?suse_version} > 1020
	%patch0
%endif

Tabulka proměnných pro jednotlivé distribuce

Distribution Variable
openSUSE Factory %if 0%{?suse_version} == 1031
openSUSE 10.3 %if 0%{?suse_version} == 1030
openSUSE 10.2 %if 0%{?suse_version} == 1020
SUSE Linux 10.1 %if 0%{?suse_version} == 1010
SLE{S,D} 10 %if 0%{?sles_version} == 10
SUSE Linux 10.0 %if 0%{?suse_version} == 1000
SUSE Linux 9.3 %if 0%{?suse_version} == 930
SLES 9 %if 0%{?sles_version} == 9
CentOS 5 %if 0%{?centos_version} == 501
RHEL 5 %if 0%{?rhel_version} == 501
Fedora 8 %if 0%{?fedora_version} == 8
Fedora 7 %if 0%{?fedora_version} == 7
Fedora 6 with Extras %if 0%{?fedora_version} == 6
Fedora 5 with Extras %if 0%{?fedora_version} == 5
Fedora 4 with Extras %if 0%{?fedora_version} == 4
Mandriva 2008 %if 0%{?mandriva_version} == 2008
Mandriva 2007 %if 0%{?mandriva_version} == 2007
Mandriva 2006 %if 0%{?mandriva_version} == 2006

Tabulka převzata, upravena a aktualizována z en.opensuse.org.

Porovnávací operátory nejsou samozřejmě omezeny jen na operátor ekvivalence (==), ale také jsou k dispozici operátory menší než (<) a větší než (>). Tyto operátory můžeme také skládat a sestavit tak operátor větší nebo rovno (>=), případně menší nebo rovno =<). Stejně tak můžeme také kombinovat jednotlivé podmínky a sestavit například následující konstrukci:

%if 0%{?suse_version} || 0%{?sles_version}
 %patch1 -p1
%endif

Která provede makro %patch vždy, když je balíček sestavován v prostředí openSUSE nebo SLES(D). U sestavování balíčků se lze také rozhodovat podle architektury a tyto podmínky lze samozřejmě také kombinovat ve složitější celky. Například takto:

%if 0%{?suse_version} == 1030
%ifarch x86_64
 %patch1
%endif
%endif

Makro %patch1 bude provedeno, jen když je balíček sestavován pro openSUSE verze 10.3 a cílová architektura je x86_64.

Kde sehnat závislosti?!

Často se stane, že si chcete udělat balíček na nový program a z ničeho nic zjistíte, že programů, na kterých tento program závisí, je obrovská spousta. To je ještě v pohodě, jednoduše je napíšete do BuildRequires nebo do Requires. V tom horším případě však zjistíte, že potřebné balíčky nejsou k dispozici v oficiálních stromech balíčků. Pokud máte štěstí, tak balíček který potřebujete, už vytvořil někdo jiný, kdo připravuje balíčky v rámci openSUSE Build Service. Pak máte několik možnosti, jak tyto balíčky zužitkovat. Můžete je zkopírovat do svého projektu pomocí příkazu osc copypac, který má následující syntaxi:

osc copypac home:jiny-balikar cool-balicek home:m4r3k cool-balicek

Což vytvoří identickou kopii balíčku u vás v home:m4r3k. To se hodí v případě, že hodláte balíček nějak významněji upravovat. Má to však tu nevýhodu, že zbytečně plýtváte strojový čas i místo na build serverech. Proto je k dispozici také příkaz osc linkpac, který provede nalinkování balíčku z jednoho projektu do jiného. Tam se balíček sestaví a bude k dispozici i pro váš projekt. Toto řešení také nabízí určitou míru volnosti. Pokud totiž ve svém nalinkovaném projektu vytvoříte soubor se stejným názvem jako je v tom původním, tak se použije ten váš. Můžete si tak třeba poupravit .spec soubor, aniž by se muselo udržovat několik kopií tarové koule se zdrojovými kódy.

osc linkpac home:jiny-balikar cool-balicek home:m4r3k cool-balicek

Vlastní .spec soubor vnutíte projektu tak, že si aktualizujete svou lokální kopii repozitáře pomocí příkazu osc up a přepnete se do adresáře s balíčkem (cd cool-balicek). Pak si vytvoříte třeba soubor cool-balicek.spec a v něm vlastní obsah. Častěji však využijete už hotový .spec soubor a jen si jej upravíte k obrazu svému. Stažení originálního souboru lze provést pomocí:

osc co home:jiny-balikar cool-balicek cool-balicek.spec

Nyní už stačí soubor jen otevřít ve svém oblíbeném editoru a dle libosti upravit. Soubor poté přidáme do projektu pomocí osc add cool-balicek.spec a výsledek pošleme na server pomocí osc commit. Balíček se nyní sestaví i s vašimi změnami. Tento způsob sice už tolik neplýtvá místem na disku, ale na druhou stranu stále plýtvá strojovým časem serverů. Proto je k dispozici i příkaz osc aggregatepac, který je vhodný v případě, že chceme balíček jen používat a nijak upravovat. Syntaxe je obdobná jako u předchozích příkazů.

osc aggregatepac home:jiny-balikar cool-balicek home:m4r3k cool-balicek

Stejně jakou u předchozích dvou příkazů, je i u tohoto příkazu poslední parametr cool-balicek nepovinný a v případě, že jej nepoužijete, tak se použije název stejný jako u zdrojového balíčku.

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 Build Service (OBS) aneb jak ho sbalit
Následující díl: OBS - 3 (backportujeme kernel a další balíčky)

Související články

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íč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
openSUSE 11.0

Odkazy a zdroje

Build Service
build.opensuse.org

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

Ilfirin avatar 25.6.2008 11:09 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Odpovědět | Sbalit | Link | Blokovat | Admin
Chtělo by to na ten osc nějaký GUI.
Pavel Stárek avatar 25.6.2008 11:30 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Celkem v pohodě se dá použít to webové rozhraní, ale asi v sobě nemá všechny možnosti.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
Ilfirin avatar 25.6.2008 11:31 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Tady jde spíš o pohodlnost. Webové rozhraní je přece jen pomalé a ne moc pohodlné (moc dat tam a moc dat zpátky, odezvy, vykreslování browserem atd. )
25.6.2008 12:19 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Jenže žádné GUI nebude rychlejší, protože tohle je způsobeno pomalostí OBS API. Vyzkoušej si Yabsc a uvidíš, že to není řešení.
Ilfirin avatar 25.6.2008 15:42 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Nefunguje mi to :-( (Program běží, ale nic nedělá a plní konzoli chybovýma hláškama).
25.6.2008 15:44 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
(Program běží, ale nic nedělá a plní konzoli chybovýma hláškama).
Což mi bez těch hlášek vůbec nepomůže. :D
Ilfirin avatar 25.6.2008 15:51 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
No, hlavní chybou je, že mě to nepozná :-). Všechny ostatní chyby se už jen od toho odvíjí (křik urllib).
michals@smrz:~> yabsc
user 'ilfirin' not found
Traceback (most recent call last):
  File "/usr/bin/yabsc", line 597, in run
    self.projects = self.bs.getWatchedProjectList()
  File "/usr/bin/yabsc", line 101, in getWatchedProjectList
    tree = ElementTree.fromstring(''.join(core.get_user_meta(self.apiurl, username)))
TypeError
25.6.2008 15:55 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Máš dobře nastavený konfigurák osc? Osc samotné ti funguje?
Ilfirin avatar 25.6.2008 16:01 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Ano. Ano.
Yabsc neumí oscrc vytvořit (skončí s chybou dřív, než vůbec vykreslí GUI), to jsem musel udělat ručně. Pak teda už naběhne GUI, ale stále se to ke mě nezná.
Ilfirin avatar 25.6.2008 11:22 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Odpovědět | Sbalit | Link | Blokovat | Admin
Příloha:
Mimochodem, osc funguje i ve Windows :-)
25.6.2008 11:48 stick | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
toto som prednedavnom riesil. ako to mas spravene? mas nainstalovany pod windowsami cely python aj s kniznicami alebo nejako cez cxFreeze?
0118 999 881 999 119 725 3
Ilfirin avatar 25.6.2008 12:24 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Pouze Python. Ale vzhledem k tomu, že Python je můj koníček, tak jej považuji už za základ. Pak už jen stáhnout zdrojáky a pustit "python osc-wrapper". Trochu mě vystrašilo, že konfiguraci bude ukládat do .. a zvrtal ž v mém jméně. Ale nakonec to v tom adresáři opravdu je, takže to byla chyba jen v zobrazení.
25.6.2008 15:20 stick | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
Aha, ja som sa pokusal pomocou cxFreeze vyrobit binarku pre windows, aby sa user nemusel lopotit s celym pythonom, ale nakoniec som na niecom stroskotal. Uz si presne nepamatam. Kazdopadne by to bolo fajn, keby to slo ...
0118 999 881 999 119 725 3
Ilfirin avatar 25.6.2008 15:42 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
No, metoda s py2exe by snad zafungovat měla. Schválně zkusím.
Ilfirin avatar 25.6.2008 16:09 Ilfirin | skóre: 32 | blog: ilfblog | Liberec
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
No, vypadá to, že díky absenci rpm, build apod. to stejně na Windows fungovat nebude. Tak nic. PS.: Py2exe také nezafungoval.
25.6.2008 16:16 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
No tyhle věci jsou potřeba jen k osc build, atd...
26.6.2008 01:17 stick | skóre: 10 | Praha
Rozbalit Rozbalit vše Re: openSUSE Build Service (OBS) - 2
jojo presne na tom som skoncil ja. da sa to (rpm a podobne ...) zo zdrojakov vykuchat ale to sa mi uz nechcelo :)
0118 999 881 999 119 725 3

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