Debian repository

Z thewoodcraft.org
Stránka byla naposledy editována 5.10.2023 (Vytváření 29. září 2023)

Tahle stránka není můj první text na téma balíčkovacího systému Debianu. Na https://cs.wikibooks.org visí již od roku 2007 mimo jiné:

Většina informací je dodnes platných, přestože jsem poslední editaci udělal v roce 2009. Nebylo to potřeba víc rozvíjet, protože o rok dřív sepsal podrobný manuál o přípravě balíků pro Debian v češtině Michal Čihař pro server abclinuxu.cz

O šest let později, v říjnu 2014, jsme si vyměnili několik mailů, ale nepodařilo se nám sejít a pak už jsem musel řešit jiné věci než jak se stát maintainerem Debianu. Znovu jsem se k tomu vrátil až teď. Byl jsem nemile překvapen, když jsem zjistil, že z hlavní distribuce Debianu zmizel ocrodjvu – zcela zásadní nástroj pro vytvoření textové vrstvy DjVu souboru pomocí OCR.

A důvod?

Původní verze nástrojů naprogramoval Jakub Wilk pro Python verze 2.x, jenže Debian verze 12 Bookworm definitivně přešel na Python verze 3.x a veškerý software, který využíval starší verzi 2.x byl spolu s ní odstraněn. Tím pádem zmizely, resp. přestaly fungovat tyto nástroje:

Uživatelé zvyklé na „stable” verzi Debianu, to tedy může nemile zaskočit, až přejdou z Debianu 11 Bullseye na novou „stable” verzi, kterou je od 22. června 2023 Debian 12 Bookworm.

Balíčkovací systém Debianu APT naštěstí umožňuje rychlé řešení podobné situace – stačí do souboru /etc/apt/sources.list přidat následující řádky:

deb [trusted=yes] https://deb.debian.org/debian bullseye main contrib non-free
deb-src [trusted=yes] https://deb.debian.org/debian bullseye main contrib non-free

deb [trusted=yes] http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src [trusted=yes] http://deb.debian.org/debian bullseye-updates main contrib non-free

deb [trusted=yes] http://deb.debian.org/debian bullseye-backports main contrib non-free
deb-src [trusted=yes] http://deb.debian.org/debian bullseye-backports main contrib non-free

deb [trusted=yes] https://security.debian.org/debian-security/ bullseye-security main contrib non-free
deb-src [trusted=yes] https://security.debian.org/debian-security/ bullseye-security main contrib non-free

Pak už stačí jenom zaktualizovat databázi dostupných instalačních balíků příkazem apt-get update a software z verze bullseye dostupný.

Ovšem jen dokud se nedostane nějaký balík do konfliktu! Pokud verze vámi používaného software bude vyžadovat balík A, který bude v konfliktu s balíkem B, nepůjde B nainstalovat, dokud balík A (a s ním i veškerý software co na něm závisí) neodstraníte!

Naštěstí se našel člověk, který kód aplikace ocrodjvu přepsal pro Python verze 3 a přepsal i kód didjvu a ocrodjvu které na něm závisí. Svůj kód veřejně vystavil na githubu, jenže jím upravené verze se zatím (5.10.2023) do oficiálních repozitářů Debianu nedostaly. Oficiálním vývojářem ocrodjvu je totiž stále Jakub Wilk, ovšem jeho upstream na githubu obsahuje stále jenom kód pro Python2.x

Nezbylo tedy, než se po letech opět ponořit do internetové bažiny a znovy vyhledat ty správné odpovědi na otázky:

  1. „Jakým způsobem se teď připravují instalační balík pro Debian?”
  2. „Co se změnilo na postupu, jakým se dostávají do distribuce Debianu?”
  3. „Změnilo se něco na postupu, jak se dělá vlastní veřejně dostupný repozitář debianích balíků pro zájemce, přes který by je bylo možné instalovat, než se ty balíky objeví v oficiální distribuci?”

Jak získat binární balíček Debianu

Instalace binárních balíčků ze síťových repozitářů Debianu pomocí nástroje apt je snadná, protože každý, zdrojový i binární balíček má své závislosti:

