Jedeme OpenBSD desktop
Před nedávnem se Davídkovi doslova roztrhl pytel s granátovými jablky, kde se ve své chvályhodné roli snaží šířit masivní osvětu a nezávislé názory přesně tak, jak to má asi být. Tomu rozhodně tedy není co vytknout, ale musím říct, že mě to tak nějak motivovalo psát věci víc basic — protože je bohužel smutná pravda, že přestože máme pozoruhodné a magické technologie doslova na dosah ruky, dost lidí, a to včetně neschopných a nevzdělaných IT zaměstnanců ve státní správě, o nich doslova a do písmene neví. Jistě, stále bude super si někdy do hloubky rozebrat špičku hyperkonvergovaného vědomí, ale k tomu dost lidí nedojde, pokud nebude umět ani svůj stroj zapnout, natož z něj vytěžit maximum.
Takže co je teda třeba basic? Hodně lidí například bude tápat, jak si na svém starém a odepsaném MacBooku, kde už nemá smysl kvůli výkonu instalovat nejnovější macOS na sílu, rozjet pohodový grafický desktop na OpenBSD. Jinými slovy, jak vlastně pohodově nahodit grafický server, greeter a nějaký odlehčený desktop. Na tohle jsou samozřejmě skoro všude anglické návody, proto to může vypadat, že tohle dokáže i každý malý kiddo, ale opak je zřejmě pravdou. Tak se na to asi budeme muset podívat. Případové prostředí sice nebude fyzický MacBook, ale běžný virtuální počítač, konfigurovaný jako dvouprocesorový s 512 MB paměti, jedním 40GB SATA diskem a jednou bridgovanou síťovkou, bez zbytečné 3D akcelerace nebo něčeho. A použijeme současný systém se dvěma šestkami, OpenBSD 6.6. A zkusíme si na tom rozjet hezké a české grafické prostředí pod Xfce. Hop hej, máme na to sedm minut.
Instalace začne stažením patřičného instalačního obrazu z oficiálního webu, ze kterého stačí stroj nastartovat. CDboot automaticky spustí instalační prostředí a první, na co se zeptá, je požadovaná hlavní činnost — tedy zda je třeba systém instalovat nově, aktualizovat, provést autoinstalaci, nebo se dropnout do shellu pro pokročilé zkoumání. Za předpokladu, že je celý počítač čistý, přichází v úvahu jediná volba — instalace. Co dalšího chce instalátor vědět, je rozložení klávesnice. Tady to je trochu divoké, protože ne všechno bude tak pokročile fungovat, proto je dost možná lepší ponechat výchozí volbu, což je nějaká generická anglická klávesnice. Komplikace tím způsobené se napraví až později a teď to úplně nevadí, takže pohoda. Zvolíme optimální jméno počítače (vm-obdesktop) a protože to má fungovat jako desktop a ne jako server, síťová rozhraní necháme zkonfigurovat přes DHCP nebo IPv6 autoconf a pokud je použitá doména, vyplníme i tu (eida.lan). Instalátor se pak pokusí vypsat nalezené DNS servery a skočí k dalšímu kroku, nastavení uživatelů.
Asi ve všech pořádných systémech se nejprve volí heslo roota. Tady připomenu, že je obecně dobrý nápad dát tam heslo pořádné a v principu se používání rootovského účtu v každodenní činnosti vyhnout, ale protože to je ukázka, naplácám tam prostě dvakrát za sebou heslo root a nebudu se o to starat. Někoho tady třeba zaskočí, že třeba oproti Debianu systém nebude prskat, že je heslo slabé, prostě každého věc. Jakmile je root nastavený, začnou se konfigurovat základní služby. Možná na tomhle místě zase stojí připomenout, že démoni jsou v OpenBSD prefixovaní podtržítkem, což mi přijde fakt jako užitečná a velmi přehledná vychytávka proti ostatním. No, prvním démonem bude SSH, to bych určitě ponechal zapnuté, pak tam bude volbička ve smyslu Představuješ si, že ti na tomhle počítači poběží Xka?, což necháme taky na ano. Výchozím správcem grafického X-systému je v OpenBSD xenodm, který pro tenhle případ necháme vypnutý a uděláme to celé úplně jinak.
No a pak následují volby běžných uživatelů. Standardní proces je takový, že jsou uživatelské účty místní, ale pochopitelně nic nebrání ničemu používat adresářové služby, jako třeba Active Directory, ale k tomu později. V tuhle chvíli tedy vytvoříme jeden lokální účet, řekněme eida pod jménem Eida.cz a heslem eida. Když už tam běžný login je, instalátor upozorní, že většina útoků jde na roota a zeptá se, zda a jak chceme omezit přihlášení roota na SSH. Obecně dobrá praxe je nepovolit to vůbec, ale dá se vybrat i prohibit-password, což znemožní přihlášení jménem a heslem, ale root bude stále dostupný, pokud bude mít vzdálený systém autorizovaný soukromý klíč. Ale jak říkám, pro roota tohle úplně zakázat a pro uživatele povolit přihlášení pouze klíčem. Tečka :). Celá jednoduchá část pak končí výběrem časového pásma, což je tady u nás Europe/Prague.
Pak to už začne být konečně zajímavé, neboť je třeba začít pracovat s pevným diskem. Pokud je k dispozici jeden, je nabídnut, pokud více, je potřeba si ten správný zvolit. Problematika diskového uspořádání už byla popsaná minule v článku o multibootu přes UEFI, takže jen shrnu to hlavní — o rozdělení disků se stará disklabel, což si můžeme představit jako nějakou vyšší abstrakci. Víceméně se to projeví tím, že všechna rozdělení systému se zvenku budou jevit jako jeden oddíl typu 0xA6
(OpenBSD data). A přesně na tohle se taky první otázka dělitele disků ptá — jak se bude disk jevit zvenku, jaké budou jeho hlavní oblasti? V případě prázdného žádná věda, buď použijeme celý disk v režimu MBR, nebo v případě UEFI systémů GPT. Druhá zmíněná volba, tedy GPT, pak sama zajistí tvorbu ESP oddílu s patřičným offsetem, takže není potřeba se o nic starat. Na virtuálu hodím MBR, protože jsou s UEFI určité komplikace a můžeme jet dál.
Tím dalším je už pak nástin nebo možnost editace jednotlivých skutečných částí pomocí disklabelu. Filosofie OpenBSD je totiž taková, že jednotlivé přimountované oblasti mají speciální možnosti zabezpečení na úrovni souborového systému a předpřipravené hlavní oblasti připojí pomocí samostatných příznaků. Jak to funguje v detailu, tomu se v oficiální dokumentaci věnuje celá knihovna. Každopádně po dokončení volby budou změny zapsány na disk a jde se konečně instalovat. Instalace probíhá v sadách, pokud jsou na CD, je možné zvolit CD, ale je potřeba si uvědomit, že na CDčku nejsou jejich podpisy a musíme ručně sdělit, že chceme pokračovat bez kontroly. Bum, plác, jádro se relinkuje a systém je připravený k prvnímu bootu. Když to shrnu, vlastně pro úplně basic začátečníky stačilo klovat jen do enteru a ono se to tam nalilo.
První boot si nakonfiguruje některé klíče, provede aktualizaci mikrokódu a zkontroluje dostupné patche. Patche jsou v OpenBSD vydávány dostatečně rychle a jsou součástí Errata, což si můžeme představit jako opravy všech fuckupů, ke kterým od celého vydání postupně došlo. No ale systém tedy naběhl, na obrazovce bliká kouzelné slovíčko login, tak se můžeme nalogovat. Jde to jak pod rootem, tak raději pod běžným uživatelem — možná to bude vypadat na hlavu, ale postup eida, $ su, heslo roota, # cd je docela v pořádku. Kdo to nedal, tak jen dodám, že cd bez parametrů skočí do domovského adresáře současného uživatele, kterým se po začarování su stal root.
OpenBSD/amd64 (vm-obdesktop.eida.lan) (ttyC0) login: eida Password: eida Last login: Fri Feb 7 15:15:00 on ttyC0 OpenBSD 6.6 (GENERIC.MP) #372: Sat Oct 12 10:56:27 MDT 2019 Welcome to OpenBSD: The proactively secure Unix-like operating system. { ... } vm-obdesktop$ su Password: root vm-obdesktop# cd vm-obdesktop# pwd /root
Možná někoho zaujalo, že se instalátor nikde neptal na nastavení shellu. Tak překvapení bude třeba takové, že výchozím shellem v OpenBSD je Korn shell, ksh, což není zas tak hrozné, jak to může někomu znít. Nakonec ale stejně na každém shellu najdeme mraky výhod i nevýhod, tak je to celkem jedno, ale pojďme instalovat ten desktop. V první řadě má OpenBSD k dispozici binární balíčky přes pkg_add
, které se pro tohle skvěle hodí, ale je potřeba mít v pořádku nastavenou cestu, kde se mají hledat. Ta je specifikovaná v /etc/installurl
a ve výchozím stavu současnosti by měla obsahovat nějakou obecnou CDN, kde by to pak její balancer měl korektně přesměrovat na co nejbližší zrcadlo. Je samozřejmě taky možné mít zrcadlo na lokální síti, pokud by někdo chtěl být vyloženě cool. Takže pokud síť funguje, můžeme v první řadě najít systémové patche a pak začít tahat odpovídající balíčky.
vm-obdesktop# syspatch Get/Verify syspatch66-001_bpf.tgz 100% |******************************************************************| 102 KB 00:00 Installing patch 001_bpf Get/Verify syspatch66-002_ber.tgz 100% |******************************************************************| 660 KB 00:00 Installing patch 002_ber Get/Verify syspatch66-003_bgpd.tgz 100% |*****************************************************************| 181 KB 00:00 Installing patch 003_bgpd Get/Verify syspatch66-004_net8021... 100% |***************************************************************| 64839 00:00 Installing patch 004_net80211 Get/Verify syspatch66-005_sysupgr... 100% |***************************************************************| 3023 00:00 Installing patch 005_sysupgrade Get/Verify syspatch66-006_ifioctl... 100% |***************************************************************| 381 KB 00:01 Installing patch 006_ifioctl Get/Verify syspatch66-007_inteldr... 100% |***************************************************************| 21468 KB 00:06 Installing patch 007_inteldrm Get/Verify syspatch66-008_mesa.tgz 100% |*****************************************************************| 5598 KB 00:02 Installing patch 008_mesa Get/Verify syspatch66-009_mesaxlo... 100% |***************************************************************| 2036 KB 00:01 Installing patch 009_mesaxlock Get/Verify syspatch66-010_libcaut... 100% |***************************************************************| 20185 KB 00:06 Installing patch 010_libcauth Get/Verify syspatch66-011_xenodm.tgz 100% |***************************************************************| 45914 00:00 Installing patch 011_xenodm Get/Verify syspatch66-012_suauth.tgz 100% |***************************************************************| 7997 00:00 Installing patch 012_suauth Get/Verify syspatch66-013_ldso.tgz 100% |*****************************************************************| 295 KB 00:00 Installing patch 013_ldso Get/Verify syspatch66-015_ftp.tgz 100% |******************************************************************| 65164 00:00 Installing patch 015_ftp Get/Verify syspatch66-016_ripd.tgz 100% |*****************************************************************| 45685 00:00 Installing patch 016_ripd Get/Verify syspatch66-017_inteldr... 100% |***************************************************************| 268 KB 00:00 Installing patch 017_inteldrmctx Get/Verify syspatch66-018_smtpd_t... 100% |***************************************************************| 224 KB 00:00 Installing patch 018_smtpd_tls Get/Verify syspatch66-019_smtpd_e... 100% |***************************************************************| 224 KB 00:00 Installing patch 019_smtpd_exec Relinking to create unique kernel... done; reboot to load the new kernel Errata can be reviewed under /var/syspatch
Pro Xfce jsou už připravené některé metabalíčky a ještě k nim budeme potřebovat odpovídající greeter, kterým je třeba Slim, a pak ještě kamarády desktop, což jsou extra-balíčky a dekorace.
pkg_add xfce xfce-extras consolekit2 slim slim-themes paper-gtk-theme paper-icon-theme
Stažení a instalace ale bohužel není všechno, protože v BSD světě nefunguje všechno tak automagicky, jak jsou třeba někteří čumáci zhýčkaní v Linuxových distrech, nebo v něčem úplně jinačím. Když začneme z uživatelského pohledu, pak je první činností po přihlášení nutnost spustit ono desktopové sezení, a to se řídí profilem .xinitrc
v domovských adresářích (tj. /root/.xinitrc
a /home/jméno/.xinitrc
) a bude mít pro Xfce konkrétní podobu exec /usr/local/bin/ck-launch-session /usr/local/bin/startxfce4
. To je pohoda, ale samozřejmě to nestačí, protože napřed musí nějaká grafika vůbec běžet, aby se na ní dalo vůbec spustit, a hlavně, mít ještě spuštěnou podporu tak, aby to celé drželo pohromadě. Do /etc/rc.conf.local
, který mimochodem zatím neexistuje, se dají zapsat lokální úpravy pro start systému, jmenovitě parametry balíčků v sekci pkg_scripts. Xfce si jako závislosti bere messagebus a Avahi, takže pro výchozí chování by tam mohlo být něco jako pkg_scripts = "messagebus avahi_daemon"
. No a pak už zbývá na samotném začátku nahodit ten Slim. On má výchozí parametry hezky v /etc/rc.d/slim
, který stačí jen prolinkovat do globálního /etc/rc.local a je prakticky vymalováno. Reboot a ukažme se.
Napoprvé husté, že? Má to ovšem ale několik drobných much. V první řadě, jak nastavit češtinu v grafickém prostředí? Jak změnit obrázky a jak reflektovat nastavení i pro všechny budoucí uživatele, kteří třeba nebudou vůbec definovaní lokálně? No tak k tomu prvnímu, je potřeba myslet trochu víc BSD. Konfigurace locales je závislá pouze na nastavení profilu uživatele, který se definuje v ~/.profile
, a to specifikací jazyka proměnných LC*. Jejich všechny aspekty pokrývá LC_ALL, takže pro nastavení češtiny veškerého prostředí zkrátka stačí exportovat české UTF-8, tedy přidat do profilu export LC_ALL=cs_CZ.UTF-8
. Paráda. To ale samozřejmě neovlivní klávesovou mapu, kterou si Xfce bere ve výchozím stavu ze systému. Českou klávesnici si každý pak může naklikat v grafickém dialogu Xfce pro změnu klávesnice a... hm, to není úplně optimální. Veškerá konfigurace Xfce se zapisuje ve formě XML do stromu pod ~/.config/xfce4/, takže po změně prostředí v GUI se zěmny zákonitě projeví i v konfiguračních souborech. Třeba ten pro klávesnici bude vypadat nějak takhle:
<?xml version="1.0" encoding="UTF-8"?> <!-- soubor ~/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml --> <channel name="keyboard-layout" version="1.0"> <property name="Default" type="empty"> <property name="XkbDisable" type="bool" value="false"/> <property name="XkbLayout" type="string" value="cz"/> <property name="XkbVariant" type="string" value="qwerty"/> </property> </channel>
Kdo nad tím přemýšlí, třeba kde se berou ostatní nastavení, se třeba zeptá, zda by nebylo možné vytvořit nějaký globální mustr, aby se to nemuselo pokaždé zapisovat ručně. Pochopitelně globální mustry už dávno existují a v rámci systému jsou uloženy v /etc/skel. Skeleton, tedy kostra, je společná konstrukce používaná pro tvorbu všech úplně nových uživatelských domovských adresářů a nic nebrání tomu do ní zapsat libovolné výchozí hodnoty, které mají být použity pro každý nový účet. Vycházíme tedy z toho, že vzdálené účty zatím neexistují a budou teprve za běhu vznikat.
Obrázky. Výchozí téma přihlašovací obrazovky, za kterou může Slim, dost neukazuje plnou sílu OpenBSD. Jeho výchozí téma je dost fádní a přitom stačí změnit v jeho konfigurační položce current_theme na opembsd-simple a rybka se příště objeví.
Takže tohle už vypadá mohutně dobře, nic prakticky nebrání dalšímu kroku a integraci počítače do doménového prostředí. To sice není tak jednoduché jako v systémech používajících PAM, ale vlastně stačí jen nakonfigurovat patřičným způsobem Kerberos a jede se. Nastává pak už jen asi poslední otázka — dalo by se tohle celé nějak automatizovat, aby to bylo ještě víc než basic? Heh, no, jo. Dalo. Docela snadno. Uvažujeme, že si na všechny výše zmíněné operace nepíšeme docela jednoduchý skript:
#/bin/ksh echo "Regenerace základní URL..." echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl echo "Hotovo." echo "Pososáme nejdřív patche..." syspatch echo "Asi hotovo." echo "Nastavuje se české prostředí..." for home in /home/*; do echo "export LC_ALL=cs_CZ.UTF-8" >> "$home/.profile" done echo "export LC_ALL=cs_CZ.UTF-8" >> /etc/skel/.profile echo "Nastaveno." echo "Sosají se desktopové balíčky a témata..." pkg_add xfce xfce-extras consolekit2 slim slim-themes paper-gtk-theme paper-icon-theme echo "Hotovo." echo "Nastavuje se spouštění sezení Xfce..." touch /etc/rc.conf.local /etc/rc.local /root/.xinitrc /etc/skel/.xinitrc echo "exec /usr/local/bin/ck-launch-session /usr/local/bin/startxfce4" > /root/.xinitrc echo "exec /usr/local/bin/ck-launch-session /usr/local/bin/startxfce4" > /etc/skel/.xinitrc for home in /home/*; do touch "$home/.xinitrc" echo "exec /usr/local/bin/ck-launch-session /usr/local/bin/startxfce4" > "$home/.xinitrc" done echo "Hotovo." echo "Konfigurace parametrů služeb..." echo 'pkg_scripts="messagebus avahi_daemon"' >> /etc/rc.conf.local echo "/etc/rc.d/slim start" >> /etc/rc.local echo "Hotovo." echo "Zapisují se výchozí hodnoty konfigurace Xfce..." mkdir -p /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml touch /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo '<?xml version="1.0" encoding="UTF-8"?>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo '<channel name="keyboard-layout" version="1.0">' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo ' <property name="Default" type="empty">' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo ' <property name="XkbDisable" type="bool" value="false"/>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo ' <property name="XkbLayout" type="string" value="cz"/>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo ' <property name="XkbVariant" type="string" value="qwerty"/>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo ' </property>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml echo '</channel>' >> /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml for usr in $( ls -1 /home/ ); do cp -r /etc/skel/.config /home/$usr chown -R $usr:$usr /home/$usr/.config done echo "Hotovo." echo "Mění se výchozí téma Slima na openbsd-simple..." sed -i 's/current_theme default/current_theme openbsd-simple/g' /etc/slim.conf echo "Hotovo." echo "Konec. Restarovat hned (a/n)?" read restart if [ "$restart" != "${restart#[Aa]}" ] ;then echo "Restartuje se..." reboot fi
Wuhu. Ale co s ním? Tak v první řadě je ho potřeba dostat do běžícího a čerstvě nainstalovaného stroje. Na rozdíl od jiných systémů se v OpenBSD ve výchozím stavu nepoužívá žádný wget, curl nebo podobné vylomeniny, ostatně tady taky editor funguje tak akorát vim, a to může hodně lidí odradit. Na stahování souborů se používá dost příjemná utilita ftp
, kterou se dá stáhnout téměř vše, třeba i výše přiložený skript přímo tady z webu. Tento soubor je pak potřeba hezky po UNIXovsku označit jako spustitelný (přidat execute) a odpálit ./desktop.sh
. Pod rootem, pochopitelně.
ftp https://www.eida.cz/file/edf/desktop.sh chmod +x desktop.sh ./desktop.sh
To je vše, naprosto vše, jsme online a jedeme OpenBSD desktop. O zbytek se to už postará samo, nebo jak by se řeklo, všechno funguje a nemusíme se o to starat. Po rebootu nás již přivítá rybička a můžeme začít tunit rovnou Xfce prostředí, dát si do něj Firefox, stáhnout si hezký desktopový obrázek s rybičkou a žít naplno. Takže konec střapec, je to snadné a nikdo se toho nemusí bát. A jestli tohle nebylo dost basic, pak už fakt nevím, ale třeba to nějaký účel splnilo. Držím všem basikářům ploutve.