runlevel 2 vagy 3

 ( Nextra | 2017. december 9., szombat - 12:18 )

Tudom hogy mindkettő többfelhasználós init. Azt is tudom hogy egyedi initet a grub2 megjelenésekor az "e" betű megnyomásakor megjelenő ablakban kérhetek úgy, hogy beírom a 3-as számot a sor végére
így.
Na de mi a helyzet akkor ha ez nem vezet eredményre? Valami hiányzik a rendszerből? Tudtommal 3-as init esetén nem jöhetne be az X.
De bejön.

Nekem egy olyan egyedi initre volna szükségem, amely teljesen alap. Nincs hálózat, tűzfal, ehhez tartozó dolgok, nyomtató sem kell.
Semmi extra. Csak a videó, audió, cron, és at érdekel. Ezt az initet szeretném a Grub2- ben a menüből kiválasztani.
(Mageiát használok.)

Hogy kezdjek neki? A systemd nekem kínai. Annak ellenére hogy itt egy remek leírás van. Tuti hogy lesznek kérdéseim.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A linkelt leírásból nekem az jön le, hogy a klasszikus runlevel nem létezik systemd-ben, helyette targeteket kell használni. Itt írnak, hogy melyik runlevel melyik targetnek felel meg:

https://wiki.archlinux.org/index.php/systemd#Mapping_between_SysV_runlevels_and_systemd_targets

És alatta azt is írják, hogy hogy tudsz egy bizonyos targetbe bootolni.

systemd.unit=multi-user.target

Ha jól sejtem ezt kell a boot paraméterek közé raknod, és ez nagyjából a 3-as runlevelnek felel meg grafikus környezet nélkül.

Nos most volt időm ezzel foglalkozni, de nem akar összejönni.

Amit elértem az az, hogy a grub2-ben már megjelent a bejegyzés amit szeretnék.
Ezt a /etc/grub.d/40_custom fájl szerkesztésével értem el.

Amikor összehasonlítottam a Mageia normál, és recovery beírásait, (/boot/grub2/grub.cfg) azok csak a kernel paraméterek esetében tértek el egymástól.

normál esetén:
linux16 /boot/vmlinuz-4.9.50-desktop-1.mga6 root=UUID=fa1e2fa3-2a85-4350-b0af-cdb6f443eb07 ro nosplash quiet nokmsboot noiswmd noresume vga=794 audit=0

recovery esetén:
linux16 /boot/vmlinuz-4.9.50-desktop-1.mga6 root=UUID=fa1e2fa3-2a85-4350-b0af-cdb6f443eb07 ro failsafe

Amit én beírtam a customba az meg ez:
linux16 /boot/vmlinuz root=UUID=fa1e2fa3-2a85-4350-b0af-cdb6f443eb07 ro systemd.unit=multi-user.target quiet nosplash nokmsboot noresume vga=794

Persze előtte még átírattam a systemctl-lel a default.target-et így.
systemctl set-default multi-user.target

Állítólag ezzel az init 3-as indítást érem el. (sóhaj) Nos. Minden ugyanúgy bejött, mintha semmit nem csináltam volna.
Persze nem feledkeztem el a grub2 updatéról sem, hiszen akkor nem jött volna létre a bejegyzés!

Valaki please step by step!!

Egy olyan bejegyzést szeretnék, ami nem tölt be hálózatot, nyomtatót. X-et, csak a hangot, a dvb-c kártyát és az időzítőket (at, cron) szeretném elérni.
Bár olvastam hogy a systemd-nek van saját időzítője, de az előbb említetteket már ismerem.

systemctl disable ... minden ami nem kell es kesz.

Jo lenne ha kicsit elolvasnad mi is az az init, mert mar arrol is eleg nagy butasagokat irtal. Egyaltalan nem erted, hogy maga a sysVinit hogy mukodik. Ezt a nemhozzaertest pedig osszemosod a systemd-vel ami teljesen mas.

Szoval eloszor:
1. megnyugszik
2. elolvasod mi is az az init rendszer
3. elolvasod hogy mukodik a sysVinit
4. elolvasod hogy mukodik a systemd

Utana mar tudunk mirol beszelni