Build-Depends
Jsou závislosti na aplikacích, nezbytných k sestavení binárních balíčků ze zdrojového kódu.
Depends
Jsou balíčky bez kterých by sestavená aplikace nainstalovaná z binárního balíčku nebyla funkční.
Suggests
Jsou balíčky doporučené, které nějakým způsobem mohou rozšířovat funkcionalitu binární aplikace, ale nejsou pro ni nezbytné.

APT v počáteční fázi zpracuje položky Depends všech závislých balíků do jednoho seznamu balíků, který pak porovná s tím, co už je nainstalováno. Výsledkem je výstup podobný jako u následujícího příkladu, za kterým následuje dotaz, zda-li se má v instalaci pokračovat:

Příklad
~# apt-get install autopkgtest qemu-utils autodep8
Načítají se seznamy balíků… Hotovo
Vytváří se strom závislostí… Hotovo
Načítají se stavové informace… Hotovo
Následující dodatečné balíky budou instalovány:
  libglib2.0-0 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libglib2.0-dev libglib2.0-dev-bin libglib2.0-doc qemu-block-extra qemu-system qemu-system-arm qemu-system-common qemu-system-data
  qemu-system-gui qemu-system-mips qemu-system-misc qemu-system-modules-opengl qemu-system-modules-spice qemu-system-ppc qemu-system-sparc qemu-system-x86 qemu-user qemu-user-binfmt
Navrhované balíky:
  docker.io fakemachine lxc lxd ovmf-ia32 podman schroot vmdb2 zerofree low-memory-monitor low-memory-monitor:i386 libgirepository1.0-dev devhelp samba vde2
Následující NOVÉ balíky budou nainstalovány:
  autodep8 autopkgtest qemu-system-modules-opengl qemu-system-modules-spice
Následující balíky budou aktualizovány:
  libglib2.0-0 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libglib2.0-dev libglib2.0-dev-bin libglib2.0-doc qemu-block-extra qemu-system qemu-system-arm qemu-system-common qemu-system-data
  qemu-system-gui qemu-system-mips qemu-system-misc qemu-system-ppc qemu-system-sparc qemu-system-x86 qemu-user qemu-user-binfmt qemu-utils
21 aktualizováno, 4 nově instalováno, 0 k odstranění a 894 neaktualizováno.
Nutno stáhnout 119 MB archivů.
Po této operaci bude na disku použito dalších 1068 kB.
Chcete pokračovat? [Y/n]
Během instalace ale můžete narazit na problém, pokud byl některý z binárních balíků v repozitáři Debianu nahrazen novější verzí. To může to vést k tomu, že vám apt nabídne jako řešení aktualizaci desítek dalších balíků a odebrání nainstalovaných balíčků aplikací, závislých na jejich starších verzích. Proto vždy pozorně sledujte, co se apt chystá udělat, abyste si díky vlastní nepozornosti něco neodinstalovali.

packages.debian.org

Aktuální přehled, o tom co kde v jakém balíku a v jaké verzi je k dispozici,lze zjistit prostřednictvím serveru https://packages.debian.org

Tam můžete zjistit i to, ve kterém binárním balíku je soubor, který vás konkrétně zajímá, aniž byste něco zkusmo ninstalovali.

Pokud chcete přesunout nainstalovaný balík ze stroje A na stroj B

Pokud máte k dispozici jiný stroj (A) na kterém je binární balíček verze kterou potřebujete, tak se určitě hodí, máte-li na něm doinstalovanou utilitu dpkg-repack. Ta umí z nainstalovaného balíku vyrobit opět binární balíček, který můžete přenést na stroj B a pomocí utility dpkg doinstalovat. V případě, že mu bude zase něco chybět, můžete postupně bez obav přenést i další potřebné balíky, protože máte stále k dispozici funkční instalaci.

Utilita dpkg-repack se hodí především tehdy, chcete-li přesunout jinam binární balíček, který jste si někdy v minulosti uplácali sami.

Jak udělat korektní instalační balíček pro Debian

Rychlé splácání *.deb balíčku - dpkg-deb

