Hlavní navigace

Balíčkovací systém a aktualizace v OpenBSD

3. 2. 2016
Doba čtení: 9 minut

Sdílet

V OpenBSD nainstalujete poštovní a webový server s podporou PHP, MySQL, SSL atd. během půl hodiny. Stejně tak je možné nainstalovat si na notebook kompletní desktop s plnou multimediální výbavou.

Doba se mění

OpenBSD v současné době velmi progresivně vyvíjí, portuje a přidává programy jak serverové tak i desktopové. Je tomu tak zřejmě i proto, že existují firmy, které poskytují korporátní podporu pro OpenBSD. Balíčkový repozitář je už minimálně od verze OpenBSD 4.7 plný různých programů, které u mnohých linuxových distribucí musí uživatel pracně dohledávat všemožně po internetu, případně k jejich instalaci pokoutně přidávat neověřené repozitáře třetích stran.

Co se skrývá pod kapotou?

OpenBSD má podobně jako FreeBSD nebo NetBSD možnost instalovat software třetích stran z portů, nebo pomocí balíčků. První z těchto možností nyní pomineme a budeme se věnovat výhradně instalaci binárních balíčků z repozitáře, tak jak je většina linuxových uživatelů (tímto se omlouvám vyznavačům Gentoo) zvyklá.

Než přejdu k popisu instalace a aktualizace, dovolím si napřed stručně nastínit, jak vypadá OpenBSD systém, a kam a proč se balíčky instalují. Vlastní distribuce OpenBSD je složená z části, kterou bychom mohli nazvat „základ“, a ta je k dispozici na CD, nebo přes http, respektive ftp ve formě tar.gz archivů. Těch, které tvoří základ, je několik, ale obecně se dají rozdělit na holý systém a X-systém. Plná instalace OpenBSD tedy obsahuje i X-ka. X-server v OpenBSD není čistý Xorg, ale jeho osekaná a upravená verze Xenocara. Aplikace tohoto základu (base), se nainstalují do /bin a /usr/bin, resp /sbin a /usr/sbin nebo /usr/libexec. Nejen xorg, ale i ostatní programy jsou velmi dobře prozkoumané, opatchované a někdy i osekané (hacked). Tlak na bezpečnost a kvalitu je tu znát. Návodů na instalaci OpenBSD je na internetu nesčetně, takže tím se tu zabývat nebudu.

Co nabízí pkg?

Ačkoli se základní distribucí rozběhnete vesele webový či mailový server, je jasné, že mnohdy uživatel potřebuje více. Proto vznikl systém portů (geniální systém autokompilace ze zdrojových balíčků, o kterém budu psát příště) a také balíčkovací systém pkg. Systém pkg se skládá z několika příkazů, dovolím si je přirovnat k běžným linuxovým alternativám:

Debian RedHat OpenBSD
apt-cache search yum search pkg_info -Q
apt-get install yum install pkg_add
apt-get remove yum remove pkg_delete
apt-get upgrade yum update pkg_add -u
dpkg -l rpm -qa pkg_info
dpkg -i rpm -i pkg_add

Stejně jako apt nebo yum, i pkg umí najít závislosti, provést instalaci, update či odinstalovat balíček bez odebrání sdílených součástí. Balíčky jsou digitálně podepsané a všechny se nacházejí v jednom repozitáři. Http a ftp zrcadel je dost, a doporučuji používat ty německé, jsou rychlé a blízko. Jejich aktuální seznam naleznete na webu http://www.openbsd.org.

Pokud instalujete distribuci z internetu, uloží se vám vybrané zrcadlo rovnou do konfiguračního souboru pro další použití. V /etc/pkg.conf bude potom například toto:

installpath = http://ftp.spline.de/pub/OpenBSD/%c/packages/%a/

Pokud instalujete z CD, potom je třeba po instalaci cestu dodat. Tradičně se to dělá tak (a tento způsob vřele doporučuji), že do /etc/profile vložíte, pochopitelně v závislosti na verzi systému a vaší architektuře:

PKG_PATH =  http://ftp.spline.de/pub/OpenBSD/5.8/packages/i386/
export PKG_PATH

Uvádím úmyslně obě možnosti úložiště i různé možnosti zápisu, aby bylo vidět, kde případně hledat a jak editovat zápis, když příjdete k nějaké již nainstalované stanici, a budete se snažit změnit úložiště.

Jak se tedy instalují a odebírají programy?

Máme-li tedy připravené úložiště, můžeme začít instalovat. Řekněme, že chceme nainstalovat například vim. Zkusíme si ho napřed najít v repozitáři:

pkg_info -Q vim

V tomto případě zjistíme, že to je seznam zralý na rouru do lessa (|less). Následně chceme nalezený balíček nainstalovat, přepínač -v použijeme, abychom viděli, co se děje, jinak nás čeká pouze tma.