1. Oké.
2 Az init rendszer az indulásért felel. Régen az RH alapú rendszereknél az /etc/rc.d/init.d mappában voltak az indításért felelős scriptek.
A futási szinteket, ugyanitt az rc0.d rc1.d és így tovább mappákban írták elő. Hogy mi fusson az s kezdőbetűvel jelölték, hogy mi nem, az vagy nem volt benne vagy k kezdőbetűvel jelölték. (S mindezt úgy írom hogy nem olvastam el, hanem hülyeségeket írok.)
Ergo azt hiszem tudom hogy, hogy működik a sysvinit.
S ha ekkor a boot elején amikor kiírta a menüt a kijelölt lehetőségnél "e" betűt nyomtam, akkor betudtam írni a kernel paramétereknél hogy 3, és így az /etc/rc.d/rc3.d-ben lévő scriptek futottak le. Vagyis runlevel 3. De ezt a lehetőséget simán betudtam írni az akkor még sima grub menu.konfigjába. Ma legacy grub. (Biztos zöldségeket írok.)

3. A systemd szintén az indításért felel, mert ez váltotta le sokak bánatára a jól bevált sysvinitet.
Itt targetek vannak a szkriptek helyett. S egy csomó mindent betölt ha akarod, ha nem. Meghatározható hogy mi miután induljon el. Mert függenek egymástól.
S csak hogy értsük.

Jellemzők: init systemd
DBus függőség Kötelező? Nem Igen
Eszköz alapú aktiválás: Nem Igen
Eszközfüggő konfiguráció udev-vel: Nem Igen
Idő alapú aktíváclás: At,Cron / Szabadalmazott
Quota Management: Nem Igen
Automatikus szervizfüggőség kezelése: Nem Igen
Megöli a felhasználói folyamatokat a kijelentkezéskor: Nem Igen
Swap Management: Nem Igen
SELinux integráció: Nem Igen
Titkosított HDD támogatás: Nem Igen
Statikus kernel modul betöltése: Nem Igen
GUI: Nem Igen
Az összes gyermektípus felsorolása: Nem Igen
Sysv kompatibilis: Igen Igen
Interaktív indítás: Nem Igen ------------ bár ha a boot indulása után mindjárt megnyomtam a nagy I betűt, akkor működött.
Alkalmazható a nem x86 alapú rendszereknél: Igen Nem
Több disztró által elfogadva: Igen Igen
Párhuzamos szerviz indítás: Nem Igen
Erőforrás-korlátozás szolgáltatásonként: Nem Igen
Könnyen bővíthető indítási parancsfájl: Igen Nem --------- S itt van a kutya elásva
Külön kód és konfigurációs fájl: Igen Nem
Automatikus függőségszámítás: Nem Igen
Gyors hibakeresés: Igen Nem

S ha hiszed ha nem, én ezt olvastam ki az ARCH Linux említett doksijából.

"Change default target to boot into

The standard target is default.target, which is aliased by default to graphical.target (which roughly corresponds to the old runlevel 5). To change the default target at boot-time, append one of the following kernel parameters to your bootloader:
systemd.unit=multi-user.target (which roughly corresponds to the old runlevel 3),
systemd.unit=rescue.target (which roughly corresponds to the old runlevel 1).
Alternatively, you may leave the bootloader alone and change default.target. This can be done using systemctl:
# systemctl set-default multi-user.target"

S látom amit írsz: systemctl disable x.target
De ezt hová írjam? Ha már elindult a rendszer utána lőjem ki a nem kívánatos dolgokat? Ezt eddig is tudtam.

Én nem ezt akarom, Azt akarom hogy a gép úgy bootoljon, hogy eleve be se töltse a nem kívánatos dolgokat.
Ezért hoztam létre egy grub boot menüpontot. Itt szándékoztam megadni neki az init szintet.

Ezek ismeretében mi az amit nem tudok jól?

A sysvinit rendszerben simán megoldottam. A grub menüpontban megadtam hogy a 4-es initet indítsa, az /etc/rc.0/rc4.d-ben meg be symlinkeltem az engem érdeklő s kezdőbetűs indítószkripteket. S működött.
Most ugyanezt nem tudom megoldani egyelőre a ststemd-vel.

Kerdeseim:

