Eida.cz - Jedeme OpenBSD desktop

Jedeme OpenBSD desktop

7. února 2020, 18:06 Eida

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.

OpenBSD 6.6 oficiální artwork

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. 

01-login.txt 329 bajtů
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
První přihlášení do systému

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
Stažení patchů přes 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.

03-pkg-add.txt 87 bajtů
pkg_add xfce xfce-extras consolekit2 slim slim-themes paper-gtk-theme paper-icon-theme
Instalace Xfce a dalších pomůcek

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:

04-cz-kbd.xml 413 bajtů
<?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>
XML konfigurace české QWERTY klávesnice v Xfce4

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:

desktop.sh 2.76 KiB
#/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
Automatická instalace českého Xfce4 prostředí pro OpenBSD

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ě.

05-autoxfce.txt 77 bajtů
ftp https://www.eida.cz/file/edf/desktop.sh
chmod +x desktop.sh
./desktop.sh
Stažení a odpálení skriptu

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.

Eida
Tento článek přečetlo již 244 čtenářů (0 dnes).

Komentáře

Nový komentář