Distribuce SuSE Linux detailněji - 2. část

Supportní databáze (pjanik_config)
Platí pro

SuSE Linux: Od verze 7.0

Úvodem

V dalším díle seriálu o distribuci SuSE Linux se podíváme na centrální konfigurační mechanismus této distribuce a na skript /sbin/SuSEconfig, který jej využívá. Zmíníme také další mechanismy, které distribuce používá k přizpůsobení svým uživatelům.

Jak to vlastně funguje a na co to je?

Já osobně zastávám názor, že vše je nejlépe pochopitelné na jednoduchém příkladu. Ukážeme si tedy na příkladu rozhraní lo (loopback), jak vlastně funguje mechanismus centrální konfigurace.

Nejprve však trošku teorie. Lokální rozhraní lo, neboli loopback, slouží zejména pro komunikaci s počítačem samým. Pokud např. chceme na svém domácím počítači, který nemá síťovou kartu ani jiné síťové rozhraní (např. pod VMware apod.) odlaďovat své webové stránky, použijeme k tomu webový server Apache, který necháme poslouchat právě na tomto rozhraní. Téměř všechny linuxové distribuce standardně definují toto rozhraní ihned při startu. SuSE Linux samozřejmě není výjimkou:

pavel@snowwhite:~ > /sbin/ifconfig lo
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:340 errors:0 dropped:0 overruns:0 frame:0
          TX packets:340 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
pavel@snowwhite:~ >
Toto virtuální rozhraní je používáno mnoha programy, které potřebují poslouchat na nějakém síťovém rozhraní. Co když ale toto rozhraní nepotřebujeme? Budeme hledat ve startovacích skriptech, kde se ta či ona konfigurace provádí?

Ano, někdy nám nezbude nic jiného, než to udělat. Distribuce SuSE Linux je však koncipována tak, aby podstatná část podobných činností a ztrácení času hledáním souborů v souborovém systému byla omezena. Nástrojem v tomto případě je právě centrální konfigurace a kombinace konfiguračního souboru /etc/rc.config a skriptu /sbin/SuSEconfig a dalších.

Ale slíbil jsem vám, že si něco ukážeme v praxi. Takže pojďme na to. Zakážeme startovacím skriptům, aby nakonfigurovali rozhraní loopback. Nejprve si nezvykle ukážeme, jak a kde se rozhraní lo konfiguruje a pak si teprve ukážeme, jak této konfiguraci zamezit.

Konfigurace zařízení loopback probíhá při startu systému ve skriptu /sbin/init.d/boot, o kterém jsme se zmínili v předchozím díle seriálu:

#
# initialize loopback device
#
if test "$START_LOOPBACK" = yes; then
    echo -n Setting up loopback device
    ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
    rc_status
    case `uname -r` in
    0.*|1.*|2.[01].*|2.2.?|2.2.??)
    route add -net 127.0.0.0 netmask 255.0.0.0 dev lo
    rc_status
        ;;
    esac
    rc_status -v1 -r
fi
Zde se tedy kontroluje, zda je proměnná START_LOOPBACK nastavena na hodnotu "yes". Pokud není, nic se neděje, nic nebudeme konfigurovat a pokračujeme v inicializaci systému. Pokud však tato proměnná hodnotu "yes" má, vypíšeme krátké hlášení, které uživateli říká, co se právě v systému děje (Setting up loopback device), nakonfigurujeme rozhraní lo tak, aby mělo IP adresu 127.0.0.1 a síťovou masku 255.0.0.0 a vypíšeme pomocí funkce rc_status, zda se tato činnost povedla. Ona se totiž nemusí povést. Může se stát, že si systémový administrátor vyměnil linuxové jádro za své vlastní, které např. nepodporuje síťové prostředky (což je dost nepravděpodobné, ale stát se to může :-).

Dále si pomocí příkazu uname -r ověříme, jakou verzi linuxového jádra máme. Pokud nemáme nějakou novější verzi (2.4.x), musíme ještě přidat záznam o nové síti do routovací tabulky. Novější jádra tento záznam přidají automaticky.