pkg_add -v

Repozitář nabízí více verzí, které jsou kompilovány s různými volbami, což název balíčku napovídá, pkg nás nechá vybrat verzi pomocí číslice.

Pokud potřebujeme program nainstalovat bez otázek, je dobré použít přepínač -I, ale je třeba vědět, co člověk dělá, jinými slovy, s jakými volbami jsou programy, které se instalují jako závislosti, defaultně kompilovány.

Občas chceme některý program odinstalovat, třeba abychom nainstalovali jinou verzi, nebo uvolnili místo na partici dedikovaného miniserveru. Potom prostě zadáme:

pkg_delete vim

Jindy chceme odebrat pozůstalé závislosti (něco jako apt-get auto-remove v Debianu), k tomu slouží:

pkg_delete -a

Dostal jsem se dokonce i do situace, kdy jsem potřeboval odebrat všechny balíčky a nainstalovat je znovu:

# vytvoř seznam nainstalovaných balíčků
pkg_info >muj_zalozni_seznam.txt
# smaž všechny balíčky
pkg_delete -X
# smaž případné pozůstatky instalace balíčků
rm -rf /usr/local
# načti a nainstaluj zpátky všechny balíčky
awk '{ print $1 }' muj_zalozni_seznam.txt | xargs pkg_add

A co když instalace havaruje?

Pokud náhodou instalace selže, například kvůli výpadku internetu nebo přetížení serveru, poradí si systém zajímavým způsobem. Částečně nainstalovaný balíček pojmenuje „partial-název_balíčku.pkg“ a při dalším spuštění instalace téhož programu nebo při hromadném update ho doinstaluje. Pokud program přeruší při instalaci úmyslně uživatel, protože daný program nechce, může tento částečně nainstalovaný program bez následných komplikací kdykoli odebrat:

pkg_delete partial-název_balíčku.pkg

A pokud si nejste jisti, zda ve vaší nepřítomnosti doběhly instalace správně, můžete si provést kontrolu.

pkg_info| grep partial

Co je jinak?

A teď přichází změna oproti Linuxu. Balíčky jsou instalovány mimo základní systém, a tedy namísto /usr/bin/vim, nalezneme /usr/local/bin/vim. Zkrátka celý systém balíčků třetích stran instalovaných pomocí pkg se ubytuje v /usr/local. Po instalaci některých balíčků se zobrazí výzva, aby se uživatel podíval do /usr/local/share/doc/pkg-readmes. Tam nalezne návod, jak nastavit závislé soubory, upravit škálovací funkce nebo limity kernelu pro správný běh toho nebo onoho programu, a také případně, kde se nachází rc.d skript pro start daného programu. Za pozornost stojí také /usr/local/share/examples, kde jsou různé vzorové konfigurační příklady. To je velký rozdíl oproti distribucím Linuxu, jako je Debian, kde se vám nainstalovaný server většinou okamžitě sám spustí.

Update vědecky vzato neexistuje – a co když tu je?

Čistě teoreticky vydává OpenBSD každého půl roku upgrade, a v mezičase uvolňuje opravy kódu pro základní systém. Ty jsou pouze v podobě zdroje, takže pokud chcete oficiálně udržovat systém aktualizovaný, musíte mít v /usr/src přes cvs aktualizovaný zdrojový kód a neustále překompilovávat. – To zní dost hrozivě, v dnešní době, kdy automatizované aktualizace spouští snad i pračka v koupelně.

Naštěstí část vývojářů z OpenBSD, kteří pracují pro firmu M:Tier, vyvinula utilitu, která se jmenuje openup. Je to svým způsobem příspěvek komerční sféry zpátky světu otevřeného kódu. Openup je vlastně jen skript, který zkontroluje úložiště s binárními aktualizacemi – čili balíčky, a nainstaluje je pomocí pkg_add -u.

Nejzajímavější na tom je, že vývojáři z M:Tier vytvořili balíčky nejen pro jádro a základní systém, ale také pro software třetích stran. Začali takzvanými „binpatchemi“, kde název vyjadřuje jasně podstatu, a následně přešli k údržbě balíčků a nazvali to „stable packages“. Úložiště openupu vám tedy ve formě odinstalovatelného balíčku pro pkg nabídne opravy kernelu, základního systému a například Libre Office či Firefoxu. Jejich politika je, že nabízejí bezpečnostní opravy, nikoli backport novějších verzí. To ve většině případů nemusí vadit, a pokud náhodou ano (např. u Minitube), tak se to dá vyřešit pomocí portů. Ale o tom až příště.

Ve světě OpenBSD je také zajímavé, že M:Tier nabízí i placenou podporu, která zahrnuje update pomocí openup na dobu 12 měsíců, což je průlomová záležitost. Vývojáři OpenBSD totiž zatím nikdy déle než půl roku jedno vydání nepodporovali a sklízejí za to poměrně velkou kritiku ze světa velkého businessu, kde jsou korporace zvyklé od RedHatu nebo Solarisu na několikaletou podporu jednotlivých vydání.

