7.13. Einrichten des network-Skripts

Diesen Abschnitt müssen Sie nur lesen, wenn Sie eine Netzwerkkarte einrichten möchen.

Wenn Sie keine Netzwerkkarte haben, brauchen Sie höchstwahrscheinlich keine Konfigurationsdateien bezüglich Netzwerkkarten einrichten. In diesem Fall sollten Sie alle symbolischen Links mit Namen network aus den Runlevel-Ordnern entfernen (/etc/rc.d/rc*.d).

7.13.1. Einrichten von stabilen Namen für Netzwerkkarten

Die hier aufgeführten Anweisungen sind natürlich optional, wenn Sie nur eine Netzwerkkarte haben.

Mit Udev und modularen Netzwerktreibern ist keine stabile Durchnummerierung von Netzwerkkarten über Neustarts hinweg gewährleistet. Dies liegt daran, dass die Treiber parallel geladen werden und die Reihenfolge daher unvorhersagbar ist. Wenn ein Rechner z. B. eine Netzwerkkarte von Intel und eine von Realtek hat, so könne die Intel-Karte eth0 und die Realtek-Karte eth1 heißen. In manchen Fällen könnten die Karten nach einem Neustart aber genau umgekehrt zugewiesen worden sein. Um dieses Problem zu umgehen, sollten Sie Udev-Regeln erstellen und stabile Namen zu den Netzwerkkarten basierend auf deren MAC-Adresse oder Bus-Position zuweisen.

Wenn Sie die MAC-Adresse zur Identifikation der Netzwerkkarten benutzen möchten, dann können Sie diese mit dem folgenden Kommando herausfinden:

grep -H . /sys/class/net/*/address

Geben Sie jeder Netzwerkkarte (außer dem Loopback-Gerät) einen beschreibenden Namen (Beispiel: „realtek“) und erzeugen Udev-Regeln wie folgt:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:e0:4c:12:34:56", \
    NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:a0:c9:78:9a:bc", \
    NAME="intel"
EOF
[Anmerkung]

Anmerkung

Die Beispiele in diesem Buch funktionieren korrekt. Beachten Sie aber bitte, dass udev den linksgerichteten Schrägstrich nicht als Zeilenfortsetzung interpretiert. Wenn Sie udev-Regeln anpassen, dann muss jede Regel in einer einzigen physikalischen Zeile stehen.

Wenn Sie die Bus-Position als Schlüssel verwenden möchten, erstellen Sie eine Udev-Regel wie folgt:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0c.0", \
    NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0d.0", \
    NAME="intel"
EOF

Diese Regeln werden die Netzwerkkarten immer zu „realtek“ und „intel“ umbenennen, unabhängig von der ursprünglichen Nummerierung des Kernels. Die ursprünglichen Gerätenamen „eth0“ und „eth1“ existieren also nicht mehr, es sei denn Sie vergeben einen solchen „beschreibenden“ Namen im Schlüsselwort NAME ein. Benutzen Sie zur Einrichtung des Netzwerks nun also die beschreibenden Namen aus den Udev-Regeln anstelle von „eth0“.

Beachten Sie, dass die obigen Regeln nicht in jeder Systemkonfiguration funktionieren. MAC-basierte Regeln funktionieren z. B. nicht mit Bridges oder VLANs, weil diese die gleiche MAC-Adresse wie die zugehörige physikalische Netzwerkkarte verwenden. Wenn Sie virtuelle Netzwerkschnittstellen einsetzen, haben Sie zwei Möglichkeiten. Die eine ist der Schlüssel DRIVER="?*" nach SUBSYSTEM=="net" in MAC-basierten Regeln. Dies funktioniert nicht mit einigen älteren Netzwerkkarten, weil die Treiber keine DRIVER-Variable im uevent exportieren. Eine weitere Möglichkeit ist es, Bus-basierte Regeln zu verwenden.

Der zweite nicht funktionierende Fall sind Drahtlos-Karten die den MadWifi- oder HostAP-Treiber verwenden, weil diese zumindest zwei Schnittstellen mit der gleichen MAC-Adresse an der gleichen Bus-Position erzeugen. Der Madwifi-Treiber legt z. B. die Schnittstellen athX und wifiX an (wobei X für eine Zahl steht). Um in diesem Fall eine Unterscheidung machen zu können, verwenden Sie am besten den Schlüssel KERNEL=="ath*" nach SUBSYSTEM=="net".

Es könnte noch weitere Fälle geben, in denen die obigen Regeln nicht richtig funktionieren. Derartige Fehler werden zur Zeit an die Linux-Distributionen weitergeleitet, aber derzeit gibt es noch keine Lösung, die wirklich alle Fälle abdeckt.

7.13.2. Erstellen der Konfigurationsdateien für Netzwerkgeräte

Welche Netzwerkgeräte von den Skripten gestartet und gestoppt werden, hängt von den Dateien und Ordnern in /etc/sysconfig/network-devices ab. Dieser Ordner sollte pro Netzwerkgerät einen Unterordner in der Form ifconfig.xyz enthalten, wobei „xyz“ der Name des Netzwerkgerätes ist (zum Beispiel eth0 oder eth0:1).

Das folgende Kommando erzeugt die Beispieldate ipv4 für eth0:

cd /etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
EOF

Natürlich müssen die Werte der Variablen in jeder Datei angepasst werden um mit Ihrer tatsächlichen Systemkonfiguration übereinzustimmen. Wenn die ONBOOT-Variable auf „yes“ gesetzt ist, wird das network-Skript die Netzwerkkarte beim booten starten. Wenn sie auf irgendeinen anderen Wert gesetzt wird, ignoriert das Skript dieses Gerät und startet es dementsprechend auch nicht.

Der Eintrag SERVICE legt fest, wie die IP-Adresse vergeben wird. Die LFS-Bootskripte sind in Bezug auf IP-Adressen-Zuordnung modular aufgebaut. Durch das Erstellen weiterer Dateien in /etc/sysconfig/network-devices/services können Sie weitere Zuweisungsmethoden definieren. Das könnten Sie z. B. tun, um eine IP-Adresse über DHCP zu beziehen (dies wird im BLFS-Buch beschrieben).

Die Variable GATEWAY sollte die IP-Adresse Ihres Standard-Gateways enthalten. Wenn Sie kein Standard-Gateway haben, setzen Sie ein Kommentarzeichen vor die Zeile (#).

PREFIX muss die Anzahl der verwendeten Bits in der Netzwerkmaske enthalten. Jedes Oktett hat acht Bit. Wenn die Netzwerkmaske 255.255.255.0 lautet, dann werden die ersten drei Oktette benutzt (3x8 = 24 Bit) um das Netzwerk zu bezeichnen. 255.255.255.240 benutzt die ersten 28 Bit. Prefixe mit mehr als 24 Bit werden häufig von DSL- und Kabelbasierten Internet-Dienstleistern (ISP) verwendet. In diesem Beispiel (PREFIX=24) ist die Netzwerkmaske 255.255.255.0. Passen Sie sie Ihrem Subnetz entsprechend an.

7.13.3. Erstellen der Datei /etc/resolv.conf

Wenn Sie mit dem Internet verbunden sind, brauchen Sie höchstwahrscheinlich DNS-Namensauflösung um Internet Domänennamen zu IP-Adressen aufzulösen. Dies erreichen Sie am einfachsten, indem Sie die IP-Adresse des DNS-Servers (stellt Ihr Internet-Provider oder Netzwerkadministrator bereit) in /etc/resolv.conf eintragen. Erzeugen Sie die Datei mit diesem Kommando:

cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain {<Ihr Domänenname>}
nameserver <IP-Adresse des primären Nameservers>
nameserver <IP-Adresse des sekundären Nameservers>

# End /etc/resolv.conf
EOF

Natürlich müssen Sie <IP-Adresse des primären Nameservers> durch die echte IP-Adresse Ihres primären DNS-Servers ersetzen. Oftmals gibt es mehr als einen Eintrag (offizielle Nameserver müssen aus Fallback-Gründen immer auch einen sekundären DNS-Server haben). Die IP-Adresse könnte auch die eines Routers in Ihrem lokalen Netzwerk sein. Wenn Sie keinen zweiten Nameserver haben oder möchten, entfernen Sie den zweiten nameserver-Eintrag.