Z výše popsaného postupu tedy vidíme, že jednoduchým nastavením proměnné START_LOOPBACK na jinou hodnotu než "yes" zrušíme konfiguraci rozhraní lo. Samozřejmě můžeme postupovat i jinými způsoby, můžeme tento odstavec zakomentovat, smazat apod., ale tyto postupy nejsou systémové. Je mnohem jednodušší nastavit proměnnou START_LOOPBACK na hodnotu "no". Kde ji však najdeme?

Ano, jistě už tušíte, že právě v souboru /etc/rc.config. A opravdu:

#
# start loopback networking? ("yes" or "no")
# (this will be needed for all rpc services)
#
START_LOOPBACK="yes"
Stačí tedy jednoduše změnit hodnotu této proměnné libovolným editorem (asedit, ed, fte, GNU Emacs, XEmacs, gedit, jed, joe, jove, jmacs, nedit, nvi, pico, vi, xcoral, xvi apod. :-), který vám vyhovuje, na hodnotu "no". V některých případech je nutné po editaci spustit skript /sbin/SuSEconfig, protože některé proměnné mohou mít další efekty.

Podstatně systémovější, ale naprosto ekvivalentní postup, je možný pomocí instalačního a administrativního rozhraní YaST. Pomocí příkazu YaST si administrativní rozhraní spustíme a v menu System administration (případně v menu Správa systému, pokud máme správně nakonfigurován jazyk) nalezneme položku Change configuration file (Změnit konfigurační soubor). V novém menu si jenom vybereme proměnnou START_LOOPBACK a v textovém poli změníme řetězec "yes" na "no". Při dalším startu systému již nebude rozhraní lo nakonfigurováno.

Vazba /sbin/SuSEconfig a dalších skriptů na /etc/rc.config

Nyní se ještě podíváme na způsob, jakým spolu souvisí centrální konfigurační soubor /etc/rc.config a skript /sbin/SuSEconfig. Nejlépe si to opět ukážeme tak, že vybereme některou vhodnou proměnnou ze souboru /etc/rc.config, na které si budeme demonstrovat chování skriptu /sbin/SuSEconfig.

Vybereme si několik různých proměnných, které budou chování ilustrovat. Již výše jsme se zmínili o proměnné START_LOOPBACK, která ovlivňuje konfiguraci rozhraní lo.

Nyní si ukážeme proměnnou ROOT_LOGIN_REMOTE, která ovlivňuje možnost superuživatele přihlásit se vzdáleně. Soubor /etc/rc.config obsahuje následující pasáž:

#
# If you want to allow root logins from other machines, set ROOT_LOGIN_REMOTE
# to "yes".
#
ROOT_LOGIN_REMOTE="no"
Pokud tedy administrátor systému chce povolit připojování superuživatele vzdáleně, jednoduše nastaví tuto proměnnou na hodnotu "yes" a skript /sbin/SuSEconfig udělá vše ostatní za něj.

Co vše musí skript /sbin/SuSEconfig udělat? Podívejme se na pasáž, která obsluhuje právě tuto proměnnou:

#
# Now set ROOT_LOGIN_REMOTE.
#
if test -n "$ROOT_LOGIN_REMOTE" ; then
    if test "$ROOT_LOGIN_REMOTE" = "yes" ; then
        cat $r/etc/pam.d/login | \
            sed 's@^[[:space:]]*auth[[:space:]].*[/[:space:]]pam_securetty.so\([[:space:]]\|$\)@#&@' \
            > $r/etc/pam.d/login.SuSEconfig
        cat $r/etc/pam.d/rlogin | \
            sed 's@^[[:space:]]*auth[[:space:]].*[/[:space:]]pam_securetty.so\([[:space:]]\|$\)@#&@' \
            > $r/etc/pam.d/rlogin.SuSEconfig
    else
        cat $r/etc/pam.d/login | \
            sed 's@^[[:space:]]*#[[:space:]]*\(auth[[:space:]].*[/[:space:]]pam_securetty.so\([[:space:]]\|$\)\)@\1@' \
            > $r/etc/pam.d/login.SuSEconfig
        cat $r/etc/pam.d/rlogin | \
            sed 's@^[[:space:]]*#[[:space:]]*\(auth[[:space:]].*[/[:space:]]pam_securetty.so\([[:space:]]\|$\)\)@\1@' \
            > $r/etc/pam.d/rlogin.SuSEconfig
    fi
    check_md5_and_move $r/etc/pam.d/login
    check_md5_and_move $r/etc/pam.d/rlogin
