Gentoo Logo

1.  Pokročilá konfigurace

Proměnná config_eth0 je jádrem konfigurace síťového rozhraní (v tomto případě eth0). Obsahuje seznam instrukcí, jež se mají provést pro jeho správnou funkci. Příkazy jsou prováděny jeden po druhém a aby bylo rozhraní považováno za funkční, musí alespoň jeden z nich proběhnout bez chyb.

Následuje seznam dostupných instrukcí.

Příkaz Popis
null nedělej nic
noop pokud je rozhraní v provozu a má přiřazenou adresu, skonči úspěšně
IPv4 nebo IPv6 adresa přidej rozhraní tuto adresu
dhcp, adsl nebo apipa (případně vlastní příkaz z dalšího modulu) Aktivuj modul, jenž poskytuje daný příkaz. Například dhcp zavede některý z modulů dhcpcd, udhcpc, dhclient či pump, jež všechny obsahují funkce pro práci s DHCP.

Můžete zadat i další přikaz (fallback), který se provede tehdy, pokud předcházející selže. Tento nouzový příkaz musí přesně odpovídat struktuře konfigurace.

Výše zmíněné konstrukce se samozřejmě dají kombinovat. Následují ukázky z praxe:

Výpis kódu 1.1: Ukázky konfigurace

# přidání tří adres IPv4
config_eth0=(
  "192.168.0.2/24"
  "192.168.0.3/24"
  "192.168.0.4/24"
)

# přidání jedné IPv4 adresy a dvou adres pro IPv6
config_eth0=(
  "192.168.0.2/24"
  "4321:0:1:2:3:4:567:89ab"
  "4321:0:1:2:3:4:567:89ac"
)

# Zachová adresu přiřazenou jádrem, pokud taková existuje,
# jinak se ji pokusí získat přes DHCP. Pokud DHCP selže, přidá statickou adresu
# určenou přes APIPA.
config_eth0=(
  "noop"
  "dhcp"
)
fallback_eth0=(
  "null"
  "apipa"
)

Poznámka: Pokud používáte modul ifconfig a přidáváte více než jednu adresu, bude pro každou další vytvořeno naaliasované rozhraní. Proto v předchozích dvou příkladech dojde k aktivaci rozhraní eth0, eth0:1 a eth0:2. Nic zvláštního se s nimi dělat nedá, protože jádro i další programy mezi nimi nerozlišují.

Důležité: Pořadí příkazů v bloku fallback je důležité. Pokud bychom nespecifikovali volbu null, byl by příkaz apipa proveden pouze tehdy, pokud by došlo k selhání příkazu noop.

Poznámka: (APIPA) a (DHCP) jsou popsány dále.

1.  Závislosti a síťování

Init skripty z /etc/init.d mohou záviset buď na konkrétním síťovém rozhraní a nebo obecně na "dostupnosti sítě". Závislost na službě net může znamenat různé věci, záleží na nastavení proměnné RC_NET_STRICT_CHECKING v souboru /etc/conf.d/rc:

Hodnota Popis
none vždy předpokládáme, že je služba net funkční
no Alespoň jedna služba net.* kromě net.lo musí běžet. Tato volba je vhodná například pro majitele notebooků s WiFi a pevnou ethernetovou síťovou kartou, protože vyžaduje, aby bylo funkční alespoň jedno připojení k síti.
lo Stejné jako volba no, avšak net.lo je rovněž započítáváno. Tato volba se může hodit lidem, kteří nepotřebují mít žádné konkrétní rozhraní aktivní při bootu.
yes aby byla služba net funkční, musí být v provozu všechna síťová rozhraní

Ale co když má net.br0 záviset na net.eth0 a net.eth1? net.eth1 může být bezdrátové zařízení nebo PPP spoj, a tudíž je ho potřeba konfigurovat předtím, než se přidá do bridge. Takovou závislost však není možno zařídit v souboru /etc/init.d/net.br0, protože je to symbolický odkaz na net.lo.

Řešení je vytvořit vlastní funkci depend()/etc/conf.d/net.

Výpis kódu 1.1: Závislost net.br0 v /etc/conf.d/net

# můžete použít všechny druhy závislostí, jež jsou podporovány (use, after, before)
depend_br0() {
  need net.eth0 net.eth1
}

Pro více informací viz sekci (init skripty).

1.  Jména a hodnoty proměnných

Jména proměnných jsou dynamická. Normálně jsou ve tvaru proměnná_${rozhraní|mac|essid|apmac}; například dhcpcd_eth0 určuje volby pro dhcpcd nad rozhraním eth0 a dhcpcd_essid určuje parametry dhcpcd pro jakékoli zařízení, které se připojí k ESSID "essid".

Je zde však jedna komplikace — jména rozhraní nemusí být pouze ethx. Například mnoho bezdrátových síťových karet používá jména jako wlanx či rax, rozhraní vytvářená uživateli (například bridge) mohou mít dokonce zcela libovolné jméno. Situace se stává ještě zajímavější, pokud přejdeme k bezdrátovým přístupovým bodům — ty mohou mít jména obsahující i nealfanumerické znaky, a protože jména proměnných mohou obsahovat ESSID, narážíme na problém.

Gentoo používá pro nastavování síťování bash a bash neumí používat proměnné s názvy obsahujícími znaky, které nejsou v anglické abecedě. Proto se provádí změna každého takového znaku na znak _, podtržítko.

Dalším z limitujících faktorů je samotný obsah proměnných — některé znaky musí být vloženy pomocí escape sekvencí. Například znaky ", ' a \ musí být v zápisu doplněny znakem \ těsně před nimi.

V tomto příkladu použijeme ESSID bezdrátové sítě, protože ty mohou obsahovat nejvíce speciálních znaků. Předpokládejme ESSID My "\ NET:

Výpis kódu 1.1: Ukázka jména proměnné

# funguje, i když je jméno domény špatně:
dns_domain_My____NET="My \"\\ NET"

# Výše uvedený příklad nastaví jméno DNS domény na My "\ NET pokaždé,
# když se bezdrátová síťová karta připojí na ESSID My "\ NET.

Aktualizace: 22. prosinec 2005

Poslední aktualizace původni verze tohoto dokumentu: 17. srpen 2014

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.