Kernel (rendszermag) fordítás, virtualizáció – az utolsó próbakő :)

Linux alatt fordíthatunk saját beállításokkal egyedi rendszermagot. A kernel teljesen testreszabható. Mivel a saját Linux-omat gyári maggal használom, ezért a fordítás bemutatásához először is telepítem a virtualbox szoftvercsomagot, hogy a virtuális gépben telepíthessek egy sandbox (játék) Linux-ot. 🙂

https://tecadmin.net/install-virtualbox-on-debian-10-buster/

Beszéljünk még egy dologról. Általában root-ként, rendszergazdaként alig használjuk a gépet, ennek biztonsági okai vannak (a távoli elérés ilyen módon általában tiltva is van). Viszont a felhasználónk lehet rendszergazda jogú, erre való a sudo parancs. Ennek leírását magyarul is elolvashatjuk.

https://hu.wikipedia.org/wiki/Sudo

A sudo jogosultság nagy felelősség! Erről árulkodik a legelső használatkor kapott figyelmeztető üzenet.

gvamosi@sandbox1:~$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
1) Respect the privacy of others.
2) Think before you type.
3) With great power comes great responsibility.
[sudo] password for gvamosi:
root@sandbox1:~#

VirtualBox a debian-testing-amd64-netinst.iso file-lal 🙂

Miután a virtualbox-ot elindítottam, létrehoztam egy virtuális gépet, 1 GB memóriával és 20 GB-nyi, dinamikusan növekedő “lemezkapacitással”. A kernel forrás, a lib-ek és a c fordító miatt kelleni fog a hely! A Debian 10 netes telepítőjét az alábbi helyről töltöm le.

https://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/

A virtuáis gép elindítása után a grafikus telepítést választva telepítem a Debian 10 rendszert. 🙂 Ezt nem részletezném, csupán annyit, hogy 2GB (a memória kétszerese) a swap, illetve a maradék ext4 filerendszerű root “/” kötet.

De nézzük a kernel fordítást. Első lépés a kernel forrás és néhány kiegészítő dolog letöltése (a sandbox Linux-onkon).

root@sandbox1:~# apt-get install build-essential linux-source bc kmod cpio flex cpio libncurses5-dev

A build-essential a fordításhoz kell, a linux-source a kernel forrás, míg a libncurses5-dev a menüvezérelt konfigurációhoz (fordítás előtt szükséges elvégezni). Következő lépés a forrás kibontása.

root@sandbox1:~# cd /usr/src/
root@sandbox1:/usr/src# tar xavf linux-source-5.2.tar.xz

Ezután jön a konfiguráció.

root@sandbox1:/usr/src# cd linux-source-5.2/
root@sandbox1:/usr/src/linux-source-5.2# make ARCH=x86_64 defconfig
vagy menuconfig

A menüvezérelt felületen részletesen beállítható minden kernel konfigurációs opció “menuconfig” választása esetén.

Kell még néhány függőséget telepíteni, míg végül jöhet a build, és lehet is installálni. Szerencsére az egész Linux-sandbox nem foglalt többet 5,5 GB-nál. Maga a fordítás még sok processzornál is eltart jónéhány percig. 🙂

root@sandbox1:/usr/src/linux-source-5.2# apt-get install libelf-dev libssl-dev:native
root@sandbox1:/usr/src/linux-source-5.2# make -jnproc bindeb-pkg

A “klasszikus” kernel fordítás lépései az alábbi link alatt érhetőek el. Ez már 20 éve is hasonlóan nézett ki. 🙂

https://www.linux.com/tutorials/how-compile-linux-kernel-0/

A szövegszerkesztő – vi

Ma egy szövegszerkesztőről van egy körülbelüli elképzelésünk. Na a vi nem ilyen. 🙂

A vi <filenév> paranccsal indul a szövegszerkesztő. Ilyenkor alapban parancs módban vagyunk. 🙂 Billentyűkkel lehet eljutni a szerkesztői módba. Szerkeszteni ugyanis szerkesztői módban lehet. 🙂 “O” (shift+o) billentyűvel egy új sort szerkeszthetünk az aktuális pozíció fölött – ezek között a nyilakkal közlekedhetünk, esetleg “:<sorszám>“-mal, parancs módban. “o” billenyűvel az aktuális pozíció alatt nyílik új sor. “i” betűvel az aktuális pozícióban tudunk beszúrni szöveget, “a” betűvel hozzáfűzhetünk szöveget az aktuális pozíciótól (append). 🙂 Szerkesztői módból az “esc” billentyűvel tudunk parancs módba visszalépni.

Hogy ez miért jó? Mert szinte minden terminálban, bármely UNIX és Linux rendszerben installálva van vagy installálható. Egyébként nem muszáj használni (“:h” -val segítség kérhető, amiből “:q“-val lehet kilépni :)). Van az editor vagy nano, ami jobb műkedvelőknek. Az ctrl szekvenciákkal vezérelhető. 🙂 Hogy mégis miért jó? A jó programozó tud vi-ban, akár osztott ablakban, szintaxis-kiemeléssel, kizárólag billentyűk lenyomásával akármit írni (!).

Nézzük tovább a használatot. Kilépés, ha nem módosítottunk – ellenkező esetben hibaüzenetet kapunk – a “:q“, kilépés módosítások elvetésével “:q!“. Kilépés mentéssel “:wq” vagy “shift+zz“. 🙂

