Falls ja, kann das kleine Paket netenv nützlich für Sie sein. Beim Booten des Laptops können Sie die aktuelle Netzwerkumgebung mit Hilfe eines einfachen Menüs auswählen. Sind Sie zum ersten Mal in einer Umgebung, so können Sie einige Grunddaten zur späteren Verwendung eingeben.
Netenv erstellt eine Datei mit einigen Variablen, die die aktuelle Netzwerkumgebung beschreiben. Diese Datei wird dann beim PCMCIA-Start benutzt (so z.B. in Debian, RedHat und SuSe). Der Mechanismus kann auch für Laptops genutzt werden, die eine Netzwerkkarte (oft NIC genannt) onboard haben.
So sieht die Auswahlbox von netenv aus:
Neben der Grundfunktionalität der Konfiguration der NIC kann netenv für weitere Aufgaben genutzt werden:
Nützlich z.B. dann, wenn man das Laptop mal standalone mit dem Touchpad und mal mit einem CRT Monitor und externer Maus nutzen möchte.
Mit den netenv-Daten kann eine geeignete /etc/resolv.conf angelegt werden.
Mit einer Zuweisung für z.B. PRINTER kann der Defaultdrucker gesetzt werden.
So können lästige Timeouts vermieden werden, wenn ohne Verbindung zu einem Netz gearbeitet wird und nur lokale Dateien betrachtet werden sollen.
Wenn ich eine permanente Verbindung zu meinem Mailserver habe, nutze ich netenv, um fetchmail als Dämon aufzurufen. Die Mail wird dann zyklisch abgeholt.
Wenn Sie einen Palm nutzen, können Sie /dev/pilot auf das korrekte serielle Device linken wenn ein Cradle angeschlossen ist. Andernfalls zeigt der Link auf den IRDA-Port.
Netenv gibt es als Paket für Debian und RedHat Linux. Mandrake- und SuSe-Benutzer können das RedHat-Paket benutzen. Selbstverständlich ist auch ein tar-File verfügbar. Für das Menüsystem benötigt netenv dialog(1) bzw. gdialog (in den genannten Distributionen immer enthalten).
Ein Wort an alle Experten: Ich versuche hier, die Dinge mit Blick auf Nicht-Experten zu erklären - also bitte Geduld.
Erstes Erstellen einer Umgebungsbeschreibung
Bemerkungen für SuSe 7.3 Benutzer
Aber das wissen Sie wohl schon ...
Dort ist sowohl das tar-File als auch das RedHat-Paket verfügbar. Letzteres sollte auch für Mandrake und Suse benutzbar sein.
Debian-User
Netenv gibt es schon recht lange als Debian-Paket. Näheres siehe unter http://www.debian.org/distrib/packages.
rpm -i netenv-0.94-2.i386.rpmIn Debian z.B.:
dpkg -i netenv-0.92-2.i386.debAndernfalls:
tar xvf netenv-0.94-2.tarEs wird damit ein Shellskript namens netenv, ein kleines Hilfsprogramm trpnc, Konfigurationsbeispiele sowie diese Doku installiert. Abhängig von der Distribution ist nun ein wenig Handarbeit nötig - oder eben auch nicht.
Das netenv-RPM wurde unter RedHat 6.1 gepackt. Damit kann es in allen Distributionen, die RPM nutzen, installiert werden.
Das Postinstall-Script sorgt dafür, daß
lulu:/home/bav> tail -2 /etc/rc.d/rc.sysinit # Added by package netenv on 06.03.2000 19:53:10 /usr/sbin/netenvFerner wird /etc/sysconfig/network-scripts/ifcfg-eth0 geändert. Direkt nach der Erstinstallation von Redhat sieht diese Datei z.B. so aus:
lulu:/etc/sysconfig/network-scripts>>> cat ifcfg-eth0 DEVICE=eth0 BROADCAST=192.168.200.255 IPADDR=192.168.200.201 NETMASK=255.255.255.0 NETWORK=192.168.200.0 ONBOOT=yesDie Installation von netenv fügt zwei Zeilen hinzu:
lulu:/etc/sysconfig/network-scripts>>> tail -3 ifcfg-eth0 ONBOOT=yes # Added by package netenv on 06.03.2000 19:53:10 if [ -r /tmp/netenv ]; then . /tmp/netenv; fi
lulu:/etc/init.d> tail -3 boot.local # # Added by package netenv on 06.12.2002 10:45:10 /usr/sbin/netenvDamit wird dafür gesorgt, daß netenv beim Systemanlauf überhaupt aufgerufen wird. Netenv nimmt als zu konfigurierende NIC eth0 an. Daher wird an die Datei
/etc/sysconfig/network/ifcfg-eth0die Zeile
if [ -r /tmp/netenv ]; then . /tmp/netenv; fiangehängt. Das ganze sieht dann wie folgt aus:
lulu:/etc/sysconfig/network> cat ifcfg-eth0 FIREWALL="YES" BOOTPROTO='static' BROADCAST='nn.nn.nn.nn' IPADDR='nn.nn.nn.nn' NETMASK='nn.nn.nn.nn' NETWORK='nn.nn.nn.nn' REMOTE_IPADDR='' STARTMODE='onboot' UNIQUE='oxTw.yHaVEFCrUXE' WIRELESS='no' if [ -r /tmp/netenv ]; then . /tmp/netenv; fiDie Einträge IPADDR, NETMASK usw. rühren von der Grundinstallation her und brauchen nicht gelöscht werden. Sie werden durch die Zuweisungen in /tmp/netenv übersteuert. In diesem Beispiel wird unterstellt, daß die verwendete NIC keine PCMCIA-Karte ist. Falls doch, muß aus
STARTMODE='onboot'
STARTMODE='hotplug'werden.
mweb@guru:/etc/rc.d > tail -3 boot.local # before we're going to the first run level. # # Added by package netenv on 06.02.2001 20:28:10 /usr/sbin/netenvFür PCMCIA-Karten wird ein Eintrag in /etc/pcmcia/network.opts vorgenommen:
mweb@guru:/etc/pcmcia > tail -2 network.opts esac # Added by package netenv on 06.02.2001 20:28:10 if [ -r /tmp/netenv ]; then . /tmp/netenv; fiFalls das Laptop eine eingebaute Netzwerkkarte hat und so auf PCMCIA verzichtet werden kann, können die mit YAST eingetragenen Parameter wie folgt übersteuert werden (manuell eintragen !):
mweb@guru:/etc/rc.d > head -16 network #! /bin/sh # Copyright (c) 1996 SuSE GmbH Nuernberg, Germany. All rights reserved. # # Author: Florian La Roche, 1996 # Werner Fink , 1996 # Burchard Steinbild , 1996 # Rolf Haberrecker , 1998 # Werner Fink (based on a patch of Andries Brouwer) 1999 # # /sbin/init.d/network # . /etc/rc.status . /etc/rc.config if [ -r /tmp/netenv ] ; then . /tmp/netenv; fi
Onboard-NIC's allerdings erfordern eine geänderte /etc/network/interfaces. Man kann das mit netenv-Mitteln machen, siehe das Beispielskript netenv_setup_debian_example. Tut man nichts, wird die NIC immer so wie bei der Systeminstallation konfiguriert - ganz gleich, was man in netenv ausgewählt hat.
tar zxvf netenv-0.94-2.tar.gz cd netenv-0.94-2 make make install # ab hier muß das als user root geschehen ! make configAbhängig von der Distribution muß der letzte Schritt zur Einbindung von netenv make config evtl. manuell vorgenommen werden.
netenv muß vor dem normalen Netzwerk- oder PCMCIA-Start aufgerufen werden. Suchen Sie nach /etc/init.d/boot.local oder einem Äquivalent. Für weitere Details siehe den SuSE 8.1 Abschnitt.
Nachdem so sichergestellt ist, daß netenv beim Systemanlauf aufgerufen wird, müssen die Konfigurationsdaten von den Netzwerk scripts gelesen werden. Aktuelle Distributionen nutzen ifup um eine vorkonfigurierte Netzwerk-Karte zu starten. Dann siehe den SuSE 8.1 Abschnitt für weitere Details.
Eine häufige Fehlerquelle besteht in der Verwechslung von eth0 und eth1 wenn es eine onboard NIC und eine PCMCIA NIC. Oft ist eth0 onboard und eth1 PCMCIA NIC. Man kann das mit dmesg | grep eth und lspci überprüfen.
Netenv prüft ob eine eth1 vorhanden ist. Dies ist allerdings unzulänglich, da der Laptop zum Zeitpunkt der Installation vielleicht gerade in einer anderen Konfiguration betrieben wurde.
Dazu wird dialog(1) benutzt, ein einfaches und den meisten Benutzern vertrautes Menüsystem. Der Bootvorgang wird solange angehalten, bis der Benutzer seine Wahl getroffen hat. Für eine voreingestellte Umgebung reicht es, einmal CR zu drücken.
Wenn man "lilo" als Bootmanager benutzt, kann man alternativ auch z.B. eingeben:
linux NETENV=lavieDamit wird eine Shellvariable "NETENV" mit dem Wert "lavie" definiert. In meinem Fall heißt das: Ich bin mit meinem Laptop namens lulu im Büro. Die Datei mit den Zuweisungen für IP-Addresse usw. hat den Namen /etc/netenv/lulu-lavie. Der Linuxkern startet den init-Prozess mit der Variablen NETENV als Teil seiner Umgebung. Das gleiche tut dann init mit den sog. rc-Skripten.
Das netenv-Skript prüft, ob NETENV gesetzt ist. Falls ja, wird der Hochlauf fortgesetzt, ohne daß das Auswahlmenü erscheint.
Wenn die aktuelle Umgebung bestimmt ist, kopiert netenv die zugehörige Beschreibungsdatei nach /tmp/netenv.
Diese Datei hat die Rechte 644, ist also von jedem Benutzer lesbar. Sie kann so für benutzerspezifische Konfiguration genutzt werden.
netenvEs erscheint eine Eingabemaske, die nur eine Wahlmöglichkeit bietet:
new Set_up_new_environmentEs werden dann nacheinander abgefragt:
Enter the current IP-Address or the keyword dhcp ... Enter the netmask of the current subnet ... Enter the IP-Address of the current network ... Enter the Broadcast-Address of the current network ... Enter the Gateway-Address of the current network ... Enter the IP-address of the current nameserver ...Falls man sich in einem Netzwerk mit DHCP-Server befindet, gibt man statt der IP-Addresse dhcp ein. Es wird dann eine /tmp/netenv erstellt, die nur
BOOTPROTO='dhcp' STARTMODE='hotplug'enthält. Alle anderen Werte werden dann gemäß der DHCP-Konfiguration ermittelt. Falls die NIC onboard ist, sollte netenv
STARTMODE='onboot'gesetzt haben.
Bei statischer IP-Addresse wird nach Eingabe des Wertes für die folgenden Werte ein in vielen Fällen sinnvoller Vorschlag eingeblendet.
Es kommt dann die Frage, ob diese Konfiguration gesichert werden soll:
Do you want to save this configuration ?Für den Namen, den man hier angibt, bitte keine Leerzeichen verwenden !
netenv bietet abhängig von der Distribution an, das Netzwerk zu restarten und so die Änderungen zu aktivieren.
Andernfalls kann man bei einer PCMCIA-NIC entweder die Karte entnehmen und wieder einführen oder als Benutzer root das PCMCIA-Skript ausführen:
/etc/init.d/pcmcia restartIn beiden Fällen sollte der cardmanager aus dem PCMCIA-Paket aktiv werden und die Schnittstelle konfiguriert werden.
Ein ping auf die angegebene Gateway-Addresse wird es zeigen !
Falls nicht: Leuchtet die Link-LED ? Prüfen Sie die Ausgabe von
ifconfig eth0
Das gerade beschriebene Vorgehen ist auch dann zu wählen, wenn bei laufendem Laptop zwischen zwei Netzwerkumgebungen gewechselt werden soll. Auch hier ist ein Reboot nicht nötig - wir nutzen ja Linux ...
Diejenigen, die statt PCMCIA eine Netzwerkkarte onboard nutzen, müssen ihr Netzwerk restarten.
In RedHat 7.0 oder SuSE dazu z.B..
/etc/init.d/network restartNetenv führt dies bei entsprechender Bestätigung aus.
/etc/netenv/<NODE-NAME>-<VALUE-OF-VARIABLE-NETENV>Die Datei, die den Hostnamen des Laptops hat, erscheint im Auswahlmenü immer ganz oben. Hier reicht also einmal auslösen, um den Bootvorgang fortzusetzen. In dieser Datei sollte also sinnvollerweise die Beschreibung der am häufigsten genutzten Netzwerkumgebung liegen.
Die Beschreibungsdateien enthalten Zuweisungen in Shell Syntax, z.B.
netenv_id=At_Home_LCD_WheelMouse_pcmcia ... IPADDR=123.456.78.9 ... NETSCAPE_PROXY_TYPE=2Leerzeichen führen hier (wie immer in der Shell) zu Problemen. Für eine erfolgreiche Konfiguration einer Netzwerkkarte sind mindestens Zuweisungen von
IPADDR NETMASK NETWORK BROADCASTerforderlich. Abhängig von der jeweiligen Situation kann auch
GATEWAY DNS_1notwendig sein. Man kann hier beliebige Variablendefinitionen einfügen - Hauptsache, alles bleibt syntaktisch korrekt. Eine Zuweisung in der Form
NETENV_SCRIPT=/etc/netenv/netenv_setupnimmt eine Sonderstellung ein. Wenn die hier angezogene Datei lesbar ist, wird netenv diese Datei nach der Auswahl der aktuellen Netzwerkumgebung ausführen (genauer: sourcen).
Achtung ! Dies gescheht in einem frühen Status des Bootvorgangs. Es ist noch kein Netzwerk aktiv ! NETENV_SCRIPT wird mit root-Rechten ausgeführt !
Mit Hilfe des hier angezogenen Skriptes kann man dann etliche sinnvolle Sachen machen. Dazu mehr bei den Beispielen.
Diese Beispiele sind aufeinander aufbauend beschrieben. Also bitte hintereinander lesen !
lulu:/etc/netenv>>> cat lulu-touch-pad netenv_id=StandAlone_Touchpad_no_eth STARTMODE=manual export XF86CONFIG_FILE=/etc/X11/XF86Config-4-lcd-touch NETENV_SCRIPT=/etc/netenv/netenv_setup # This may be used to edit ~/.netscape/preferences.js NETSCAPE_PROXY_TYPE=3Dies nutze ich, wenn mein Laptop keine Verbindung zu einem Netz hat.
Der Wert der Variablen netenv_id (wie gesagt: Bitte ohne Leerzeichen) wird als Beschreibung im Auswahlmenü benutzt.
Es wird keine IP-Addresse zugewiesen. Durch das STARTMODE=manual wird beim Systemanlauf keine NIC konfiguriert. Ich setze NETENV_SCRIPT=/etc/netenv/netenv_setup. Dieses ist eine Datei mit Shell-Befehlen. Sie ist dieser Dokumentation hier beigefügt.
Das Beispiel ist einfach gehalten und kann so als Ausgangsbasis für eigene Anpassungen dienen. Hier relevanter Code ist:
lulu:/etc/netenv>>> cat netenv_setup ... # Simple way to configure the X-Server if [ -r $XF86CONFIG_FILE ]; then echo $XF86CONFIG_FILE will be used for configuring the X-Server ... mv /etc/X11/XF86Config /etc/X11/XF86Config.old ln -s $XF86CONFIG_FILE /etc/X11/XF86Config fi ...Da ich XF86CONFIG_FILE einen Wert zugewiesen habe, wird ein Link angelegt. Diesmal von der Beschreibungsdatei, die ich für mein LCD mit Touchpad erstellt habe.
Typischerweise führe ich mit netenv_setup alle die Aktionen aus, für die der User root nötig ist und die das ganze Systeme betreffen. Einstellungen hingegen, die nur für meine Arbeitsumgebung wichtig sind, werden in meiner .xinitrc getroffen. Dazu ein Beispiel:
NETSCAPE_PROXY_TYPE nutze ich in meiner ganz privaten Konfiguration:
lulu:/home/bav> cat .xinitrc #!/bin/sh ... if [ -r /tmp/netenv ]; then . /tmp/netenv fi if [ -n "$NETSCAPE_PROXY_TYPE" ]; then ~/tools/edit-ns-preferences $NETSCAPE_PROXY_TYPE fi ...Das angezogene Skript edit-ns-preferences findet sich bei der netenv-Dokumentation. Ich vermeide so unnötige Network-Timeouts, wenn ich den Browser starte.
lulu:/etc/netenv>>> cat lulu-lavie # Networkenvironment: netask netenv_id="lavie_pcmcia_dhcp" export BOOTPROTO=dhcp export STARTMODE=hotplug export PRINTER=cc_hp NETSCAPE_PROXY_TYPE=2 FETCHMAIL_POLL_INTERVALL=900Im Büro bekomme ich meine Netzwerkkonfiguration von einem DHCP-Server. STARTMODE=hotplug ist gesetzt, weil mein Laptop keine onboard-NIC hat und daher die PCMCIA-NIC genutzt werden muß.
Mit PRINTER=cc_hp wird der Defaultdrucker auf den Drucker im Büro gesetzt. NETSCAPE_PROXY_TYPE=2 aktiviert die automatische Proxykonfiguration im Netscape.
Wenn ich im Büro arbeite, möchte ich, das zyklisch Email abgeholt wird. Dazu dient FETCHMAIL_POLL_INTERVALL. Folgende Zeilen in meiner ~/.xinitrc starten fetchmail als Dämon, der dann alle 15 min gemäß den Definitionen in meiner ~/.fetchmailrc arbeitet:
if [ -n "$FETCHMAIL_POLL_INTERVALL" ]; then fetchmail -d $FETCHMAIL_POLL_INTERVALL fi
lulu:/etc/netenv>>> cat lulu netenv_id=At_Home_Docking_LCD_WheelMouse_onboard_VPN IPADDR=nnn.nn.nnn.nnn NETMASK=nnn.nnn.nnn.nnn NETWORK=nnn.nn.nnn.nnn BROADCAST=nnn.nn.nnn.nnn GATEWAY=nnn.nn.nnn.nnn SEARCH=foo.bar.com DNS_1=nnn.nn.nn.nn DNS_2=nnn.nn.nn.nn FETCHMAIL_POLL_INTERVALL=900 # If the variable NETENV_SCRIPT points to an readable file, # it will be run when netenv is executed NETENV_SCRIPT=/etc/netenv/netenv_setup ICEWM_INCLUDE_FILE=home # This defines my CRT with 1024x768 and a wheelmouse XF86CONFIG_FILE=/etc/X11/XF86Config-4-lcd-wheel # This may be used to edit ~/.netscape/preferences.js NETSCAPE_PROXY_TYPE=2 # This may be used to edit ~/.opera/opera6.ini OPERA_PROXY_FILE=proxy-fsc.ini # NIC is in the docking unit - like it were onboard STARTMODE='onboot'Aus der netenv_setup ist hier folgender Abschnitt von Bedeutung:
lulu:/etc/netenv>>> cat netenv_setup ... PROFILE=$1 ... if [ "$PROFILE" = "default" ]; then print_action linking /dev/pilot rm -f /dev/pilot; ln -s /dev/ttyS0 /dev/pilot print_status print_action calling ptal-init start /usr/sbin/ptal-init start print_status else # When there is no docking station, start irattach appropiately and # link /dev/pilot to ircomm0. print_action running irattach /usr/sbin/irattach /dev/ttyS3 -s print_status print_status linking /dev/pilot rm -f /dev/pilot; ln -s /dev/ircomm0 /dev/pilot print_status fi ...netenv_setup wird mit dem Parameter PROFILE aufgerufen, der hier den Wert "default" hat (sonst immer Name der Beschreibungsdatei abzüglich Hostname).
Zu Hause habe ich einen Cradle für meinen Palm. Daher sorge ich dafür, daß /dev/pilot auf den entsprechenden seriellen Anschluß zeigt. Ferner muß die Software für meinen HP Officejet gestartet werden. In allen anderen Umgebungen kann ich den Palm nur über IRDA ansprechen. ptal braucht dann nicht gestartet werden.
Zu Hause befindet sich mein Laptop in einer Docking-Unit. Diese enthält eine NIC. Um diese zu verwenden, muß
STARTMODE='onboot'gesetzt werden.
Will man nun seine /etc/hosts nicht jedesmal manuell editieren, kann folgender Mechanismus helfen. Für mich ist er auch deshalb praktisch, wenn ich in unterschiedlichen Umgebungen Rechner mit gleichen Namen aber unterschiedlichen IP-Nummern antreffe.
Ich habe in meine /etc/hosts Marken wie folgt eingetragen:
lulu:/home/bav> cat /etc/hosts ... # netenv hosts begin # netenv hosts end ...In meiner aktuellen Beschreibungsdatei definiere ich eine Reihe von Rechnern mit den dazugehörigen IP-Addressen, die ich erreichen möchte:
NETENV_HOST_ENTRIES="192.168.10.11 abba:192.168.10.12 bebe:192.168.10.3 alfa-sw:\ 192.168.10.4 beta-sw:192.168.10.13 coca:192.168.10.14 cola"Folgendes Codefragment aus meiner /etc/netenv/netenv_setup sorgt nun dafür, daß nach Auswahl der Umgebung automatisch /etc/hosts editiert wird:
if [ -n "$NETENV_HOST_ENTRIES" ]; then if egrep '^# netenv hosts begin$' /etc/hosts > /dev/null 2>&1; then ( awk 'NR==1,/^# netenv hosts begin$/' /etc/hosts echo $NETENV_HOST_ENTRIES | awk -F'\:' '{ for ( j=1; j<=NF; j++ ) print $j }' awk '/^# netenv hosts end$/,/*/' /etc/hosts ) > /etc/hosts.netenv mv /etc/hosts.netenv /etc/hosts chmod 644 /etc/hosts echo netenv_setup: /etc/hosts was modified ... fi else if egrep '^# netenv hosts begin$' /etc/hosts > /dev/null 2>&1; then ( awk 'NR==1,/^# netenv hosts begin$/' /etc/hosts awk '/^# netenv hosts end$/,/*/' /etc/hosts ) > /etc/hosts.netenv mv /etc/hosts.netenv /etc/hosts chmod 644 /etc/hosts echo netenv_setup: /etc/hosts was cleaned up ... fi fiDie /etc/hosts stellt sich danach wie folgt dar:
... # netenv hosts begin 192.168.10.11 abba 192.168.10.12 bebe 192.168.10.3 alfa-sw 192.168.10.4 beta-sw 192.168.10.13 coca 192.168.10.14 cola # netenv hosts end ...Alle diese Rechner sind für mich vertrauenswürdig, daher nutze ich in meiner ~/.xinitrc diesen Mechanismus und sorge noch dafür, daß automatisch X-Displays von diesen Rechner akzeptiert werden:
XHOST_PLUS_LISTE=`awk '/^# netenv hosts begin$/,/^# netenv hosts end$/' /etc/hosts | awk '!/^#/ {print $2}'` xhost $XHOST_PLUS_LISTEAnschließend liefert xhost mir dann:
lulu:/home/bav> xhost access control enabled, only authorized clients can connect INET:cola INET:coca INET:beta-sw INET:alfa-sw INET:bebe INET:abba
Der Mechanismus, den David Hinds in seinem PCMCIA-Paket implementiert hatte, schien mir immer hinreichend (Skript network, Teil des pcmcia-package). Ein Ausschnitt macht deutlich, was dort geschieht:
# Update DNS stuff cp /etc/resolv.conf /etc/resolv.new echo "# $DEVICE begin" >> /etc/resolv.new test "$DOMAIN" && echo "domain $DOMAIN" >> /etc/resolv.new if [ "$DNSSRVS $DNS_1 $DNS_2 $DNS_3" != " " ] ; then for DNS in $DNSSRVS $DNS_1 $DNS_2 $DNS_3 ; do echo "nameserver $DNS" >> /etc/resolv.new done fi echo "# $DEVICE end" >> /etc/resolv.new mv /etc/resolv.new /etc/resolv.confDie Datei /etc/resolv.conf wird auf eine temporäre umkopiert. Wenn eine der Variablen DOMAIN, DNSSRVS, DNS_1, DNS_2 oder DNS_3 einen Wert haben, werden die entsprechenden Kommandos abgesetzt. Dieser neue Abschnitt beginnt mit z.B. # eth0 begin und endet mit z.B. # eth0 end. Dies wird beim Beenden des PCMCIA-Services benutzt, um diesen Abschnitt wieder zu entfernen. Danach wird die /etc/resolv.conf wieder im Originalzustand sein.
Um dies zu nutzen, ist es also hinreichend, z.B. DNS_1 zu setzen.
Wenn man das mit netenv machen möchte, kann z.B. folgender Code in /etc/netenv/netenv_setup eingefügt werden:
if [ ! -z "$DNS_1" ]; then ( echo "# resolv.conf autogenerated by netenv "`date` if [ ! -z "$DOMAIN" ]; then echo domain $DOMAIN; fi if [ ! -z "$SEARCH" ]; then echo search $SEARCH; fi echo nameserver $DNS_1 if [ ! -z "$DNS_2" ]; then echo nameserver $DNS_2; fi ) > /etc/resolv.conf chmod 644 /etc/resolv.conf echo netenv: /etc/resolv.conf was set up ... fi
IFCONFIG_0="172.25.64.130 broadcast 172.25.64.255 netmask 255.255.255.0 up"Wenn man hingegen DHCP verwenden möchte, muß der Eintrag
IFCONFIG_0="dhcpclient"lauten. Dies kann mit mit netenv wie folgt tun. Zunächst das zugehörige Profil:
elli:/etc/netenv> cat elli-ht # Networkenvironment: DHCP export USE_DHCP=yes NETENV_SCRIPT=/etc/netenv/netenv_setupFerner braucht man ein netenv_setup-Skript mit mindestens folgendem Inhalt:
elli:/etc/netenv> cat netenv_setup edit_rc_config() { if [ ! -r /etc/rc.config ]; then echo No /etc/rc.config, probably not a SuSE-System, giving up ... return 1 fi VARIABLE_TO_CHANGE=$1 shift echo ${VARIABLE_TO_CHANGE}'="'$*'"' > /tmp/.netenv.tmp.$$ LINE=`awk '/^'$VARIABLE_TO_CHANGE'=/ {LINE=NR} END {print LINE}' /etc/rc.config` awk -v LINE=$LINE 'NR/tmp/.rc.config.netenv cat /tmp/.netenv.tmp.$$ >> /tmp/.rc.config.netenv awk -v LINE=$LINE 'NR>LINE' /etc/rc.config >> /tmp/.rc.config.netenv cat /tmp/.rc.config.netenv > /etc/rc.config rm -f /tmp/.rc.config.netenv /tmp/.netenv.tmp.$$ echo netenv_setup: rc.config edited, Variable $VARIABLE_TO_CHANGE set to $* } if [ "$USE_DHCP" = yes ]; then edit_rc_config IFCONFIG_0 dhcpclient else edit_rc_config IFCONFIG_0 "$IPADDR broadcast $BROADCAST netmask $NETMASK up" fi
Für das statische Routing nutzt SuSe die Datei /etc/route.conf. Eine Default-Route sieht hier wie folgt aus:
default 172.246.2.1Ausgehend von dem Beispiel, in dem gezeigt wird, wie man mit netenv die /etc/hosts editiert, kann man hier entsprechend vorgehen. Als Beispiel:
if grep SuSE /etc/issue 1>/dev/null; then if [ ! -z "$GATEWAY" ]; then ( echo "# route.conf autogenerated by netenv "`date` echo default $GATEWAY 0.0.0.0 eth0 ) > /etc/route.conf echo netenv_setup: /etc/route.conf was modified ... fi fi
Die, die ich näher angeschaut habe, versuchen, die Netzwerkumgebung zu bestimmen, indem sie entsprechende arp requests versenden. SuSe liefert mit 8.x das System Configuration Profile Management scpm. Dies ist sicherlich mächtig, mir fehlt jedoch ein Benutzerinterface beim Booten.