fi
Možná to vypadá hůře než konfigurační soubor sendmailu, ale ve své podstatě je to velmi jednoduché. Pokud je proměnná ROOT_LOGIN_REMOTE nastavena na hodnotu "yes", je v souborech /etc/pam.d/login a /etc/pam.d/rlogin zakomentována řádka
auth     required       /lib/security/pam_securetty.so
která vyžaduje od příchozího spojení, aby jeho terminál byl uveden v souboru /etc/securetty. Pokud tedy uživatel nevyžaduje po příchozím spojení kontrolu terminálu oproti tomuto souboru (man securetty), jednoduše povolí vzdálené přihlášení uživatele root pomocí proměnné ROOT_LOGIN_REMOTE.

Další možnost provázání souboru /etc/rc.config s jinými skripty je možné spatřit např. u služeb. Ukážeme si to na příkladu programu gpm, který obsluhuje myši. Nejprve si ukážeme záznamy, které se týkají gpm v souboru /etc/rc.config:

#
# gpm will be started in runlevel 2 with this parameters
#
GPM_PARAM="-t ms -m /dev/mouse -M -t ps2 -m /dev/psaux -R /dev/gpmdata"

#
# Should gpm be started on this machine? ("yes" or "no")
#
START_GPM="yes"
Pro ty z vás, kteří používáte Linux denně a jeho administrace je pro vás denním chlebem, není třeba nic dodávat. Proměnná START_GPM obsahuje hodnoty "yes" nebo "no" podle toho, zda si administrátor systému přeje, aby gpm běželo nebo nikoli.

Administrátor našeho vzorového systému si přeje, aby gpm běželo a navíc si přeje, aby démon gpm dostal na příkazové řádce parametry "-t ms -m /dev/mouse -M -t ps2 -m /dev/psaux -R /dev/gpmdata". Přeje si tedy, aby gpm obsluhoval dvě myši - sériovou připojenou na port /dev/mouse (což bude pravděpodobně symbolický odkaz na první nebo druhý sériový port), ps/2 myš (zařízení /dev/psaux). Navíc si administrátor přeje, aby se gpm chovalo jako tzv. repeater a používalo soubor /dev/gpmdata pro výstup. Potom bude možné obě myši použít např. v systému X Window.

Jak je zařízena obsluha těchto proměnných? Opět velmi jednoduše. Balík gpm obsahuje startovací skript /sbin/init.d/gpm, který obsahuje vše potřebné:

...
test "$START_GPM" = yes || exit 0

# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
case "$1" in
    start)
        checkproc /usr/sbin/gpm && {
            killproc /usr/sbin/gpm 2> /dev/null
            echo -n "Re-"
        }
        echo -n "Starting console mouse support (gpm):"
        startproc /usr/sbin/gpm $GPM_PARAM || return=$rc_failed
        echo -e "$return"
        ;;
...
Nejprve si otestujeme, zda si superuživatel přeje spustit gpm a poté podle prvního argumentu zajistíme vše potřebné. Pokud je skript spuštěn s parametrem start, je gpm spuštěno s parametry uloženými v proměnné GPM_PARAM.

Závěr

V druhém díle seriálu o distribuci SuSE Linux jsme si ukázali centrální konfigurační mechanismus.

V příští části se budeme věnovat některým základním konfiguračním možnostem distribuce SuSE Linux.


Viz také:
o Distribuce SuSE Linux detailněji - 1. část

Klíčová slova: INSTALACE, KONFIGURACE, CONFIG, GPM, SUSECONFIG, MOUSE, LOOPBACK, BOOT, MYš

Kategorie: Dokumentace

SDB-pjanik_config, Copyright SuSE Linux AG, Nürnberg, Germany - Verze: 22. Nov 2000
SuSE Linux AG - Poslední změnu: 06. Dez 2000 provedl pavel.janik (sdb_gen 1.40.0)