Nem írnám le a teljes kezelést, az szorgalmi++. 🙂 Még részleteznék pár apróságot. Hogyan lehet keresni? Egész egyszerűen parancs módban “/<keresendő_sztring>” – “n” betűvel lehet lépkedni előre, “shift+n“-nel visszafelé a találatok között. Még fontos lehet az “undo”, visszavonás funkció, ez egész egyszerűen az “u” parancs. Egy sort a “dd” paranccsal tudunk törölni. Három sort “3dd” paranccsal. 🙂 Jó, nem?

Akkor nézzük a továbbiakban felsorolásszerűen.

Ugrás a sor végére: “$
Ugrás a sor elejére: “0
Beolvas egy file-t. és beszúrja az adott pozcióba: “:r <filenév>
Képernyő megosztása: “:split <filenév>
Képernyő függőleges megosztása: “:vsplit <filenév>
Navigáció a két osztott képernyő között: “ctrl+ww
Sor másolása: másolás: “yy” (yank), kivágás: “dd” (delete), beillesztés pozíció előtt: “P“, pozíció után: “p” (paste)
Kijelölés másolásra karakterenként: “v“, soronként: “V“, utána “y” vagy “d“, végül “p” vagy “P” a beillesztéshez, osztott képernyők között is működik 🙂
File vége: “shift+g“, eleje “g
Egy szó előre: “w“, hátra: “b

És akkor beszéljünk még egy dologról. Minden editor tudja a keresés és cserét. Nézzük meg ezt vi-ban. A parancs formátuma a következő: “:%s/<keresendő>/<cserélendő>/“, illetve ha minden sorban többször előfordulhat a keresendő és cserélendő sztring, akkor “:%s/<keresendő>/<cserélendő>/g” – a végén van egy “g“. Itt említeni illik a keresett kifejezéssel kapcsolatban az ún. reguláris kifejezéseket (reguar expressions). Ez az a formátum, ahogyan a keresendő sztring megadható. A sed parancs egyébként ugyanilyen formátummal működik, file(ok)-ban cserél sztringeket. (A sztring karakterfüzér.) RegExp részletek az alábbi link alatt. 🙂

http://vbence.web.elte.hu/regex_leiras.html

A végére még egy “elvetemült” dolog. 🙂 Lehet a bash shell-ünket is vi módban használni. Egyébként pl. az előző parancs előhozására a fel nyilat használhatjuk. Igazából a fel/le nyilakkal kereshetünk az előzőleg beírt parancsok között, sőt: a shell-ünk el is menti a .bash_history file-ba az előzőleg beírt parancsainkat, így ha újra kinyitjuk a shell-t is emlékezni fog a parancsainkra. 🙂 Fontos funkcionalitás még “sima” shell-ben az ugrás a sor elejére “ctrl+a“, sor végére “ctrl+e“, továbbá aktuális parancs megszakítása “ctrl+c“. De mi is az a vi módú shell? A home könyvtáramban létrehoztam a .inputrc file-t, a következő tartalommal.

gvamosi@gergo1:~$ cat .inputrc
set editing-mode vi

Újra “beléptem” a shell-be (kilépés ctrl+d-vel, és újraindítás). Innentől az “esc” billentyűvel parancsmódba kerülünk, vi parancsmódba. Minden ugyanúgy működik, ahogy vi-ban. Ez tényleg csak a legkeményebb admin-oknál van így beállítva. 😉

És hogy hogy lehet a szintaxis kiemelést (syntax highlight) bekapcsolni? Nálam, a Debian 10-ben elég egyszerűen. Nézzük.

gvamosi@gergo1:~$ sudo apt-get install vim
..
gvamosi@gergo1:~$ which vi
/usr/bin/vi
gvamosi@gergo1:~$ l /usr/bin/vi
lrwxrwxrwx 1 root root 20 Aug 26 2017 /usr/bin/vi -> /etc/alternatives/vi
gvamosi@gergo1:~$ l /etc/alternatives/vi
lrwxrwxrwx 1 root root 18 Oct 2 00:12 /etc/alternatives/vi -> /usr/bin/vim.basic

Telepítés (install) után az alapértelmezett vi editor a vim lesz, amiben a szintaxis kiemelés bekapcsolt. 🙂 Vi IMproved, a programmer’s text editor.

Mi az a UNIX? Honnan ered a Linux? Mi a csoda az a GNU?

A UNIX matematikai alapokon nyugszik. Igen, kell a matek! 🙂 Alapvetően két fő ágba sorolhatóak a UNIX operációs rendszerek. Ezek: System V illetve POSIX (Portable Operating System Interface for uniX).

A Linux a POSIX családba tartozik, ide tartozik még – a teljesség igénye nélkül – a BSD, a Mac OS X, a QNX és a Windows NT is. 🙂

https://hu.wikipedia.org/wiki/POSIX

Aztán vannak az ún. System V derivátumok, ezek – a teljesség igénye nélkül: AIX, SCO, Solaris, OpenSolaris és HP-UX.

https://hu.wikipedia.org/wiki/UNIX_System_V

A különbség abból adódik, hogy a POSIX később keletkezett, ezért pl. az IPC – az Inter Process Communication, vagyis a folyamatok közötti kommunikáció – újabb implementációt kapott. Ezen kívül több markáns különbség van pl. egy RedHat Linux és egy Solaris operációs rendszer kezelése között. Nem utolsó sorban a Linux rendszereken a GNU összes csomagja alapból helyet kapott, ami pl. egy Solaris UNIX esetében külön opció. 🙂

https://www.tutorialspoint.com/inter_process_communication/inter_process_communication_system_v_posix.htm

És a végére egy kis olvasnivaló a GNU-ról. A betüszó jelentése rekurzív (önhivatkozó) módon „GNU’s Not Unix”. 🙂

https://hu.wikipedia.org/wiki/GNU