Debian - balíčky s různými volbami pro sestavení

Debian - balíčky s různými volbami pro sestavení
« kdy: 10. 03. 2015, 11:50:33 »
Ahoj,

po mnoha letech s distribucemi založenými na RPM a BSD porty přecházím na některých počítačích na Debian. Chtěl bych položit jeden související dotaz.
Řešili jste někdy výrobu/úpravu balíčku, který by měl měl různé volby jeho sestavení? Typicky jde o rozsáhlejší programy, které mají hromady parametrů pro ./configure, co ovlivňují kompilaci a linkování s externími knihovnami.
Samozřejmě jde parametry explicitně vypsat (upravit) v debian/rules, který se zdá být normální Makefile, a upravit debian/control soubor, aby reflektoval aktuální závislosti (položky Build-Depends a Depends).
Spíš jsem měl na mysli univerzálnější řešení, co by umožnilo mít balíček, který půjde pomocí nějakých parametrů volitelně sestavit např. s podporou GUI, knihovnami s non-GPL licencemi atp. Ideálně bez toho, aby muselo být balíčků několik (with-gui, non-free..).

Našel jsem používanou proměnnou DEB_BUILD_OPTIONS, do rules by se pak daly přidat podmínky, co upraví prarametry pro ./configure "CONFIG += ..". To se zdá být jednou z variant, ale jak potom vyřešit, aby v control souboru byly ty správné závislosti, které se podle vyhodnocení podmínek budou měnit.

Jak tohleto řešíte?
Příp. příklad balíčku, kde je to řešeno (a odkud bych se mohl inspirovat správným řešením "Debian Way" :)).

Tak nějak jsem hledal na Debian Wiki, díval se i do debian-policy manuálu.. ale jsem z toho popravdě zmatený jak jelen.
Obecně vzato chápu jednotlivé věci, ale přijde mi to balíčkování celkově strašně složité.. helper tool, co volá další helper tool, který spustí finální helper tool.. můžu použít asi 5 nástrojů na samotné sestavení.. něco začíná na dh, něco na dpkg a pak nějaký builder.. Snad se to časem poddá :)

Díky,

Michal


Jakub L

Re:Debian - balíčky s různými volbami pro sestavení
« Odpověď #1 kdy: 10. 03. 2015, 13:11:02 »
Řeší se to pomocí Gentoo...

Honza

Re:Debian - balíčky s různými volbami pro sestavení
« Odpověď #2 kdy: 10. 03. 2015, 13:50:11 »
Ahoj,

  nevim, jestli je nejaky standardizovany postup. Osobne to resim skriptem, ktery pro kazdou verzi baliku nakopiruje do build stromu novou verzi debian subadresare (tj. s jinym predpripravenym rules a control souborem). Pak tim skriptem vyrabim jednu verzi za druhou. Je to staticke, a dost blbovzdorne. Mozna existuje neco lepsiho, rad si to poslechnu, ale prijde mi, ze je nutne menit primarne jen rules a control (a v tom muze byt pomerne dost zmen - napr. ty Depends ...). Tim skriptem vyrabim rovnou i .rpm a .tgz verze (ale to uz je jina).

Sten

Re:Debian - balíčky s různými volbami pro sestavení
« Odpověď #3 kdy: 10. 03. 2015, 13:53:03 »
V Debianu se to dělá tak, že pro různé volby sestavení jsou různé balíčky, přičemž balíčky, které mají nějaké volby navíc, jsou označeny „Provides: balíček-bez-těch-voleb“. Společná data jsou pak v dalším balíčku. Typický příklad by byly balíčky Vimu: vim, vim-nox, vim-gtk, vim-gnome, vim-athena; společná data v vim-runtime (platformově nezávislá data) a vim-common (platformově závislá data).

Re:Debian - balíčky s různými volbami pro sestavení
« Odpověď #4 kdy: 10. 03. 2015, 16:31:57 »
Řeší se to pomocí Gentoo...

:) Jj, to je také zajímavá distribuce..


Ahoj,

  nevim, jestli je nejaky standardizovany postup. Osobne to resim skriptem, ktery pro kazdou verzi baliku nakopiruje do build stromu novou verzi debian subadresare (tj. s jinym predpripravenym rules a control souborem). Pak tim skriptem vyrabim jednu verzi za druhou. Je to staticke, a dost blbovzdorne. Mozna existuje neco lepsiho, rad si to poslechnu, ale prijde mi, ze je nutne menit primarne jen rules a control (a v tom muze byt pomerne dost zmen - napr. ty Depends ...). Tim skriptem vyrabim rovnou i .rpm a .tgz verze (ale to uz je jina).

V tomhle duchu jsem o to taky přemýšlel.. Nějak si automatizovat víc verzí řídících souborů.
U rpmbuildu se to řeší přes parametry při kompilaci --with/--without s odpovídajícími podmínkami (http://www.rpm.org/wiki/PackagerDocs/ConditionalBuilds) takže na všechno stačí jeden .spec soubor. Hledal jsem tu něco podobného, ale i varianta s několika adresáři "debian" bude nejspíš schůdná.

V Debianu se to dělá tak, že pro různé volby sestavení jsou různé balíčky, přičemž balíčky, které mají nějaké volby navíc, jsou označeny „Provides: balíček-bez-těch-voleb“. Společná data jsou pak v dalším balíčku. Typický příklad by byly balíčky Vimu: vim, vim-nox, vim-gtk, vim-gnome, vim-athena; společná data v vim-runtime (platformově nezávislá data) a vim-common (platformově závislá data).

Aha, to je také dobrý tip.. Sestavit to rovnou víckrát se všemi volbami a doladit "Provides" tak, aby se to případně nehádalo a chovalo korektně při aktualizacích. Mrknu se na ten vim a rozdělování balíčku obecně (resp. vícenásobné deklaraci Package: v debian/control).

Děkuju za vaše příspěvky,

Michal