Jak se „openupuje“?

V podstatě jsou dvě možnosti, jak update balíčků a základního systému provádět.

  1. Bez openup skriptu – pro hardcorové paranoiky
    • přidáte si do své PKG_PATH (v /etc/profile) ještě úložiště M:Tier s aktualizacemi
      PKG_PATH=https://stable.mtier.org/updates/$(uname -r)/$(arch -s):${PKG_PATH}
    • naimportujete klíč z:
      https://stable.mtier.org/mtier-58-pkg.pub
      (pro další vydání OpenBSD to bude –59-pkg.pub a tak dále)
    • nainstalujete ho (nakopírujete do:)
      /etc/signify/mtier-58-pkg.pub
    • spustíte update pomocí pkg_add -u, což aktualizuje balíčky třetích stran
    • pokud ale chcete instalovat i binární opravy základního systému a kernelu, musíte si je najít:
      pkg_info -Q binpatch*
    • tím uvidíme přehled binpatchí, které jsou k disposici a ty pak můžeme instalovat:
      pkg_add -u binpatch-nazev-verze-cislo.pkg binpatch-jinynazev-jinaverze-jinecislo.pkg
  2. Pomocí openup skriptu – pro administrátory, kteří nemají čas
    • stáhnete si openup skript:
      https://stable.mtier.org/openup
    • spustíte ho a nainstaluje aktualizace základního systému i balíčků třetích stran
    • pokud ovšem používáte vlastní upravený kernel, doporučuje se přepínač -K, který zabrání stažení aktualizací kernelu
    • pokud chcete mít před instalací přehled, provedete si napřed pouze kontrolu toho, co by se stáhlo:
      openup -c
    • a tato možnost se doporučuje použít s cronem, který vám posílá třeba jednou denně/týdně informace, co byste mohli aktualizovat

Jak to vypadá?

Po stažení souboru openup mu přidělíme práva na spouštění a spustíme:

CS24_early

# chmod 700 openup
#./openup
===> Checking for openup update
===> Downloading and installing public key
===> Installing/updating binpatch(es)
quirks-2.114 signed on 2015-08-09T15:30:39Z
|No change in quirks-2.114
Multiprocessor machine; using bsd.mp instead of bsd.
binpatch58-i386-kernel-3.0: ok
binpatch58-i386-libcrypto-2.0: ok
binpatch58-i386-smtpd-1.0: ok
binpatch58-i386-ssh-1.0: ok
binpatch58-i386-sshd-1.0: ok
binpatch58-i386-sslhello-1.0: ok
===> Updating package(s)
quirks-2.114 signed on 2015-08-09T15:30:39Z
cups-filters-1.0.71->1.0.71p1: ok
gdk-pixbuf-2.30.8p3:png-1.6.17->1.6.20: ok
gdk-pixbuf-2.30.8p1->2.30.8p3: ok
.
.
.
Read shared items: ok
Look in /usr/local/share/doc/pkg-readmes for extra documentation.
--- -libxml-2.9.2p1 -------------------
Remember to update /var/db/xmlcatalog
--- -lighttpd-1.4.36 -------------------
You should also check /var/www/logs/access.log (which was modified)
You should also check /var/www/logs/error.log (which was modified)
You should also check /etc/lighttpd.conf (which was modified)
--- -mariadb-server-10.0.20p0v0 -------------------
You should also check /etc/my.cnf (which was modified)
You should also run rm -rf /var/run/mysql
--- -php-5.6.11 -------------------
You should also run rm -f /etc/php-5.6/php-5.6.sample/*
You should also check /etc/php-5.6.ini (which was modified)
!!!
!!! System must be rebooted after the last kernel update
!!!

A je to!

Server – no dobře, ale desktop?

OpenBSD není Linux Mint, nebude Linux Mint a ani jím nemá být – je to systém pro pokročilé uživatele. Nicméně takovým, kteří se nebojí příkazové řádky a příkazu man, nabízí dvě velké výhody. Děje se jen to, co vy nastavíte, respektive spustíte, a všechny programy plní to, co se od nich očekává. A že to jde i na desktopu, rád názorně předvedu. Přikládám snímek pracovní plochy mého notebooku: Xfce s běžícími aplikacemi a ukázkou automountu SD karty zasunuté do integrovaného slotu. Na tomto počítači dělám úplně všechno, co potřebuji, počínaje developmentem, přes mail, psaní, skenování a tisk dokumentů, sledování filmů, editaci fotografií, až po ripování CD nebo stříhání zvukových stop.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Petr Topiarz vystudoval angličtinu a pracuje jako systémový administrátor v jedné pražské IT firmě.