Tento týden byl pro mě určitě jedením z nejintenzívnějších z hlediska studia toho, jak ve Fedoře funguje buildovací systém/proces. Konečně jsem byl schválen coby balíčkovač, což znamená, že budu mít více zodpovědnosti. Naneštěstí jsou instrukce ve wiki mnohdy rozesety na různých místech a člověk toho musí spoustu přečíst a hodně se vyptávat, aby nedělal chyby. Pro začátečníka je to spousta informací a i s otázkami je nutné si dávat záležet, abyste dostali správné odpovědi.

Poznámka: Článek původně vydal na svém blogu Axilleas Pipinellis s licencí CC BY-NC-ND 3.0 jako I got approved as a packager, now what?

Začínám si myslet, že je to záměr – průběžné testování znalostí o tom, jak věci ve Fedoře fungují. Bez práce nejsou koláče.

Myslím, že se mi podařilo většině věcí porozumět, a níže celý proces popíšu v naději, že by to mohlo pomoci lidem, kteří se v budoucnu ocitnou v podobné situaci jako já. Popíšu celý postup až po odeslání balíčku, včetně výstupů mnoha příkazů, které jsem dříve nepoužíval. Tato wiki stránka vše shrnuje, ale přečtěte si ji, až proces pochopíte. K dispozici je také hezký průvodce workflow balení rpm, který celý postup ukazuje od úplného počátku. Pěkné čtení.

S laskavou pomocí lidí na #fedora-devel jsem to dokázal, takže vám všem děkuji 🙂

Co dělat, až vás schválí

Gratuluji, povýšili vás na balíkáře! Po schválení je potřeba udělat pár věcí, které lze shrnout do následujících dvou kroků:

  1. Požádejte o SCM
  2. Použijte fedpkg k poslání, sestavení a nahrání svého balíku [commit, build, upload]

Podívejme se na to podrobněji.

Žádost o SCM

Povinná četba: Package SCM admin requests.

Mimochodem, SCM znamená Source Code Management. Po schválení balíku je potřeba udělat dvě věci, které se týkají bugzilly.

  1. Nastavit příznak fedora-cvs na ?
  2. Přidat nový komentář s následujícím vyplněným formulářem:
    New Package SCM Request
    =======================
    Package Name: 
    Short Description: 
    Owners: 
    Branches: 
    InitialCC:
  3. Dát  Save Changes u 1 i 2. Podívejte se, jak jsem to udělal já.

Poznámka: Pokud s Bugzillou začínáte jako já, řeknu vám malé tajemství. Proveďte všechny změny, které potřebujete, dokonce můžete i vložit komentář, a pak klikněte na Save Changes, což uloží VŠECHNY změny, které jste udělali. Jsou na to dvě tlačítka: jedno v pravém horním rohu a jedno pod formulářem Additional Comments. Fungují obě stejně. Nezní to jako něco světoborného, ale já o tom nevěděl, takže jsem nejdřív zanechal komentář a pak změnil příznak, a e-mailové oznámení se odeslalo dvakrát.

Pošlete, sestavte a nahrajte [commit, build, upload] svůj balíček

Povinná četba: Add Package to Source Code Management (SCM) system and Set Owner.

Po odeslání žádosti o SCM dostanete několik e-mailů z Bugzilly a PackageDB, které vám poví, že můžete pokračovat. Pokud se podíváte na cgit, uvidíte prázdný repozitář.

rubygem-bootstrap-sass.git-bare-2013-07-20-14-28-50Celý sestavovací proces používá fedpkg a příkazy gitu, takže pokud s gitem neumíte, doporučuji navštívit Fedora wiki.

