Linux E X P R E S

Facebook

Copr pro vývojáře

copr-fedora_1.png

Minule jsme se na Copr, službu pro tvorbu repozitářů (nejen) pro Fedoru, podívali z pohledu běžného uživatele. Dnes si Copr představíme z pohledu vývojáře, nebo tedy spíše „balíkáře“ – člověka, který balíčky v Copru přímo vytváří.


Stručně se podíváme na to, jaké balíčky lze v Copru sestavovat a hlavně na to, jak je možné balíčky vytvářet automaticky, při každé novince ve vaší oblíbené aplikaci.

Před tím, než se rozhodnete začít s tvorbou balíčků v Copru, přečtěte si pečlivě, co je v Copru povolené (resp. zakázané) balíčkovat. Software, který chcete v Copru balíčkovat, například musí být zveřejněn pod některou ze „schválených“ licencí apod. Obecně: pokud není daný balíček z důvodu licence obsažený v repozitářích Fedory, nebude jej moci zabalíčkovat ani v Copru.

K tomu, abyste mohli začít s Coprem, stačí málo. Je potřeba mít vytvořený FAS účet, s ním se pak přihlásíte na stránkách Copru a vytvoříte si nový projekt. Pak stačí jen vyplnit jeho název a nějaké základní informace pro potenciální uživatele vašich balíčků. Dále je třeba také vybrat, pro jaké systémy a jaké verze chcete balíčky vytvářet. Na výběr jsou podporované verze Fedory, ale můžete vytvořit i repozitáře pro RHEL a CentOS (ty se skrývají pod zkratkou EPEL) a nově Copr podporuje také distribuci Mageia.

Vytváříme balíčky

Projekt, a tedy i Copr repozitář, máme vytvořený, teď je třeba do něj dostat nějaké balíčky. A to je právě ta již poněkud těžší část.

Situaci si můžete ulehčit ještě v případě, pokud jste se rozhodli vytvářet balíčky pro program napsaný v Pythonu nebo Ruby, který je zároveň dostupný v PyPI nebo RubyGems. U takových programů vám totiž Copr umožní vytvořit balíček rovnou automaticky pomocí nástrojů pyp2rpm respektive gem2rpm. Nemáte sice 100% záruku, že se takový automatický „převod“ podaří, ale pro většinu „normálních“ Python/Ruby balíčků je možné vytvořit RPM balík zcela automaticky.

Pokud váš program není napsaný v Ruby nebo Pythonu, případně pokud automatika selže, budete si muset balíček připravit ručně. Přesný popis tvorby RPM balíčků by ale nezabral pár odstavců v tomto článku, ale spíše celou knihu, proto vás v tomto případě musím odkázat na tento návod na tvorbu balíčků pro Fedoru. Zjednodušeně budete muset pro svůj program napsat SPEC soubor, který (mimo jiné) popisuje způsob vytvoření RPM balíčku z přiložených zdrojových kódů. Jak balíčkovat (nejen) pro Fedoru se můžete dozvědět také ze záznamu workshopu Mira Hrončoka na loňském InstallFestu.

S vybraným projektem na PyPI nebo RubyGems, případně s vytvořeným zdrojovým RPM balíkem (SRPM, což je v podstatě jen archiv se SPEC souborem a zdrojovými kódy), už jen musíte vytvořit nový „Build“. Pro ten máte celkem více možností:

  • From URLsUpload SPRM vytvoří RPM balíčky z vašeho SRPM balíčku. Ten si Copr buď stáhne ze zadané URL nebo ho můžete přímo nahrát.
  • Tito je nástroj, který slouží pro snadnou tvorbu RPM balíčků z Git repozitářů. Pokud jej ve svém projektu používáte, může Copr balíčky vytvářet automaticky – stačí mu k tomu URL vašeho repozitáře.
  • Mock SCM umožňuje automaticky vytvářet balíčky funguje z Git nebo SVN repozitáře. Stačí pokud je v repozitáři SPEC soubor a Copr sám vytvoří RPM balíček.
  • PyPIRubyGems pak slouží pro automatickou tvorbu Python a Ruby balíčků popsanou výše.

Pokud nechcete každý build „klikat“ ve webovém rozhraní, můžete pro práci s Coprem využít také jednoduchý konzolový nástroj copr-cli. Ten získáte nainstalováním stejnojmenného balíčku a umí vše, co umí webové rozhraní Copru. (A pokud byste si snad chtěli naprogramovat nějakou vlastní aplikaci pro práci s Coprem, tak je k dispozici i REST APIPythoní knihovna.)



Automatické sestavování balíčků

Hlavním úkolem Copru samozřejmě není sestavit jednou váš balíček. Copr vám nejlépe poslouží, pokud chcete balíčky vytvářet často, obvykle automaticky po každé změně. K tomu v webovém rozhraní Copru slouží záložka „Packages“. Zde si můžete vytvořit nový „balíček“, který se bude vytvářet automaticky – buď pomocí Tito/Mock SCM z repozitáře nebo z PyPI/RubyGems.

Python a Ruby balíčky se budou vytvářet automaticky při aktualizaci balíčků v PyPI/RubyGems, u projektů v Gitu/SVN si musíte zaregistrovat „Webhook“, který spustí nový build například po každém pushnutém commitu. (Nastavení webhooků záleží na službě, u níž je hostovaný daný repozitář, v Copru naleznete nápovědu pro postup u PagureGithubu.)

Pro automatické vytváření balíčků v Copru je možné využít také různé nástroje třetích stran. Jedním z nich je například dgroc, který ze zadaného Git nebo Mercurial repozitáře a SPEC souboru vytvoří SRPM balíček a ten pošle do Copru. Výhodou je, že dgroc si SPEC soubor drží „sám“ – nemusí být v Git repozitáři. Můžete tak vytvářet balíčky i z Git repozitářů, ke kterým máte přístup jen pro čtení. Dgroc je jen (relativně) jednoduchý Python skript, ale pokud jej budete spouštět pravidelně (třeba pomocí cronu), bude nový balíček vytvářet automaticky při každé změně.

Tolik tedy k tvorbě balíčků v Copru. Nyní už jen stačí, abyste si našli nějaký zajímavý program, který není ve Fedoře a připravili ho v Copru. A když vám to půjde, můžete se i rozhodnout nezůstat u Copru, ale dostat daný balíček přímo do Fedory a stát se jeho správcem.

Diskuze (0) Nahoru