Homebrew má podporu Linuxu: balíčky nainstaluje bez roota

8. 2. 2019
Doba čtení: 6 minut

Sdílet

Linuxbrew je port populárního macovského Homebrew. Oba projekty byly v nejnovější verzi spojeny, takže si alternativních balíčků můžeme užít i v Linuxu. Nebudeme k tomu potřebovat ani práva roota, protože se instaluje do domovského adresáře.

Původním autorem projektu Homebrew je Max Howell, který balíčkovací systém pro macOS (tehdy ještě Mac OS X) v jazyce Ruby vytvořil v roce 2009. Přinášel do prostředí jablečných počítačů to, co známe z linuxového světa: pohodlný balíčkovací systém, který na jeden příkaz nainstaluje nový balíček včetně všech závislostí. Také proto projekt používá slogan Chybějící správce balíčků pro macOS.

Homebrew se stal rychle populárním zejména mezi vývojáři Ruby (kteří zároveň milují Macy), a také velmi aktivně vyvíjeným. Hlavní vývoj probíhá na GitHubu, přičemž repozitář patří dlouhodobě k jedněm z nejčastěji forkovaných. Celý projekt vytvářejí dobrovolníci a základní tvoří tým 21 lidí. Domovská stránka je na jednoduché doméně brew.sh.

Homebrew, česky domácí vaření piva, je výroba piva v domácích podmínkách pro nekomerční účely k osobní spotřebě. V Česku je zákonný limit stanoven na 200 litrů piva na domácnost a rok. Jelikož celý projekt alternativního balíčkovacího systému odkazuje právě na domácí výrobu piva, používá i nezvyklou terminologii: binární balíčky jsou bottles (lahve), předpisy pro sestavování balíčků ze zdrojových kódů jsou formula (recepty), grafická aplikace se instaluje jako cask (soudek) a podobně.

V průběhu oněch deseti let vznikla celá řada forků včetně jednoho nazvaného Linuxbrew. Ten si žil vlastním životem, až se vývojáři rozhodli začlenit jej zpět do hlavního projektu. To se nyní stalo s vydáním verze 2.0.0 a Homebrew tak kromě macOS nově podporuje také Linux a Windows Subsystem for Linux (WSL). Ve všech zmíněných prostředích můžete začít směle instalovat balíčky.

Poznámka: projekt se jmenuje Homebrew, ale při použití v Linuxu se mu říká Linuxbrew. Jelikož se článek týká výhradně právě linuxové verze, budeme mu dále říkat Linuxbrew.

K čemu je to dobré

Nabízí se otázka, k čemu je dobré mít další balíčkovací systém. V macOS žádný k dispozici ve výchozím stavu není – tam je tedy odpověď jasná. V linuxovém světě je ale balíčkovací systém základní součástí operačního systému (distribuce), takže jej není potřeba doinstalovávat. Přesto může mít i zde instalace Linuxbrew svůj smysl.

V první řadě je to software, který ke své činnosti nepotřebuje práva roota. Běží si v klidu v domovském adresáři uživatele, takže si každý uživatel může instalovat své vlastní balíčky podle potřeby a nepotřebuje k tomu zásah správce. Všechno je pěkně pohromadě v jednom adresáři a když se vám to přestane líbit, prostě adresář smažete a je hotovo.

Druhá výhoda přímo souvisí s tou první: takto nastavený balíčkovací systém dovoluje doinstalovat nový software i do staršího prostředí, nebo do prostředí, do kterého nechcete/nemůžete zasahovat. Pokud například používáte CentOS nebo Debian, zřejmě si nechcete rozvrtat systém tím, že si do něj přidáte vlastní balíčky. Pokud opravdu nevíte, co děláte, můžete se dostat do velmi nepříjemné situace. Instalace doplňkového software do domovského adresáře to elegantně řeší.

Linuxbrew pochopitelně není jediným řešením, které tohle umožňuje, v Linuxu máme například Flatpak, Snap nebo AppImage. Ty spoléhají na balení software do obrazů, které jsou od zbytku systému odděleny. Proti tomu je Linuxbrew vlastně tradiční balíčkovací systém, který se stará o klasické rozbalování (a kompilaci) jednotlivých balíčků do správných cest, umí vyřešit závislosti a všechny takové ty normální věci.

Instalace balíčkovače

Před instalací toho nebudete potřebovat mnoho, stačí funkční linuxový systém (nebo WSL) s jádrem alespoň 2.6.32 (to je skoro deset let staré), knihovna glibc 2.12 a kompilátor GCC 4.4. Linuxbrew v současné době podporuje pouze 64bitové systémy.

Poznámka: Podle vývojářů by mělo být možné s trochou snahy to na 32 bitech rozchodit, vzhledem k ústupu podpory starých procesorů to (zatím?) nikdo neudělal. Rozhodně se ale iniciativě meze nekladou, takže pokud potřebujete Linuxbrew na 32bitové systémy portovat, určitě kontaktujte vývojáře.

Kromě toho jsou tu ještě nějaké další softwarové podmínky, které musí být splněny. V systému budete potřebovat základní nástroje pro kompilaci software a utlity curl, file a git. Pokud něco takového ještě nepoužíváte, je instalace v běžných distribucích snadná.

V Debianu či Ubuntu stačí zavolat:

# apt install build-essential curl file git

Pokud používáte Fedoru, CentOS nebo RHEL, použijte:

# yum groupinstall 'Development Tools' && yum install curl file git

Tím máme připraveno vše v systému a můžeme se vrátit do domovského adresáře běžného uživatele. Zbývá stáhnout a spustit instalační skript. Ten nainstaluje vše potřebné buď do /home/linuxbrew/.linuxbrew/, pokud je možné použít sudo, nebo se spokojí s podadresářem ~/.linuxbrew/  ve vašem domovském adresáři.

$ wget https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh
$ sh install.sh

Vše se tedy stáhne a rozbalí do jednoho ze zmíněných adresářů, ve kterém si bude Linuxbrew hospodařit. Vytvoří si tam základní adresářovou strukturu (je tam bin, etc, lib, var …) a do podadresáře Homebrew si nainstaluje vše potřebné – spoustu vlastních skriptů a také interpret Ruby ( Homebrew/Library/Homebrew/vendor/ruby-portable/). Linuxbrew se totiž snaží být hodně samostatný a pokud se mu například nelíbí verze kompilátoru ve vašem systému, ochotně si stáhne vlastní.

Terminál po doběhnutí instalačního skriptu

Linuxbrew je v této fázi už funkční, pro větší pohodlí ale doporučuje přidat do souboru ~/.profile následující řádek zajišťující naplnění systémových proměnných včetně doplnění cesty k binárce brew do proměnné  $PATH.

eval $(~/.linuxbrew/bin/brew shellenv)

Při příštím přihlášení se příkaz spustí, zavolá brew se správným parametrem a výstupem je sada šesti proměnných mířících do správných adresářů. Všimněte si, že se brew do $PATH, $MANPATH i $INFOPATH  přidal na začátek. Znamená to, že software nainstalovaný pomocí Linuxbrew bude mít přednost před stejným softwarem nainstalovaným v systému. Je to samozřejmě možné upravit, ale je dobré o tom vědět, abyste předešli překvapení.

Instalujeme balíčky

Linuxbrew instaluje balíčky podle takzvaných receptů (formula), těch existuje několik tisíc a najdete je na formulae.brew.sh. Ve výchozím stavu se balíčky kompilují a jejich instalace vždy nějakou dobu zabere. Existuje ovšem i rychlejší cesta, kterou představují lahve (bottles). To jsou vlastně zkompilované recepty, které jsou zabalené do podoby binárních balíčků.

Pokud tedy takový balíček požadujete, nechcete žádné speciální nastavení nebo parametry a existuje binární lahev, Linuxbrew ji upřednostní. Dostanete stejně přesně to, co byste získali kompilací. Pokud ale budete chtít balíček upravit nebo si kompilaci vynutíte parametrem --build-from-source, stáhnou se zdrojové kódy. Také samotný recept si může vyžádat kompilaci některého balíčku ze zdrojových kódů, i když by nakrásně existoval předkompilovaný.

O správu balíčků se stará utilita brew, která se ovládá jako každý běžný balíčkovací systém. Pokud jste někdy měli v ruce třeba apt, budete jako doma. Za příkazem následuje vždy název akce, kterou chceme provádět, a poté volitelně název balíčku. Všechny varianty naleznete v manuálové stránce ( man brew). My si ukážeme to nejpodstatnější.

$ brew install hello

Nainstaluje stejnojmenný balíček. V tomto případě jde o miniaturní demonstrační balík, který obsahuje utilitku vypisující „Hello world“.

Instalace balíčku a spuštění nainstalované utility

$ brew uninstall hello

Jednoduše odebere nainstalovaný balík. 

Odinstalace balíku je rychlá

$ brew search hello

Vyhledání textu v názvu balíčku. Je možné tu použít i regulární výrazy.

$ brew update

Pomocí Gitu stáhne nejnovější verzi Homebrew včetně všech receptů.

Jede jede mašinka (balíček sl) nainstalovaná pomocí Linuxbrew

$ brew cleanup

Odstraní z disku nepotřebné soubory, staré recepty a podobně. Pokud čistění nespustíte déle než 30 dnů, balíčkovací systém ho při příštím spuštění udělá automaticky.

$ brew list

Vypíše seznam nainstalovaných balíčků.

$ brew info hello

Vypíše informace o balíčcích včetně popisu a závislostí.

$ brew deps hello

Vypíše informace o závislostech daného balíčku. Pokud je závislostí hodně a vy chcete vidět jejich provázání ve stromečku, přidejte parametr --tree. Pomocí brew leaves  je možné nechat si vypsat balíčky, na kterých další balíky nezávisejí.

bitcoin_skoleni

Linuxbrew jako alternativa

V linuxovém světě se z Linuxbrew pravděpodobně nestane žádný mainstream, přece jen tu máme velmi dlouhou tradici klasických balíčkovacích systémů. Rozhodně by to ale mohla být zajímavá alternativa pro některá prostředí, kde není možné jednoduše doinstalovat aktuální verze software.

Výhodou také je, že má v macOS už také dlouhou tradici a má mnoho přispěvatelů. K dispozici je tedy spousta balíčků, široká komunita a dobrá podpora. Vyzkoušejte ho, díky instalaci do domovského adresáře je to velmi snadné.

Odkazy

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.