Nove skripty ridici muj buildsystem

Muj buildsystem… pisu o nem celkem dost, ale zatim jste nevideli vlastne nic, krom vysledku — zatim jen vzdy vysledky me prace. Rozhodl jsem se nabidnout par z mych drobnych skriptiku k nahlednuti.

davna historie

Spolu s tim, jak se zvetsovalo mnozstvi balicku a virtualnich buildserveru, o ktere jsem se musel starat, zvetsovalo se i mnozstvi prace. Ja sam jsem neuveritelne, ale neuveritelne liny clovek, ktery radeji stravi dva dny vymyslenim a hodinu programovanim automatizace, nez aby tutez praci delal nekolikrat a stale dokola. Tak vznikl muj system, puvodne pojmenovany mdvpushpack. Ten se skladal ze dvou skriptu. Prvni byl vlastni skript mdvpushpack a druhy jmenem mkrepo.

  • mdvpushpack slouzil jako ridici skriptik, asi 30 radku, ktery spustil preklad .specsouboru a pak zavolal mkrepo.
  • mkrepo byl puvodne pouze procedura uvnitr mdvpushpack, ktera prekopirovala balicky do adresare repozitare, vytvorila hdlisty a sesynchronizovala s internetovym ulozistem… Sladke casy, kdy to melo 20 radku.

nedavna historie

Postupem casu jednoduchy skript mdvpushpack dostal nove vlastnosti. Snad napovi napoveda:

./mdvpushpack
Posílá balíček jménem "jmeno" do buildsystému a poté synchronizuje repozitář. 

    Pouziti: ./mdvpushpack [volby] jmeno[.spec]

Volby:
    -h	Vypíše tuto nápovědu
    -i  Import SRPM balíčku. Smaže obsah ~/rpm/SOURCES, BUILD, BUILDROOT a následně
	importuje SRC.RPM do systému
    -c	Nebude čistit systém od -devel balíčků (pouze master-node)
    -C  Nebude čistit systém od -devel balíčků (zadny z nodu)
    -r	Nebude se synchronizovat repozitář
    -t	Test: pouze se otestuje, jestli je možné balíček přeložit.
	Nebude se čistit systém ani synchronizovat repozitář
	Odpovídá použití mdvpushpkg -r -C
    -g  Parametr pri buildu velke hry
    -x  Build Xfce4.8 balicku
    -b repo   nebude pouzit standardni repozitar mageia/verze/arch
              ale repozitar distro/verze/repo/arch

Je snad jasne, ze nyni neni nutne udavat jmeno s priponou .spec (ackoli je to mozne 😉 ). Navic je mozne pouze otestovat prelozitelnost balicku na vsech nodech, system umi vytvorit build pro ruzne repozitare (napr. tedy je mozne udelat repozitar jen pro konkretni program, jen repozitar pro konkretniho cloveka atd.

Volby -g, -x a -b se tak predavaji skriptu mkrepo, jak jiste chapete, vlastnimu prekladu je jedno, kam bude balicek nakonec umisten — o to se stara prave skript mkrepo. Skript sam pozna, zda-li je na master-node ze ktereho se delaji zalohy SRPMS, SPEC souboru, ve kterem se generuji napr. repozitare pro Esmsku ci wibom a dalsich, a nebo na sekundarnim (tam se na internet distribuuji jen vysledna RPMS).

Tato vlastnost, poznat, zda-li je skript na master-node ci na sekundaru a pokud je to treba zmenit sve chovani, je zasadni pro vsechny skripty systemu a vsechny skripty ji maji implementovanou (samozrejme, pokud tuto vlastnost vyuziji). Skripty jsou totiz vzdy umisteny pouze na master-node, ze ktereho jsou pomoci NFS exportovany do vsech ostatnich (sekundarnich) buildserveru.

Navic vzhledem k me rostouci nechuti delat cokoli rucne a manualne, jsem dlouhou dobu nektere aspekty repa neresil. Napriklad:

  • V repozitari bylo vice verzi stejneho balicku (napr. LibreOffice bylo v repozitari v 6 versich!), coz nejen nevypadalo dobre ve vypisu urpmq, ale i to zabiralo velke mnozstvi mista jak u me na lokalnich mirrorech, tak na hostingu.
  • Chybel system pro porovnani verzi (je verze 3.4.99 novejsi nez verze 4. ? Ano, my to vime. Ale jak donutit pocitac, aby to porovnal spravne?)
  • Toto byly problemy beznemu uzivateli zcela skryte. Ovsem viditelny problem (a casto vycitany) byl totalni neaktualnost seznamu obsahu meho repozitare. Sam uznavam, ze seznam vsech RPM v repozitari je spise ostudny, nikoli uzitecny.

Jak vse fungovalo? Velice pekne.

Master-node (MGA-1-64bit)

  • Preklad balicku dane distribuce-verze-architektury
  • Jsou zde umisteny fyzicky vsechny skripty, ktere jsou pres NFS exportovany na vsechny ostatni servery
  • Slouzi jako prvni instance a test vsech balicku
  • Prvni preklady se provadi prave zde
  • Vsechny noarch balicky (nezavisle na architekture) se do zvlastnich repozitaru (letadla pro flightgear, wibom (perl) a esmska (java)) berou prave z prekladu na tomto build-node
  • Slouzi jako prekladovy node pro 64bit hry do herniho repozitare
  • Slouzi jako zakladni synchronizacni bod pro internetovy repozitar — krom vlastnich balicku si na internet ukladam i SRPMS a SPEC soubory. A to prave ty z tohoto repozitare

Secondary-node (MGA-1-32bit)

  • Vsechny vlastnosti secondary-node, jen navic slouzi jako prekladovy node pro 64bit hry do herniho repozitare

Secondary-node (MGA-2-*)

  • Adresar se skripty je pripojen pomoci NFS z Master-node
  • Preklad balicku dane distribuce-verze-architektury

soucasnost

Vzhledem k tomu, ze jsem jiz opustil Mandriva Linux (pouze se vyskytuji na foru, ale nedelam jiz pro tuto distribuci balicky), rozhodl jsem se ke kompletni revizi meho buildsystemu.

  1. Promazal jsem mrtvy kod — smazal jsem zakomentovane casti kodu, ktere se nepouzivaly, jen zabiraly misto.
  2. Cely mdvpushpack jsem prejmenoval na ptsbuild. Jednotlive komponenty jsou ptsbuild, ptsmkrepo, ptsmkweb, pts... (jo, je to trochu egocentricke, ale… 😉 )
  3. Napsal jsem sadu dalsich skriptu, ktere budou resit vsechny problemy, ktere jsem az doted ignoroval — skripty ptscompver, ptsmkweb a ptstweetit,
  4. Nove balicky budu automaticky oznameny na mem twitteru  😉

Zajima vas, jak vypadaji skripty ptscompver, ptsmkweb? Budete chtit cist dalsi prispevek?

2 komentáře u „Nove skripty ridici muj buildsystem“

    1. OK, mam jeste asi 200 fotek z Ostravske ZOO, kde jsme byli minuly tyden. Ale jakmile me prestanou bavit fotky, vrhnu se na clanek. Pokusim se to udelat… easy-to-understand 😉 Popisu nejake vedlejsi skripty a uvidime, kam az se dostaneme 🙂

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *