/usr/share/doc/netenv/netenv-de.html is in netenv 0.94.3-30.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Netenv 0.94 - Linux Laptop in verschiedenen Netzwerkumgebungen</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
</head>
<body>
<p>Zur <a href="#toc" >Inhaltsübersicht</a></p>
<h2><a name="top">Nutzen Sie einen Linux Laptop in verschiedenen Netzwerkumgebungen ?</a></h2>
<p>Zu Hause ? Im Büro ? Bei einem Kunden ?</p>
<p>Falls ja, kann das kleine Paket <i>netenv</i> 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. </p>
<p><I>Netenv</I> 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. </p>
<p> So sieht die Auswahlbox von <i>netenv</i> aus: </p>
<p> <img src="netenv-chooser-box.png" alt="netenv"> </p>
<p> Neben der Grundfunktionalität der Konfiguration der
NIC kann <i>netenv</i> für weitere Aufgaben genutzt werden: </p>
<ul>
<li>Auswahl einer XF86Config
<p> 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. </p>
<li>Konfiguration des DNS
<p>
Mit den <i>netenv</i>-Daten kann eine geeignete /etc/resolv.conf
angelegt werden.
<p>
<li>Drucker Umgebung
<p>
Mit einer Zuweisung für z.B. PRINTER kann der Defaultdrucker
gesetzt werden.
<p>
<li>Netscape preferences editieren
<p>
So können lästige Timeouts vermieden werden, wenn ohne
Verbindung zu einem Netz gearbeitet wird und nur lokale
Dateien betrachtet werden sollen.
<p>
<li>Fetchmail anpassen
<p>
Wenn ich eine permanente Verbindung zu meinem Mailserver
habe, nutze ich <i>netenv</i>, um fetchmail als Dämon
aufzurufen. Die Mail wird dann zyklisch abgeholt.
<p>
<li>Linking /dev/pilot
<p>
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.
</ul>
<p>
<I>Netenv</I> 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 <i>netenv</i> dialog(1) bzw. gdialog (in
den genannten Distributionen immer enthalten).
<p>
Ein Wort an alle Experten: Ich versuche hier, die Dinge mit Blick auf
Nicht-Experten zu erklären - also bitte Geduld.
<hr>
<p>
<h2><a name="toc">Inhaltsübersicht</a></h2>
<p>
<a href="#top">Was macht <i>netenv</i> ?</a>
<p>
<a href="#download">Wo bekommt man <i>netenv</i> ?</a>
<p>
<a href="#installation">Hinweise zur Installation</a>
<p>
<a href="#basics">Grundlagen</a>
<p>
<a href="#firsttimeconfig">Erstes Erstellen einer Umgebungsbeschreibung</a>
<p>
<a href="#config">Konfiguration</a>
<p>
<a href="#examples">Beispiele</a>
<p>
<a href="#dns">Bemerkungen zu DNS</a>
<p>
<a href="#suse">Bemerkungen für SuSe 7.3 Benutzer</a>
<p>
<a href="#debian">Bemerkungen für Debian-Benutzer</a><br>
<p>
<a href="#alternatives">Alternativen zu <i>netenv</i></a>
<p>
<a href="#final">Schlußwort</a>
<p>
<hr>
<h2><a name="download">Wo bekommt man <i>netenv</i> ?</a></h2>
<I>Netenv</I> hat eine Webseite bei Sourceforge:
<a href="http://netenv.sourceforge.net">http://netenv.sourceforge.net</a>
<p>
Aber das wissen Sie wohl schon ...
<p>
Dort ist sowohl das tar-File als auch das RedHat-Paket
verfügbar. Letzteres sollte auch für Mandrake und Suse benutzbar sein.
<p>
Debian-User
<p>
<I>Netenv</I> gibt es schon recht lange als Debian-Paket. Näheres
siehe unter <a href="http://www.debian.org/distrib/packages">http://www.debian.org/distrib/packages</a>.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="installation">Hinweise zur Installation</a></h2>
Hängt natürlich von der Distribution ab. Bei allen, die rpm-Pakete
benutzen, als root z.B.:
<pre>
rpm -i netenv-0.94-2.i386.rpm
</pre>
In Debian z.B.:
<pre>
dpkg -i netenv-0.92-2.i386.deb
</pre>
oder einfach <kbd>apt-get install netenv</kbd>
<p>
Andernfalls:
<pre>
tar xvf netenv-0.94-2.tar
</pre>
Es wird damit ein Shellskript namens <kbd>netenv</kbd>,
ein kleines Hilfsprogramm trpnc, Konfigurationsbeispiele sowie diese Doku
installiert. Außerdem wird ein init-Skript erstellt, das netenv beim
Booten aufruft.
Abhängig von der Distribution ist nun ein wenig Handarbeit nötig -
oder eben auch nicht.
<h3>RedHat</h3>
<em>Ich habe keine Kenntnis über aktuelle
RedHat-Versionen. Wahrscheinlich sind die folgenden Hinweise völlig
veraltet. Vielleicht finden sich im Abschnitt <a
href="#how-to-use-tar">Zur Verwendung des tar-files</a> nützliche Hinweise.</em>
<p>
Das <i>netenv</i>-RPM wurde unter RedHat 6.1 gepackt. Damit kann es in
allen Distributionen, die RPM nutzen, installiert werden.
<p>
Das Postinstall-Script sorgt dafür, daß
<ul>
<li><i>netenv</i> in <kbd>/etc/rc.d/rc.sysinit</kbd> aufgerufen wird
<li>die Einbindung in die Konfiguration der Netzwerkkarte erfolgt.
</ul>
<kbd>/etc/rc.d/rc.sysinit</kbd> sieht dann wie folgt aus:
<pre>
lulu:/home/bav> tail -2 /etc/rc.d/rc.sysinit
# Added by package netenv on 06.03.2000 19:53:10
/usr/sbin/netenv
</pre>
Ferner wird <kbd>/etc/sysconfig/network-scripts/ifcfg-eth0</kbd>
geändert. Direkt nach der Erstinstallation von Redhat sieht diese
Datei z.B. so aus:
<pre>
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=yes
</pre>
Die Installation von <i>netenv</i> fügt zwei Zeilen hinzu:
<pre>
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
</pre>
<h3>SuSe</h3>
Mit Suse 8.x haben sich beim Systemanlauf und bei der
Netzwerkkonfiguration eine Vielzahl von änderungen ergeben. Die aktuelle
Prozedur geht von Suse 8.1 aus, sollte jedoch auch mit 8.0
funktionieren. Für ältere Versionen siehe den nächsten Abschnitt.
<h4><a name="suse-8-1">SuSe 8.1</a></h4>
Das Postinstall-Script fügt zwei Zeilen zu /etc/init.d/boot.local hinzu:
<pre>lulu:/etc/init.d> tail -3 boot.local
#
# Added by package netenv on 06.12.2002 10:45:10
/usr/sbin/netenv
</pre>
Damit wird dafür gesorgt, daß netenv beim Systemanlauf überhaupt
aufgerufen wird. Netenv nimmt als zu konfigurierende NIC eth0 an. Daher wird
an die Datei <pre>/etc/sysconfig/network/ifcfg-eth0</pre> die Zeile
<pre>if [ -r /tmp/netenv ]; then . /tmp/netenv; fi
</pre>
angehängt. Das ganze sieht dann wie folgt aus:
<pre>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; fi
</pre>
Die 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<a href="#footnote1" >[1]</a> übersteuert. In diesem
Beispiel wird unterstellt, daß die verwendete NIC keine PCMCIA-Karte
ist. Falls doch, muß aus
<pre>STARTMODE='onboot'</pre>
<pre>STARTMODE='hotplug'</pre>
werden.
<h4>SuSe 7.3</h4>
Das Postinstall-Script fügt zwei Zeilen zu /etc/rc.d/boot.local hinzu:
<pre>
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/netenv
</pre>
Für PCMCIA-Karten wird ein Eintrag in /etc/pcmcia/network.opts
vorgenommen:
<pre>
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; fi
</pre>
Falls 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 !):
<pre>
mweb@guru:/etc/rc.d > head -16 network
#! /bin/sh
# Copyright (c) 1996 SuSE GmbH Nuernberg, Germany. All rights reserved.
#
# Author: Florian La Roche <florian@suse.de>, 1996
# Werner Fink <werner@suse.de>, 1996
# Burchard Steinbild <bs@suse.de>, 1996
# Rolf Haberrecker <rolf@suse.de>, 1998
# Werner Fink <werner@suse.de> (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
</pre>
<h3>Debian</h3>
Bei der Installation des Debian-Pakets versucht dieses, eine
funktionierende Konfiguration einzurichten, die den aktuellen
Netzwerkeinstellungen entspricht. Leider ist bei Debian die
Netzwerkkonfiguration grundsätzlich anders gelöst als bei den übrigen
Distributionen, und es gibt auch noch zwei Möglichkeiten. Daher sind
sowohl bei der Installation als auch beim Einrichten weiterer
Konfigurationen manuelle Eingriffe nötig. Erläuterungen dazu gibt es
weiter unten unter <a href="#debian">Bemerkungen für
Debian-Benutzer</a>.
<h3>Mandrake</h3>
Mandrake 9 User berichteten, daß der splash-screen abgeschaltet werden
muß (disable vga=nnn in /etc/lilo.conf), da andernfalls keine Eingabe
während des Systemanlaufs möglich ist. Ferner scheint das verwendete
cdialog nicht stabil zu sein. Erst durch Einsatz eines SuSe-dialog
konnte der Fehler behoben werden.
<h3><a name="how-to-use-tar">Zur Verwendung des tar-Files</a></h3>
Folgende Schritte sind zu tun:
<pre>
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 config
</pre>
Abhängig von der Distribution muß der letzte Schritt zur Einbindung
von netenv <kbd>make config</kbd> evtl. manuell vorgenommen werden.
<p>
netenv muß <b>vor</b> dem normalen Netzwerk- oder PCMCIA-Start
aufgerufen werden. Suchen Sie nach <kbd>/etc/init.d/boot.local</kbd>
oder einem äquivalent. Für weitere Details siehe den
<a href="#suse-8-1">SuSE 8.1</a> Abschnitt.
<p>
Nachdem so sichergestellt ist, daß netenv beim Systemanlauf aufgerufen
wird, müssen die Konfigurationsdaten von den Netzwerk scripts gelesen
werden. Aktuelle Distributionen nutzen <kbd>ifup</kbd> um eine
vorkonfigurierte Netzwerk-Karte zu starten. Dann siehe den
<a href="#suse-8-1">SuSE 8.1</a> Abschnitt für weitere Details.
<p>
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 <kbd> dmesg | grep
eth</kbd> und <kbd>lspci</kbd> überprüfen.
<p>
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.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="basics">Grundlagen</a></h2>
Die grundlegende Idee ist, daß der Laptopbenutzer während des
Bootvorgangs eine Information darüber eingibt, wo er sich mit seinem
Laptop gerade befindet. Dies geschieht <b>vor</b> dem Erreichen des run
level 2, d.h. also bevor eine Netzwerkkarte konfiguriert wird.
<p>
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.
<p>
Wenn man "lilo" als Bootmanager benutzt, kann man alternativ auch
z.B. eingeben:
<p>
<pre>
linux NETENV=lavie
</pre>
Damit 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.
<p>
Das netenv-Skript prüft, ob NETENV gesetzt ist. Falls ja, wird der
Hochlauf fortgesetzt, ohne daß das Auswahlmenü erscheint.
<p>
Wenn die aktuelle Umgebung bestimmt ist, kopiert netenv die zugehörige
Beschreibungsdatei nach /tmp/netenv<a href="#footnote1" >[1]</a>.
<p>
Diese Datei hat die Rechte 644, ist also von jedem Benutzer lesbar.
Sie kann so für benutzerspezifische Konfiguration genutzt werden.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="firsttimeconfig">Erstes Erstellen einer Umgebungsbeschreibung</a></h2>
Nach der Installation sollte der Benutzer root netenv aufrufen. Dazu:
<pre>
netenv
</pre>
Es erscheint eine Eingabemaske, die nur eine Wahlmöglichkeit bietet:
<pre>
new Set_up_new_environment
</pre>
Es werden dann nacheinander abgefragt:
<pre>
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 ...
</pre>
Falls man sich in einem Netzwerk mit DHCP-Server befindet, gibt man
statt der IP-Addresse dhcp ein. Es wird dann eine /tmp/netenv<a href="#footnote1" >[1]</a>
erstellt, die nur
<pre>
BOOTPROTO='dhcp'
STARTMODE='hotplug'
</pre>
enthält. Alle anderen Werte werden dann gemäß der DHCP-Konfiguration
ermittelt. Falls die NIC onboard ist, sollte netenv
<pre>
STARTMODE='onboot'
</pre>
gesetzt haben.
<p>
Bei statischer IP-Addresse wird nach Eingabe des Wertes für die
folgenden Werte ein in vielen Fällen sinnvoller Vorschlag eingeblendet.
<p>
Es kommt dann die Frage, ob diese Konfiguration gesichert werden soll:
<pre>
Do you want to save this configuration ?
</pre>
Für den Namen, den man hier angibt, bitte <b>keine</b> Leerzeichen
verwenden !
<p>
netenv bietet abhängig von der Distribution an, das Netzwerk zu
restarten und so die änderungen zu aktivieren.
<p>
Andernfalls kann man bei einer PCMCIA-NIC entweder die Karte entnehmen und
wieder einführen <b>oder</b> als Benutzer root das PCMCIA-Skript
ausführen:
<pre>
/etc/init.d/pcmcia restart
</pre>
In beiden Fällen sollte der cardmanager aus dem PCMCIA-Paket aktiv
werden und die Schnittstelle konfiguriert werden.
<p>
Ein ping auf die angegebene Gateway-Addresse wird es zeigen !
<p>
Falls nicht: Leuchtet die Link-LED ? Prüfen Sie die Ausgabe von
<pre>ifconfig eth0</pre>
<p>
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 ...
<p>
Diejenigen, die statt PCMCIA eine Netzwerkkarte onboard nutzen, müssen
ihr Netzwerk restarten.
<p>
In RedHat 7.0 oder SuSE dazu z.B..
<pre>
/etc/init.d/network restart
</pre>
Netenv führt dies bei entsprechender Bestätigung aus.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="config">Konfiguration</a></h2>
<I>Netenv</I> wird mit Beschreibungdateien konfiguriert. Diese liegen in
<kbd>/etc/netenv</kbd>. Auf einem Laptop mit dem Namen "lulu" werden
Dateien lulu, lulu-foo, lulu-bar usw. ausgewertet.
Das Namensschema ist damit wie folgt:
<pre>
/etc/netenv/<NODE-NAME>-<VALUE-OF-VARIABLE-NETENV>
</pre>
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.
<p>
Die Beschreibungsdateien enthalten Zuweisungen in Shell Syntax, z.B.
<pre>
netenv_id=At_Home_LCD_WheelMouse_pcmcia
...
IPADDR=123.456.78.9
...
NETSCAPE_PROXY_TYPE=2
</pre>
Leerzeichen führen hier (wie immer in der Shell) zu Problemen.
Für eine erfolgreiche Konfiguration einer Netzwerkkarte sind
mindestens Zuweisungen von
<pre>
IPADDR
NETMASK
NETWORK
BROADCAST
</pre>
erforderlich. Abhängig von der jeweiligen Situation kann auch
<pre>
GATEWAY
DNS_1
</pre>
notwendig sein. <b>Man kann hier beliebige Variablendefinitionen einfügen -
Hauptsache, alles bleibt syntaktisch korrekt.</b>
Eine Zuweisung in der Form
<pre>
NETENV_SCRIPT=/etc/netenv/netenv_setup
</pre>
nimmt eine Sonderstellung ein. Wenn die hier angezogene
Datei lesbar ist, wird netenv diese Datei nach
der Auswahl der aktuellen Netzwerkumgebung ausführen (genauer:
sourcen).
<p>
<b>Achtung ! Dies gescheht in einem frühen Status des Bootvorgangs. Es
ist noch kein Netzwerk aktiv ! NETENV_SCRIPT wird mit root-Rechten ausgeführt !</b>
<p>
Mit Hilfe des hier angezogenen Skriptes kann man dann etliche
sinnvolle Sachen machen. Dazu mehr bei den <a href="#examples">Beispielen</a>.
<p>
<h3>Experten Modus</h3>
Wenn man in der netenv-dialog-box CANCEL wählt, kann man in eine shell
verzweigen. Verläßt man diese, steht die Auswahlbox erneut zur
Verfügung.
<p>
<strong>Dies ist ein Sicherheitsrisiko! Jeder, der physikalisch Zugang
zum Computer hat, erhält so eine Shell mit <kbd>root</kbd>-Rechten,
ohne ein Passwort eingeben zu müssen!</strong>
</p>
<p>Daher steht diese Funktion in Debian nicht zur Verfügung, es sei
denn, Sie setzen in <kbd>netenv.conf</kbd> die Variable
<kbd>ALLOW_EXPERT</kbd> auf <kbd>"YES"</kbd> (siehe <a
href="#debian-features" >unten</a>).</p>
<h3>Sicherheitshinweis:</h3>
Das Verzeichnis /etc/netenv und darin liegende Dateien dürfen nur für
den Benutzer root schreibbar sein. netenv prüft dies.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="examples">Beispiele</a></h2>
Dies ist natürlich der bei weitem wichtigste Abschnitt dieser Doku ...
<p>
Diese Beispiele sind aufeinander aufbauend beschrieben. Also bitte
hintereinander lesen !
<h3>StandAlone_Touchpad</h3>
<pre>
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=3
</pre>
Dies nutze ich, wenn mein Laptop keine Verbindung zu einem Netz
hat.
<p>
Der Wert der Variablen netenv_id (wie gesagt: Bitte <b>ohne</b>
Leerzeichen) wird als Beschreibung im Auswahlmenü benutzt.
<p>
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 <a
href="netenv_setup">hier beigefügt</a>.
<p>
Das Beispiel ist einfach gehalten und kann so als Ausgangsbasis für
eigene Anpassungen dienen. Hier relevanter Code ist:
<pre>
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
...
</pre>
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.
<p>
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:
<p>
NETSCAPE_PROXY_TYPE nutze ich in meiner ganz privaten Konfiguration:
<pre>
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
...
</pre>
Das angezogene Skript edit-ns-preferences findet sich bei der
<i>netenv</i>-Dokumentation. Ich vermeide so unnötige Network-Timeouts, wenn
ich den Browser starte.
<h3>In_the_Office</h3>
<pre>
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=900
</pre>
Im 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ß.
<p>
Mit
PRINTER=cc_hp wird der Defaultdrucker auf den Drucker im Büro
gesetzt. NETSCAPE_PROXY_TYPE=2 aktiviert die automatische Proxykonfiguration im Netscape.
<p>
Wenn ich im Büro arbeite, möchte ich, das zyklisch Email
abgeholt wird. Dazu dient FETCHMAIL_POLL_INTERVALL. Folgende Zeilen in
meiner <kbd>~/.xinitrc</kbd> starten fetchmail als Dämon, der dann alle 15 min
gemäß den Definitionen in meiner <kbd>~/.fetchmailrc</kbd> arbeitet:
<pre>
if [ -n "$FETCHMAIL_POLL_INTERVALL" ]; then
fetchmail -d $FETCHMAIL_POLL_INTERVALL
fi
</pre>
<h3>Laptop_at_home</h3>
Zu Hause nutze ich folgende Beschreibungsdatei. Da ich meistens hier
arbeite, ist der Dateiname gleich dem Nodenamen meines Laptops und
damit der Default. Es reicht also, im Netenv-Auswahlmenü einmal auszulösen:
<pre>
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'
</pre>
Aus der netenv_setup ist hier folgender Abschnitt von Bedeutung:
<pre>
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
...
</pre>
netenv_setup wird mit dem Parameter PROFILE aufgerufen, der hier den Wert
"default" hat (sonst immer Name der Beschreibungsdatei abzüglich Hostname).
<p>
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.
<p>
Zu Hause befindet sich mein Laptop in einer Docking-Unit. Diese
enthält eine NIC. Um diese zu verwenden, muß
<pre>STARTMODE='onboot'</pre>
gesetzt werden.
<h3>At_Customer_Foobar</h3>
Frühere Versionen der libc boten einem nicht privilegierten Benutzer
die Möglichkeit, durch Setzen der Umgebungsvariablen HOSTALIASES quasi
eine private /etc/hosts anzulegen. Aus Sicherheitsgründen steht dieser
Weg in aktuellen Distributionen nicht mehr zur Verfügung.
<p>
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.
<p>
Ich habe in meine /etc/hosts Marken wie folgt eingetragen:
<pre>
lulu:/home/bav> cat /etc/hosts
...
# netenv hosts begin
# netenv hosts end
...
</pre>
In meiner aktuellen Beschreibungsdatei definiere ich eine Reihe von
Rechnern mit den dazugehörigen IP-Addressen, die ich erreichen möchte:
<pre>
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"
</pre>
Folgendes Codefragment aus meiner /etc/netenv/netenv_setup sorgt nun
dafür, daß nach Auswahl der Umgebung automatisch /etc/hosts editiert
wird:
<pre>
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
fi
</pre>
Die /etc/hosts stellt sich danach wie folgt dar:
<pre>
...
# 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
...
</pre>
Alle diese Rechner sind für mich vertrauenswürdig, daher nutze ich in
meiner <kbd>~/.xinitrc</kbd> diesen Mechanismus und sorge noch dafür, daß
automatisch X-Displays von diesen Rechner akzeptiert werden:
<pre>
XHOST_PLUS_LISTE=`awk '/^# netenv hosts begin$/,/^# netenv hosts end$/' /etc/hosts | awk '!/^#/ {print $2}'`
xhost $XHOST_PLUS_LISTE
</pre>
Anschließend liefert xhost mir dann:
<pre>
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
</pre>
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="dns">Bemerkungen zu DNS</a></h2>
<I>Netenv</I> nimmt <b>keine</b> DNS Konfiguration vor. Leider gibt es gerade
hier etliche Unterschiede zwischen den Distributionen.
<p>
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:
<pre>
# 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.conf
</pre>
Die Datei <kbd>/etc/resolv.conf</kbd> wird auf eine temporäre
umkopiert. Wenn eine der Variablen <kbd>DOMAIN, DNSSRVS, DNS_1,
DNS_2</kbd> oder <kbd>DNS_3</kbd> einen Wert haben, werden die
entsprechenden Kommandos abgesetzt. Dieser neue Abschnitt beginnt
mit z.B. <kbd># eth0 begin</kbd> und endet mit z.B. <kbd># eth0
end</kbd>. Dies wird beim Beenden des PCMCIA-Services benutzt, um
diesen Abschnitt wieder zu entfernen. Danach wird die
<kbd>/etc/resolv.conf</kbd> wieder im Originalzustand sein.
<p>
Um dies zu nutzen, ist es also hinreichend, z.B. DNS_1 zu setzen.
<p>
Wenn man das mit <i>netenv</i> machen möchte, kann z.B. folgender Code in
/etc/netenv/netenv_setup eingefügt werden:
<pre>
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
</pre>
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="suse">Bemerkungen für SuSe 7.3 Benutzer</a></h2>
Wenn man eine Onboard-Ethernetschnittstelle hat (also gar keine
PCMCIA-NIC nutzen muß), muß der normale Eintrag in /etc/rc.config
übersteuert werden. Dies geschieht durch eine Zuweisung der Form
<pre>
IFCONFIG_0="172.25.64.130 broadcast 172.25.64.255 netmask 255.255.255.0 up"
</pre>
Wenn man hingegen DHCP verwenden möchte, muß der Eintrag
<pre>
IFCONFIG_0="dhcpclient"
</pre>
lauten. Dies kann mit mit netenv wie folgt tun. Zunächst das
zugehörige Profil:
<pre>
elli:/etc/netenv> cat elli-ht
# Networkenvironment: DHCP
export USE_DHCP=yes
NETENV_SCRIPT=/etc/netenv/netenv_setup
</pre>
Ferner braucht man ein netenv_setup-Skript mit mindestens folgendem
Inhalt:
<pre>
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<LINE' /etc/rc.config > /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
</pre>
<p>
Für das statische Routing nutzt SuSe die Datei /etc/route.conf. Eine
Default-Route sieht hier wie folgt aus:
<pre>
default 172.246.2.1
</pre>
Ausgehend von dem Beispiel, in dem gezeigt wird, wie man mit netenv
die /etc/hosts editiert, kann man hier entsprechend vorgehen. Als
Beispiel:
<pre>
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
</pre>
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="debian">Bemerkungen für Debian-Benutzer</a></h2>
<h3>Übersicht</h3>
<a href="#debian-config" >Installation und Konfiguration</a>
<ul>
<li><a href="#debian-interfaces" >Konfiguration in <kbd>/etc/network/interfaces</kbd></a>
</li>
<li><a href="#debian-network-opts" >Konfiguration in <kbd>/etc/pcmcia/network.opts</kbd></a>
</li>
</ul>
<p><a href="#debian-features" >Zusätzliche Möglichkeiten mit Debian</a>
</p>
<p><a href="#debian-wwwoffle" >netenv und der Offline-http-Proxy wwwoffle</a>
</p>
<h3><a name="debian-config" >Installation und Konfiguration</a></h3>
<p>Bei der Installation des Debian-Pakets versucht dieses, eine
funktionierende Konfiguration einzurichten, die den aktuellen
Netzwerkeinstellungen entspricht. Leider ist bei Debian die
Netzwerkkonfiguration grundsätzlich anders gelöst als bei den übrigen
Distributionen, und es gibt auch noch zwei Möglichkeiten dafür. Daher
sind, je nachdem, entweder bei der Installation oder beim Einrichten
weiterer Konfigurationen manuelle Eingriffe nötig. </p>
<p>Wenn es <em>netenv</em> nicht gelingt, die aktuelle Konfiguration
auszulesen, dann wird es beim Booten nicht aufgerufen, und der Rechner
verhält sich wie vor der Installation. Man muss dann wie im folgenden
beschrieben eine funktionierende Konfiguration erzeugen und
anschließend mit <tt>update-rc.d netenv start 40 S .</tt> den nötigen
Link auf das init-Skript erzeugen. </p>
<p>Die folgenden Absätze beschreiben, welche Benutzereingriffe
erforderlich sind: Stehen die <a href="#debian-interfaces"
>Netzwerkeinstellungen bisher in
<kbd>/etc/network/interfaces</kbd></a>, so ist <i>netenv</i> zwar
sofort funktionsfähig, aber die Einrichtung neuer
Netzwerkkonfigurationen für die Auswahlliste ist etwas
komplizierter. Diese Methode wird bei Debian mit eingebauten
("on-board") Netzwerkkarten und manchmal mit PCMCIA-Karten
verwendet. Die zweite Methode, mit den <a href="#debian-network-opts"
>Netzwerkeinstellungen in <kbd>/etc/pcmcia/network.opts</kbd></a>,
kann dagegen nur mit PCMCIA-Karten angewandt werden.</p>
<p> Die Installationsroutine ermittelt, welche Methode verwendet wird,
und erstellt eine passende Musterkonfiguration. Allerdings sind in
beiden Fällen noch Nutzereingriffe notwendig! Werden in beiden Dateien
oder in keiner Netzwerkinformationen gefunden, so wird keine
Konfiguration erstellt und <i>netenv</i> beim Booten vorerst nicht
aufgerufen. </p>
<h4><a name="debian-interfaces">Konfiguration in <kbd>/etc/network/interfaces</kbd></a></h4>
<p> Die Syntax von <kbd>interfaces</kbd> ist grundsätzlich anders als
netenv es erwartet, es wird also nicht mit Variablenzuweisungen
gearbeitet. Daher gibt es auch keine Möglichkeit, die Informationen
aus dieser Datei einfach zu "überschreiben". Stattdessen wird
<i>netenv</i> angewiesen, nach der Auswahl einer Netzwerkumgebung ein
Skript auszuführen, in dem symbolische Links verändert werden. Das
Ergebnis sieht zum Beispiel so aus: </p>
<pre>
ls -l /etc/network/interfaces*
/etc/network/interfaces -> /etc/network/interfaces.work
/etc/network/interfaces.home
/etc/network/interfaces.work
/etc/network/interfaces.offline
/etc/network/interfaces.old -> /etc/network/interfaces.offline
</pre>
<p>Es werden also nicht die Dateien verändert, sondern nur der
symbolische Link <kbd>/etc/network/interfaces</kbd> auf das jeweils
passende Ziel umgeleitet. Auch die Datei <kbd>/etc/resolv.conf</kbd>
muss genauso behandelt werden. Beachten Sie, dass man auch zum
offline-Betrieb ein <kbd>lo</kbd>-Device in <kbd>interfaces</kbd>
braucht. </p>
<p>Die Befehle, mit denen diese Links verändert werden, könnte man
direkt in die Konfigurationsdatei für die jeweilige Netzwerkumgebung
schreiben. Auf einem Rechner mit Namen <kbd>lulu</kbd> könnten sie
<kbd>/etc/netenv/lulu-home</kbd>, <kbd>/etc/netenv/lulu-office</kbd>
usw. heissen. Es ist allerdings vom Autor von <i>netenv</i> empfohlen,
in diesen Dateien nur Variablenzuweisungen durchzuführen. Wenn
speziell die Variable NETENV_SCRIPT definiert wird, dann wird dieses
Skript automatisch ausgeführt und setzt die Links.</p>
<p>Eine Beispielkonfiguration auf Rechner <kbd>lulu</kbd> könnte
demnach so aussehen: In <kbd>/etc/netenv/</kbd> befinden sich folgende
Dateien:</p>
<pre>
lulu lulu-customer lulu-offline setup-customer setup-offline
lulu-work lulu-home netenv.conf setup-work setup-home
</pre>
(Beachten Sie, dass es immer eine Datei (oder einen symbolischen Link)
mit dem Rechnernamen und ohne den Anhang <kbd>-irgendwo</kbd> geben
muss. Ich verwende diese Datei normalerweise für meine
default-Konfiguration.)
<p>
In <kbd>lulu-work</kbd> steht zum Beispiel:</p>
<pre>
netenv_id=Arbeit
export NETENV_SCRIPT=/etc/netenv/setup-work
# you can set any variable here. export it!
</pre>
<p>Die Variable <kbd>netenv_id</kbd> wird im Auswahldialog von
<i>netenv</i> verwendet, das Skript <kbd>setup-work</kbd> wird
ausgeführt (genauer gesagt gesourcet), sobald <kbd>lulu-work</kbd>
eingelesen wurde. Es sieht folgendermaßen aus:</p>
<pre>
#!/bin/sh
if [ -r /etc/network/interfaces.work ]; then
mv /etc/network/interfaces /etc/network/interfaces.old
ln -s /etc/network/interfaces.work /etc/network/interfaces
fi
if [ -r /etc/resolv.conf.work ]; then
mv /etc/resolv.conf /etc/resolv.conf.old
ln -s /etc/resolv.conf.work /etc/resolv.conf
fi
if [ -r /etc/exim/exim.conf.work ]; then
mv /etc/exim/exim.conf /etc/exim/exim.conf.old
ln -s /etc/exim/exim.conf.work /etc/exim/exim.conf
fi
</pre>
<p>Wie man sieht, können auch andere Dateien bequem so angepasst
werden. Wenn einmal eine Konfiguration erstellt ist - was ja
normalerweise das Debian-Setup übernimmt - sollte es leicht sein,
weitere hinzuzufügen.</p>
<p>Allerdings kann der Menüpunkt "new" im Auswahldialog von
<i>netenv</i> nicht zur Erstellung einer neuen Konfiguration verwendet
werden, denn dort werden nur Variablenzuweisungen in die Dateien im
Verzeichnis <kbd>/etc/netenv/</kbd> eingetragen! Stattdessen muss man
dort Dateien erzeugen, die genauso aufgebaut sind wie oben
beschrieben: <i><kbd>$rechnername-$netzname</kbd></i> definiert das
NETENV_SCRIPT, dieses lenkt die symbolischen Links um. Das
Debian-Setup erstellt übrigens diese Dateien unter den Namen
<i><kbd>$rechnername</kbd></i> (Konfigurationsdatei)
bzw. <kbd>setup-default</kbd> (NETENV_SCRIPT). </p>
<h5>Alternativen mit <kbd>/etc/network/interfaces</kbd></h5>
<p>Es gibt noch weitere Möglichkeiten zur Konfiguration von <i>netenv</i>, wenn
die Netzwerkeinstellungen in <kbd>/etc/network/interfaces</kbd>
erwartet werden. Besonders sei auf den "mapping"-Mechanismus
hingewiesen, der in der Manpage zu <kbd>interfaces(5)</kbd>
beschrieben ist. Ein anderer Weg ist in der Datei
<kbd>netenv_setup_debian_example</kbd> angedeutet.</p>
<h4><a name="debian-network-opts">Konfiguration in <kbd>/etc/pcmcia/network.opts</kbd></a></h4>
Wenn die Netzwerkeinstellungen in <kbd>/etc/pcmcia/network.opts</kbd>
gespeichert werden, hat man einen großen Vorteil: Dort wird mit
Variablenzuordnungen gearbeitet, zum Beispiel
<pre>IPADDR="123.456.789.12"</pre>
<p>Dies ist genau die Methode, für die <i>netenv</i> ursprünglich
eingerichtet wurde. Daher kann man in diesem Fall einfach über den
Menüpunkt "new" (<kbd>Set_up_new_environment</kbd>) im Auswahldialog
neue Netzwerkumgebungen einrichten. </p>
<p>Damit diese Variablen aber beim Starten der Netzwerkkarte überhaupt
wirksam werden, müssen sie in <kbd>/etc/pcmcia/network.opts</kbd>
zunächst eingelesen werden. Da diese Datei zum Paket <i>pcmcia-cs</i>
gehört, darf <i>netenv</i> sie nicht einfach verändern. Wohl aber darf
das der Benutzer (bzw. Administrator). Am einfachsten ist es, einfach
die Zeile</p>
<pre>. /var/tmp/netenv</pre>
<p>ans Ende dieser Datei einzutragen<a href="#footnote1" >[1]</a> (Ja,
mit dem führenden Punkt!). Etwas ausgefeilter wäre es, folgenden Patch
anzuwenden (er ist in der Datei <kbd>netenv-network.opts.patch</kbd>
enthalten):</p>
<pre>
--- etc/network.opts.orig Sat Nov 8 12:10:56 2003
+++ etc/network.opts Sat Nov 8 12:42:27 2003
@@ -21,6 +21,8 @@
PPPOE="n"
# Use WHEREAMI (via the whereami package)? [y/n]
WHEREAMI="n"
+ # Use NETENV (via the netenv package)? [y/n]
+ USE_NETENV="y"
# Host's IP address, netmask, network address, broadcast address
IPADDR=""
NETMASK="255.255.255.0"
@@ -55,5 +57,13 @@
# Card eject policy options
NO_CHECK=n
NO_FUSER=n
+ if [ $USE_NETENV = y ]; then
+ if [ -r /var/tmp/netenv ]; then
+ . /var/tmp/netenv
+ else
+ echo "/var/tmp/netenv unreadable. Perhaps you should set"
+ echo "USE_NETENV=n in /etc/pcmcia/network.opts"
+ fi
+ fi
;;
esac
</pre>
Dies ermöglicht zum einen, <i>netenv</i> einfach zu deaktivieren. Zum
anderen wird das erste Zeilenpaar dort eingefügt, wo schon
<i>whereami</i>, ein Programm mit ähnlicher Funktionalität wie
<i>netenv</i>, konfiguriert wird - ein Außenstehender findet so
leichter heraus, dass <i>netenv</i> verwendet wird, zum Beispiel bei
Bugreports. Und drittens gibt es eine zusätzliche Überprüfung, ob die
Datei vorhanden und lesbar ist, in der <i>netenv</i> die Informationen
für diesen Rechnerstart speichert.
<h3><a name="debian-features" ></a>Zusätzliche Möglichkeiten mit
Debian</h3>
Das Debian-Paket bietet derzeit zwei zusätzliche
"features". Um sie zu verwenden, muss man die
Konfigurationsdatei <kbd>/etc/netenv/netenv.conf</kbd> editieren.
<dl>
<dt><strong>Expertenmodus</strong>
<dd>Der <a href="#configuration" >Expertenmodus</a> ist ein
Sicherheitsrisiko, denn man erhält so eine <kbd>root</kbd>-Shell,
ohne ein Passwort eingeben zu müssen. Daher steht er in Debian
zunächst nicht zur Verfügung. Wenn Sie ihn trotzdem verwenden
wollen, verwenden sie in <kbd>netenv.conf</kbd> die
Variablenzuweisung
<pre>ALLOW_EXPERT=YES</pre>
Sie wurden gewarnt!
<dt><strong>Automatische Auswahl einer
Standardkonfiguration</strong>
<dd>Das dialog-Programm von Debian besitzt eine
timeout-Funktion. Setzt man die Variable <kbd>NETENV_TIMEOUT</kbd>
auf eine ganze Zahl größer 0, dann wartet der Dialog beim booten
so viele Sekunden wie angegeben. Ist bis dahin keine Eingabe
erfolgt, so wird mit der default-Konfiguration gebootet. Das
heißt, es wird die Datei in <kbd>/etc/netenv/</kbd> verwendet,
die den Hostnamen des Rechners hat. Wenn <kbd>NETENV_TIMEOUT</kbd>
auf Null gesetzt wird, dann wartet der Rechner, bis eine Eingabe
erfolgt. Beachten Sie, dass dies ein remote-Booten unmöglich
macht!
<dt><strong>Merken der letzten Auswahl.</strong>
<dd>Debian's <i>netenv</i> kann sich merken, welche Konfiguration
zuletzt ausgewählt wurde. Dies wird eingeschaltet, indem man die Variable
<kbd>NETENV_REMEMBER_LAST</kbd> auf <kbd>yes</kbd> setzt. Wenn sie
stattdessen auf <kbd>default</kbd> steht, dann wird beim Erreichen
des timeouts anstatt der nomalen Default-Konfiguration (s.o.) die
zuletzt verwendete Auswahl gebootet
<dt><strong>Automatischer Neustart von Dämonen</strong>
<dd>Ab Version 0.94 von <i>netenv</i> ist es möglich, das Programm im laufenden
Betrieb aufzurufen und die Netzwerkkonfiguration zu
verändern. Einige Hintergrundprozesse (Dämonen) müssen dann aber
neu gestartet werden oder ihre Konfigurationsdateien (die sich
möglicherweise auch verändert haben, s.u.) neu einlesen. Alle
<kbd>init</kbd>-Skripte, die in der Konfigurationsdatei der
Variablen <kbd>NETENV_RUN_INIT_SCRIPTS</kbd> zugewiesen
werden, werden nach dem Wechsel der Netzwerkkonfiguration mit dem
Parameter <kbd>restart</kbd> aufgerufen. Man gibt die Skripte als
eine in Anführungszeichen eingeschlossene, durch Leerzeichen
separierte Liste an, z.B.
<pre>NETENV_RUN_INIT_SCRIPTS="chrony myinitscript"</pre>.
<kbd>/etc/init.d/networking</kbd> wird auf jeden Fall ausgeführt.
<dt><strong>Auswahl der Standardkonfiguration per Variable</strong>
<dd>Zur Standardkonfiguration von <i>netenv</i> gehört die Datei
<kbd>/etc/netenv/<i>$hostname</i></kbd> (ohne angehängtes
"<kbd>-ort</kbd>"). Normalerweise kann man den Auswahldialog
unterdrücken, indem man die Variable <kbd>NETENV</kbd> auf den
Namen des <kbd><i>ort</i></kbd>es setzt, entweder als
Kernel-Argument, oder als Umgebungsvariable im laufenden Betrieb.
Damit ist es aber nicht möglich, die Defaultkonfiguration
auszuwählen, denn das würde einer leeren
<kbd>NETENV</kbd>-Variable entsprechen. In Debian kann man
stattdessen den Hostnamen angeben: Auf einem Computer namens lulu
wechselt
<pre>NETENV=irgendwo netenv</pre>
zur in der Datei <kbd>/etc/netenv/lulu-irgendwo</kbd> angegebenen
Konfiguration, während
<pre>NETENV=lulu netenv</pre>
die Konfiguration in <kbd>/etc/netenv/lulu</kbd> verwendet.
<dt><strong>Überspringen des "restart networking now?"-Dialogs</strong>
<dd>Bevor, wie oben beschrieben, die Hintergrundprozesse neu
gestartet werden, fragt <kbd>netenv</kbd> (falls es im laufenden
Betrieb aufgerufen wird) ob das geschehen soll. Diese Frage wird
übersprungen, wenn in <kbd>netenv.conf</kbd> die Variable
<kbd>NETENV_DO_RESTART</kbd> gesetzt wird, und zwar auf
<kbd>yes</kbd> (um im laufenden Betrieb immer neu zu starten, ohne
zu fragen) oder <kbd>never</kbd> (um ohne Frage niemals neu zu
starten).
</dl>
<h3><a name="debian-wwwoffle">netenv und der Offline-http-Proxy wwwoffle</a></h3>
<p>Wie oben beschrieben kann man <kbd>netenv</kbd> anweisen, bestimmte
Dämonen über deren init-Skripte neu zu starten. Bei
<kbd>wwwoffle</kbd> funktioniert dies leider
nicht. <kbd>wwwoffle</kbd> merkt sich nämlich vor dem Anhalten des
Dienstes den Status (online oder offline?) und stellt ihn nach dem
Neustart wieder her. Dies ist unter bestimmten Bedingungen sinnvoll
(z.B. wenn man das wwwoffle-Paket updated, während man online
ist). Es führt aber dazu, dass man den Aufruf
<tt>/etc/init.d/wwwoffle restart</tt> nicht verwenden kann, wenn
man gerade von einer offline- zu einer online-Konfiguration wechselt
oder umgekehrt.</p>
<p>Daher gibt es für <kbd>wwwoffle</kbd> (und für andere Skripte mit
ähnlichem Verhalten) eine weitere Variable,
<kbd>NETENV_START_STOP_SCRIPTS</kbd>. In ihr aufgeführte Skripte
werden nicht mit <kbd>restart</kbd>, sondern zunächst mit
<kbd>stop</kbd> und dann mit <kbd>start</kbd> aufgerufen.</p>
<p>Im übrigen hält der Debian-Maintainer von <kbd>netenv</kbd> dieses
Verhalten des wwwoffle-Pakets für einen Bug, siehe <a
href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=224937"
>http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=224937</a>.</p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="alternatives">Alternativen zu <i>netenv</i></a></h2>
Wie so oft in Linux gibt es Auswahl. Alternativen zu <i>netenv</i> sind im
<a href="http://tuxmobil.org/Mobile-Guide.db/Mobile-Guide.html">Linux on the
Road - A Guide for Laptops and Mobile Devices</a> von Werner Heuser beschrieben.
<p>
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.
<p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h2><a name="final">Schlußwort</a></h2>
Ich hoffe, <i>netenv</i> wird Ihnen nützlich sein. Bei Fragen und
Kommentaren senden Sie eine Mail an Gerd Bavendiek, <a
href="mailto:bav@epost.de">bav@epost.de</a>. <p>
<a href="#toc">Zurück zur Inhaltsübersicht</a>
<h1><a name="footnotes">Fußnoten</a></h1>
<a name="footnote1">[1]</a> In Debian wird statt
<kbd>/tmp/netenv</kbd> die Datei <kbd>/var/tmp/netenv</kbd>
verwendet. Dies liegt daran, dass im Bootprozess nach dem Aufrufen
von <cite>netenv</cite> das <kbd>/tmp/</kbd>-Verzeichnis geleert
wird. <cite>netenv</cite> würde zwar funktionieren, aber man könnte
nicht mehr die aktuelle Konfiguration aus dieser Datei ermitteln.
<hr>
<address><a href="mailto:bav@epost.de">Gerd Bavendiek</a></address>
<!-- Created: Mon Apr 13 21:25:07 CEST 1998 -->
<!-- hhmts start -->
Last modified: Sun Dec 17 13:54:13 CET 2006
<!-- hhmts end -->
</body>
</html>
|