Elolvastad akkor hogy mit csinal a disable? :D (ha mar iserted az RH rendszereket es akkor tuti hasznaltad a chkconfig-ot, talan remlik valami)

Akkor vajon mit csinal a sima stop? Mi a kulonbseg?

Vajon tudsz e sajat targetet definialni systemd alatt?

Ha tudsz definialni, vajon be tudod e allitani, hogy mi legyen benne, mint ahogy a multi-user.target-ben benne vannak a dolgok?

Vajon egy parancsot hova kell begepelni (systemctl disable service)?

Vajon, ha csak egy-ket szervizt akarsz elinditani, akkor szukeseged van e a systemd-re, vagy akar vissza is allhatsz sysVinit-re, amit "ismersz"?

Mar ne erts felre, de jotanacs volt, hogy olvasd el. Ugy nez ki hogy elolvastad, de tovabbra sem ertetted meg. Mondhatod, hogy mekkora paraszt vagyok, hogy ahelyett, hogy bemasolnam neked a nextra.target konfigjat es az asszes parancsot azt mondom olvass, de szerintem igy tanulsz. Az en celom meg az lenne - akar helyetted is - hogy tanulj.

Meg oszinten idom sincs helyetted megcsinalni. :D

Leszogezhetjuk, hogy nem tudtam segiteni. Bocs.
Sok sikert.

Szerintem a set-default meg a systemd.unit=... az ugyanazt kéne, hogy csinálja, hasonlítsd össze a /lib/systemd/system könyvtárban a a graphical.target és a multi-user.target fájlt, elvileg a display-manager.service-ben különbözik a kettő.

Boot után meg egy
systemctl list-units --type target --all
paranccsal nézd meg, hogy mi töltődött be, és mi nem.

Nos. Amit eddig kreáltam...

Nem tagadom hogy nem értek hozzá.
Hiába olvasom, úgy látszik beszedtem az értelmezésgátló tablettámat.

Kettő multi-user cuuc van. S egyiktől sem lettem okosabb.
Nálam az /etc/systemd/system/multi-user.wants mappa létezik, melyben service dolgok vannak. Én már készítettem egy ilyen wants-ot magamnak, de most módosítottam a dolgon.
Ezek a service dolgok hasonlítanak a leginkább a már említett sysvinithez.

De sajnos akkor sem tudom egyelőre hogy azt hogyan hívjam be. Hol hívjam be? Hová kell beírnom hogy végrehajtódjon?

A másik multi-user az már target, és az /usr/lib/systemd/system mappában található.

Abban meg ez van:

[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

Én ebből annyit értek, hogy ez az egység függ a basic.target-től, és összeveszik a rescue dolgokkal. Illetve hogy el van különítve nyilván az X-től.

Ergo nekem ez a multi-user.target nagyon kevés infóval bír.

Azt is gondolom hogy a basic egy alap. S nyilván a rendszer enélkül el sem indul. Tehát ez a basic.target ez kötelező.
S mi van benne?

Description=Basic System
Documentation=man:systemd.special(7)
Requires=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sysinit.target sockets.target paths.target slices.target tmp.mount

Ez függ a sysinit.targettől, és még akarja a ... mindegy nekem ettől sem jött meg az értelmezési képességem.
Nem látom át.

Jelenleg az van hogy a grub customba beszúrtam: init 2. Mert a kettes initet szeretném elindítani. De eddig nem jött össze.
Ezeket hoztam össze:
/etc/systemd/system/runlevel2.target.wants ---- tehát elvileg elérhető a kettes init.
Ebben acpid, at, crond, getty, smartd servicék. --- ezeknek kéne lefutnia. (Remélem nem hagytam ki semmi fontosat)

S az a helyzet hogy ezt már a legelején megcsináltam, de úgy látszik ez a rendszer nem tolerálja a változtatásokat.
S persze azt sem felejtettem le, hogy

# systemctl set-default runlevel2.target
# systemctl get-default
multi-user.target

S most ha újraindítom a gépet, semmi változás nem történik, ugyanúgy bejön az X, meg minden.
A ilyenkor borulok ki, mert nem értem, ha mindent a leírásnak megfelelően csinálok, miért nem működik. Sajnálom.