This file is indexed.

/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 &lt;florian@suse.de&gt;, 1996
#       Werner Fink &lt;werner@suse.de&gt;, 1996
#       Burchard Steinbild &lt;bs@suse.de&gt;, 1996
#       Rolf Haberrecker &lt;rolf@suse.de&gt;, 1998
#       Werner Fink &lt;werner@suse.de&gt; (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/&lt;NODE-NAME&gt;-&lt;VALUE-OF-VARIABLE-NETENV&gt;
</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&lt;LINE' /etc/rc.config > /tmp/.rc.config.netenv 
   cat /tmp/.netenv.tmp.$$ >> /tmp/.rc.config.netenv
   awk -v LINE=$LINE 'NR&gt;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
&quot;features&quot;. 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>