Jsou instalátory, obzvláště u různých obskurních komerčních aplikací, u kterých nemáte tušení co vlastně během instalace dělají – prostě kamsi na prasáka nastrkají nějaké soubory, aniž by měl o jejich existenci APT tušení a ještě během instalace otravují grafickým instalátorem. Ale někdy tvoří celou aplikaci jeden shellový skript, který žádný instalátor nepotřebuje a vy nemáte ambice, aby se dostal do debianí distribuce.

Chcete mít jen korektní *.deb balíček, který půjde nainstalovat na jiném stroji s Debianem.

Sestavujeme balík s využitím nástroje git

Dělat chyby je přirozené, proto je dobré dřív, než se pustíte do práce vědět, jakým způsobem je rychle a efektivně řešit

Už nevím, co je dobře a co ne, proto chci zrušit vše a soubory obnovit z git repozitáře

Postup je snadný. Ostraníme vše, kromě adresáře .git a spustíme git a příkazem restore. Viz následující ukázký příklad:

Příklad
 ~/ocrodjvu$ find . -not -path '\./\.git*' -delete
 ~/ocrodjvu$ git restore .
Pokud si nejste jisti, tím co se bude mazat, vynechte volbu -delete. Na konzoli se pak vypíše seznam souborů a adresářů, které by se touto volbou smazaly. A protože je toho hodně, je vhodné ho prohnat přes utilitu grep. Viz následující příklad, který by neměl vypsat nic, přestože se v adresáři .git, soubor config vždy vyskytuje:
~/ocrodjvu$ find . -not -path '\./\.git*' | grep '.git/config'

Commitnul jsem do git repozitáře změny, které bych chtěl vrátit

To je celkem běžná situace. Pracujete s kódem, ukládáte změny přes „commit”, uděláte „push” kódu z lokální repozitáře do repozitáře na webu a pak zjistíte, že je něco blbě. Důležité je: nepanikařit a neřešit vzniklou situaci dalšími „commity”. Je mnohem lepší se vrátit do bodu kdy bylo vše OK a udělat vše znovu.

Pokud jste pracovali s nástrojem gbp a omylem naimportovali špatný archiv s kódem, bude potřeba vrátit všechny tři větve: debian/master, pristine-tar i upstream. A možná i odstranit vytvořené tagy. V následujícím ukázkovém příkladu demonstruji „revert” pouze na větvi pristine-tar
  1. Nejprve je potřeba se ujistit, jsem-li na správné větvi
    ~/ocrodjvu$ git branch
    pristine-tar
  2. Pokud ano, je nyní potřeba zjistit „hash” posledního commitu, kdy bylo vše OK. Ten se dá zjistit přes:
    ~/ocrodjvu$ git log
  3. Pokud mám zjištěný příslušný „hash” (např. e8cfd6782be2e09ac70cdca973109e75c669dc0a) mohu kód vrátit.
    ~/ocrodjvu$ git reset --hard e8cfd6782be2e09ac70cdca973109e75c669dc0a
  4. Stejným způsobem vraťe kód i u větví debian/master a upstream a odstraňte případně i automaticky vytvořené tagy. Ty si vylistujete takto:
    ~/ocrodjvu$ git tag
    Takže odstranění tagu balíku verze 4.1.0 z větve upstream bude vypadat takto:
    ~/ocrodjvu$ git tag -d upstream/4.1.0

Pokud změny ještě nebyly odeslány do sdíleného adresáře příkazem git push nemusím nic víc řešit, ovšem pokud již došlo k jejich odeslání, je třeba přistoupit ještě k jednomu kroku. Ale než k němu přistoupíte, měli byste se přesvědčit, zda-li už náhodou někdo jiný mezitím neposlal do repozitáře vlastní „commit”, založený na změnách, které byste nyní chtěli odstranit.

  1. Změny, které byly odeslány do veřejně sdíleného git adresáře odtraníte tím, že uděláte nový „push”:
    ~/ocrodjvu$ git push -f origin pristine-tar
Cíl origin je nakonfigurován v souboru .git/config v sekci [remote "origin"] a je svázán s aktuální větví v rámci sekce [branch "pristine-tar"]