Kroky s fedpkg a git

  1. Vytvořte nový adresář, abyste měli ve svých balíčcích pořádek.
    mkdir ~/fedora-scm
    cd ~/fedora-scm
  2. Naklonujte nově vytvořený repozitář gitu.
    fedpkg clone rubygem-bootstrap-sass
    cd rubygem-bootstrap-sass

    Obsah konfiguračního souboru gitu vypadá takto:

    [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
    [remote "origin"]
      url = ssh://[email protected]/rubygem-bootstrap-sass
      fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
     remote = origin
     merge = refs/heads/master
  3. Importujte src.rpm:
    fedpkg import /var/lib/mock/fedora-rawhide-x86_64/results/rubygem-bootstrap-sass-f20.src.rpm

    Měli byste vidět něco jako tohle:

    Uploading: 4f0c887ea7cd95812edcc6b8b01b9329  bootstrap-sass-2.3.2.1.gem
    ######################################################################## 100.0%
    Uploaded and added to .gitignore: bootstrap-sass-2.3.2.1.gem
    ...
    diff status of all files to be commited
    ...
    New content staged and new sources uploaded.
    Commit if happy or revert with: git reset --hard HEAD

    Teď jsou v adresáři tři soubory:

    -r--r--r--. 1 axil axil 86528 Jul 20 15:30 bootstrap-sass-2.3.2.1.gem
    -rw-r--r--. 1 axil axil  2314 Jul 20 15:30 rubygem-bootstrap-sass.spec
    -rw-r--r--. 1 axil axil    61 Jul 20 15:30 sources

    sources je textový soubor se zdrojovým balíkem (gem) a jeho hashem v md5. Všimněte si, že název gemu byl automaticky umístěn do .gitignore. Když spustíte git status, uvidíte, že v přípravném prostoru jsou tři soubory:

    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       modified:   .gitignore
    #       new file:   rubygem-bootstrap-sass.spec
    #       modified:   sources
    #

    Pokud se změnami souhlasíte, pošlete je [commit a push] do hlavní [master] (rawhide) větve. Použijte ID Bugzilly z vaší žádosti o kontrolu. Nebudou to parsovat žádné skripty, je to jen pro referenci.

    git commit -m "Initial import (#982679)."
    git push

    Pokud se nyní znovu podíváte na cgit, uvidíte poslané změny.

rubygem-bootstrap-sass.git-init-2013-07-20-15-58-58

Sestavování na koji

Nakonec zadejte tento příkaz pro spuštění sestavování na koji:

fedpkg build

Výstup:

Building rubygem-bootstrap-sass-2.3.2.1-1.fc20 for rawhide
Created task: 5631690
Task info: http://koji.fedoraproject.org/koji/taskinfo?taskID=5631690
Watching tasks (this may be safely interrupted)...
5631690 build (rawhide, /rubygem-bootstrap-sass:md5): open (arm02-builder11.arm.fedoraproject.org)
5631691 buildSRPMFromSCM (/rubygem-bootstrap-sass:md5): open (buildvm-25.phx2.fedoraproject.org)
5631716 buildArch (rubygem-bootstrap-sass-2.3.2.1-1.fc20.src.rpm, noarch): open (buildvm-01.phx2.fedoraproject.org)
5631691 buildSRPMFromSCM (/rubygem-bootstrap-sass:md5): open (buildvm-25.phx2.fedoraproject.org) -> closed
0 free  2 open  1 done  0 failed
5631716 buildArch (rubygem-bootstrap-sass-2.3.2.1-1.fc20.src.rpm, noarch): open (buildvm-01.phx2.fedoraproject.org) -> closed
0 free  1 open  2 done  0 failed
5631737 tagBuild (noarch): closed
5631690 build (rawhide, /rubygem-bootstrap-sass:md5): open (arm02-builder11.arm.fedoraproject.org) -> closed
0 free  0 open  4 done  0 failed

5631690 build (rawhide, /rubygem-bootstrap-sass:054f742970e4b930bc55a5d3802fb31d26c57d0d) completed successfully

Bude vám poslán e-mail, jakmile se sestavování dokončí a balíček se automagicky objeví v repozitářích rawhide. Chcete-li balíček protlačit do stabilní verze Fedory, čtěte dál.

Předložení balíčku do aktuálních verzí Fedory

Tento krok je volitelný – týká se pouze balíčků, u kterých chcete udržovat i jiné verze než pro rawhide. Přepněte na příslušnou verzi pomocí fx, kde x je daná verze Fedory:

fedpkg switch-branch f19

Příkaz git branch -r zobrazí dosud používané verze:

origin/HEAD -> origin/master
origin/f19
origin/master

Tip: Doporučuji používat shell, který vám ukáže, ve které jste větvi. Já mám rád zsh, a když zkusíte oh-my-zsh, budou to podporovat téměř všechna přibalená témata. Moje vypadá takto:

zsh-git-branchZískejte změny z větve master a sestavte jako předtím:

git merge master
git push
fedpkg build

Protlačte svůj balíček na bodhi

Pokud máte na lokálním stroji stejné uživatelské jméno jako na FAS, tento krok přeskočte. Tato volba není v návodu na wiki uvedená – našel jsem ji zde.

echo "export BODHI_USER=axilleas >> ~/.zshrc"
source ~/.zshrc

Nahraďte .zshrc konfiguračním souborem svého shellu.

Poslední krok je poslat balíček na bodhi, aby byl zpracován a dostal se do repozitářů. Máte dvě možnosti: příkazovou řádku a webové rozhraní bodhi. Vyberte si, co vám více vyhovuje.

Pokud dáte přednost webovému rozhraní, následujte tento odkaz, přihlaste se a vyplňte prázdná pole.

Každá sekce mát kontextovou nápovědu, která vysvětluje, co je potřeba vyplnit, ale podívejme se na to i zde:

Popis Volba Význam
Package rubygem-bootstrap-sass Začněte psát název svého balíčku a doplní se automaticky.
Type newpackage Protože jde o první balíček, zvolil jsem newpackage.
Request Testing Aby balíček přistál nejprve v updates-testing, než se dostane do stabilní (doporučené).
Bugs 982679 ID vaší žádosti o kontrolu z Bugzilly. Stav se tak bude měnit automaticky.
Notes Popis balíčku Další poznámky, např. proč jste dělali tuto aktualizaci, jaké byly opraveny chyby, jde-li o opravu chyb, atd.
Suggest Reboot Zrušte zaškrtnutí Doporučení, jestli má uživatel po instalaci provést restart systému.
Enable karma Zaškrtněte Povolit automatizaci požadavku na aktualizace na základě zpětné vazby uživatelů.
Threshold to stable 3 Výchozí hodnota. 3 je potřeba, aby to prošlo do stabilních repozitářů.
Threshold for unpushing -3 Dostane-li 3 body, odmítne balíček z testing.

Druhou možností je provést aktualizaci v příkazové řádce. To funguje jen u větví jiných než rawhide. Zkusíte-li rawhide, fedpkg vypíše varování.

Když spustíte níže uvedený příkaz, budete muset upravit šablonu pomocí výchozího systémového editoru, což je vi. Chcete-li jiný, např. vim, použijte příkaz export. V rámci větve f19 proveďte:

export EDITOR=vim
fedpkg update

Šablona vypadá takto:

[ rubygem-bootstrap-sass-2.3.2.1-1.fc19 ]

# bugfix, security, enhancement, newpackage (required)
type=

# testing, stable
request=testing

# Bug numbers: 1234,9876
bugs=

# Description of your update
notes=Here is where you give an explanation of your update.

# Enable request automation based on the stable/unstable karma thresholds
autokarma=True
stable_karma=3
unstable_karma=-3

# Automatically close bugs when this marked as stable
close_bugs=True

# Suggest that users restart after update
suggest_reboot=False

Až provedete příslušné změny, soubor uložte a zavřete. Budete dotázáni na heslo k FAS, aby se mohl proces dokončit, a výstup bude vypadat podobně jako tento:

================================================================================
     rubygem-bootstrap-sass-2.3.2.1-1.fc19
================================================================================
    Release: Fedora 19
     Status: pending
       Type: newpackage
      Karma: 0
       Bugs: 982679 - Review Request: rubygem-bootstrap-sass - Twitter's
           : Bootstrap, converted to Sass and ready to drop into
           : Rails or Compass
      Notes: Initial commit
  Submitter: axilleas
  Submitted: 2013-07-20 15:20:18

  https://admin.fedoraproject.org/updates/rubygem-bootstrap-sass-2.3.2.1-1.fc19

Po odeslání projde váš balík těmito stavy.

Časté dotazy

Tohle je pár otázek, na které jsem v průběhu tohoto procesu hledal odpovědi. Pomohli mi na #fedora-devel, za což jim znovu děkuji.

Otázka: Během fedpkg import src.rpm musím poskytnout foo-f20.src.rpm nebo bude fungovat i foo-f19.src.rpm?

Odpověď: Je možné vzít jakýkoliv platný srpm z Fedory/RHEL, bez ohledu na to, pro kterou verzi to bylo vytvořeno.

Otázka: Co když omylem spustím fedpkg update pro rawhide (větev master)?

Odpověď: Nové verze fedpkg by to měly odmítnout.

Otázka: Pokud se během kontroly balíčku zvýšila verze vydání specifikace, měl bych před posíláním na cgit vrátit verzi na 1?

Odpověď: Ne, to není potřeba.

Závěr

Bylo to docela dobrodružství a hodně jsem se toho naučil. Jsem si jistý, že jde jen o špičku ledovce a čeká mě toho ještě mnohem víc. Tento zápisek mi trvalo napsat celý den, protože jsem postup zaznamenával za pochodu – doufám, že to někomu může pomoci. Najdete-li nějakou chybu nebo chcete-li něco dodat, komentujte.