Debian repository
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é:
- můj text ohledně „debianizace” instalačních balíků
- i stránka k instalačnímu nástroji APT, na které jsem popsal, i to jak si vytvořit vlastní, veřejně dostupný repozitář debianích balíků.
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ý.
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:
- „Jakým způsobem se teď připravují instalační balík pro Debian?”
- „Co se změnilo na postupu, jakým se dostávají do distribuce Debianu?”
- „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:
~# 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 1 068 kB.
Chcete pokračovat? [Y/n]
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:
~/ocrodjvu$ find . -not -path '\./\.git*' -delete
~/ocrodjvu$ git restore .
.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.
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
-
Nejprve je potřeba se ujistit, jsem-li na správné větvi
- ~/ocrodjvu$ git branch
- pristine-tar
-
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
-
Pokud mám zjištěný příslušný „hash” (např.
e8cfd6782be2e09ac70cdca973109e75c669dc0a
) mohu kód vrátit.- ~/ocrodjvu$ git reset --hard e8cfd6782be2e09ac70cdca973109e75c669dc0a
-
Stejným způsobem vraťe kód i u větví
debian/master
aupstream
a odstraňte případně i automaticky vytvořené tagy. Ty si vylistujete takto:- ~/ocrodjvu$ git tag
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.
-
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
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"]