Tento článek vysvětluje, jak se v Linuxu běžně instalují a odinstalují programy a co dělat, když program, který potřebujete, v distribuci chybí nebo je zastaralý. K tomu slouží program Stow.
Jak se instalují programy v Linuxu¶
Většinou vůbec nestahujete instalační soubory z webu, jak jste zvyklí
z Windows. Každá distribuce má své repozitáře – servery s tisíci hotových
balíčků – a správce balíčků, který je z nich instaluje. V Debianu, Ubuntu
a jejich derivátech je to apt, ve Fedoře dnf, v Arch Linuxu pacman.
1 2 3 4 5 6 7 | |
Správce balíčků si pamatuje, který soubor patří kterému balíčku. Proto umí program čistě odinstalovat a proto vám nikdy nezůstanou po odinstalaci „zbytky“. Můžete se ho také zeptat:
1 2 | |
Soubory z balíčků se rozprostřou do systémových adresářů: programy do
/usr/bin, knihovny do /usr/lib, dokumentace do /usr/share
a podobně. Tyto adresáře vlastní správce balíčků a ručně do nich nezasahujte.
Co když program v distribuci není¶
Stane se to často: program v repozitáři vůbec není, má starou verzi, nebo potřebujete nejnovější (noční) build. Pak zbývá stáhnout zdrojové kódy a přeložit je. Postup bývá stejný u většiny programů:
1 2 3 | |
make install zkopíruje výsledek do /usr/local – adresáře, který
je podle FHS určený pro programy nainstalované správcem ručně a který
je už v proměnné PATH. Kopírování ale znamená problém:
- nikdo si nepamatuje, které soubory se zkopírovaly,
- mnoho programů nemá
make uninstall, a když ho má, často nefunguje, - nová verze se přepíše přes starou a zbydou soubory, které už v nové verzi nejsou,
- všechny programy se promíchají v jednom adresáři
/usr/local/bina nepoznáte, co kam patří, - starou verzi nemůžete vrátit zpět, když nová nefunguje.
Přesně tohle řeší Stow.
Co je Stow¶
Stow je malý program, který se nazývá správce symbolických odkazů (symlink farm manager). Princip je jednoduchý:
- Každý program nainstalujete do vlastního adresáře
/usr/local/stow/jmeno-verze. Tam je s ostatními programy v bezpečí a vždy víte, co mu patří. - Příkaz
stowpak v adresáři/usr/localvytvoří symbolické odkazy na soubory z tohoto adresáře. Program je pak vidět vPATH, jako by byl nainstalovaný normálně. - Odinstalace je smazání odkazů (
stow -D) a smazání adresáře programu.
Uvnitř adresáře programu je stejná struktura jako v /usr/local:
1 2 3 4 5 6 7 8 9 | |
Po zavolání stow v adresáři /usr/local/stow vzniknou odkazy:
1 2 3 4 | |
Stow nainstaluje odkazy do nadřazeného adresáře (..) toho, ve kterém
ho spustíte. Proto ho spouštíme z /usr/local/stow. Jiný cíl zadáte parametrem -t.
Stow je v distribucích jako běžný balíček:
1 | |
Instalace krok za krokem¶
Jako příklad použijeme překladač SDCC pro mikrokontroléry.
1. Připravte si závislosti pro překlad. Na Debianu a Ubuntu to umí
jeden příkaz (v /etc/apt/sources.list musí být povolené řádky deb-src):
1 | |
U programu, který v distribuci není vůbec, musíte závislosti zjistit
z jeho dokumentace (soubor README nebo INSTALL) a doinstalovat ručně,
typicky balíčky build-essential, cmake a vývojové knihovny *-dev.
2. Stáhněte a rozbalte zdrojové kódy.
1 2 | |
3. Nakonfigurujte s cílovým adresářem. Nejdůležitější je parametr
--prefix: říká programu, kam se bude instalovat.
1 | |
Do názvu adresáře vždy napište verzi programu. Díky tomu můžete mít vedle sebe více verzí.
4. Přeložte a nainstalujte.
1 2 | |
sudo potřebujete jen proto, že adresář /usr/local/stow patří
administrátorovi. Program se tím nainstaloval jen do vlastního adresáře
a zatím ho nikdo nevidí.
5. Aktivujte ho pomocí Stow.
1 2 | |
Hotovo. Ověříte to takto:
1 2 3 | |
Pokud shell program přesto nenajde, zapomněl cestu k němu. Příkaz
hash -r ji obnoví. Pokud jste instalovali sdílenou knihovnu, spusťte ještě
sudo ldconfig.
Jiné systémy překladu¶
Parametr --prefix pochází ze sady nástrojů autotools (./configure).
Jiné systémy mají vlastní zápis téhož:
| Systém překladu | Nastavení cílového adresáře |
|---|---|
| autotools | ./configure --prefix=/usr/local/stow/jmeno-verze |
| CMake | cmake -DCMAKE_INSTALL_PREFIX=/usr/local/stow/jmeno-verze .. |
| Meson | meson setup build --prefix=/usr/local/stow/jmeno-verze |
jen Makefile |
sudo make install PREFIX=/usr/local/stow/jmeno-verze |
U programu s jen Makefile přečtěte jeho README. Proměnná se může jmenovat PREFIX, prefix nebo DESTDIR.
Hotové binární archivy¶
Někteří autoři dávají ke stažení už přeložené programy v archivu (.tar.gz,
.tar.xz). Pokud je uvnitř struktura bin/, lib/, share/, stačí archiv
rozbalit do vlastního adresáře a spustit stow:
1 2 3 4 | |
Parametr --strip-components=1 odstraní z cesty první adresář, který je
v archivu obvykle navíc.
Odinstalace a aktualizace¶
Odinstalace jsou dva kroky. Nejdřív odstraníte odkazy, potom adresář programu:
1 2 3 | |
Na systému nezůstane žádný zbytek, protože všechny soubory byly na jednom místě.
Aktualizace na novou verzi:
1 2 3 | |
Stará verze zůstala v adresáři, takže se k ní můžete jednoduše vrátit. Až si budete jistí, že nová funguje, starou smažte.
Pro rychlé přepnutí stejné verze (třeba po doplnění souborů) slouží
sudo stow -R jmeno (restow).
Užitečné parametry¶
| Parametr | Význam |
|---|---|
-n |
nic neprovádět, jen vypsat, co by se stalo (dry run) |
-v |
vypisovat, co Stow dělá (-vv ještě podrobněji) |
-D |
odinstalovat (delete), tedy odstranit odkazy |
-R |
znovu nainstalovat (restow) |
-t DIR |
cílový adresář místo nadřazeného |
-d DIR |
adresář s balíčky místo aktuálního |
Před prvním ostrým použitím vždy zkuste:
1 | |
Kdy se Stow zlobí¶
Konflikt souborů. Stow nikdy nepřepíše existující soubor, který sám
nevytvořil. Pokud už v /usr/local/bin leží soubor stejného jména (třeba
zbytek po dřívějším sudo make install), skončí s chybou typu
existing target is neither a link nor a directory. Stow je v tomto ohledu
bezpečný: nejdřív starý soubor odstraňte (nebo přesuňte) a potom to zkuste znovu.
Program přeložený bez správného --prefix. Pokud jste zapomněli
parametr a make install zapsal soubory přímo do /usr/local, Stow vám
nepomůže. Zkuste make uninstall, a když neexistuje, smažte soubory ručně
podle výpisu make install. Příště nezapomeňte --prefix.
Pozor na sudo a stow dohromady. stow zapisuje do /usr/local,
které patří rootovi. Spouštějte ho proto přes sudo. Instalovat se Stow
do vlastního domovského adresáře je také možné, a to pomocí -t:
1 2 3 | |
V tom případě sudo nepotřebujete, ale ~/.local/bin musí být
v proměnné PATH.
Shrnutí¶
- Programy z distribuce instalujte pomocí
apt(nebo správce vaší distribuce). Odinstalace je pak čistá. - Programy, které v distribuci nejsou, překládejte s
--prefix=/usr/local/stow/jmeno-verzea aktivujte pomocístow. - Odinstalace je
stow -Da smazání adresáře. Aktualizace je výměna odkazů mezi verzemi. - Do systémových adresářů (
/usr/bin,/usr/lib) ručně nikdy nic nekopírujte.