• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

netz-config ändern per script

oelk

Member
Hallo,

ich führe eine Installation openSUSE 13.1 64bit per autoyast durch,
zu diesem Zeitpunkt hinter einem Proxy.
Der zu installierende Rechner hat eine feste IP mit Gateway und
Proxy-Eintrag, kein network-manager, sondern ifup, kene GUI.

Wenn er alles fertig installiert hat, möchte ich das Gateway und den Proxy
per Script entfernen. Wie macht man das am geschicktesten?
Per 'sed' Dateien verändern klappte nicht, da sind nach einem Neustart
immer komische Zeichen nach dem login:
Code:
# Proxy und Routing entfernen
sed -i s#PROXY_ENABLED=\"yes\"#PROXY_ENABLED=\"no\"# /etc/sysconfig/proxy
sed -i s#HTTP_PROXY=\"http:\/\/192.168.8.9:3128#HTTP_PROXY=\"http:\/\/\"# /etc/sysconfig/proxy
rm /ect/sysconfig/network/routes
touch /ect/sysconfig/network/routes
service network restart
Ode rhabe ich etwas vergessen?

Wie könnte ich da noch lösen?

MfG
 
OP
O

oelk

Member
Hallo,

zehnmal drüber geschaut und doch nicht gesehen.
Ich hab's hinbekommen:

oelk schrieb:
# Proxy und Routing entfernen
sed -i s#PROXY_ENABLED=\"yes\"#PROXY_ENABLED=\"no\"# /etc/sysconfig/proxy
sed -i s#HTTP_PROXY=\"http:\/\/192.168.8.9:3128#HTTP_PROXY=\"http:\/\/\"# /etc/sysconfig/proxy
Da fehlte doch glatt hinter der 3128 die abschliesenden Gänsefüsschen.
So geht's dann:
Code:
#!/bin/bash

# Proxy entfernen
unset http_proxy
unset HTTP_PROXY
sed -i s#PROXY_ENABLED=\"yes\"#PROXY_ENABLED=\"no\"# /etc/sysconfig/proxy
sed -i s#HTTP_PROXY=\"http:\/\/192.168.8.9:3128\"#HTTP_PROXY=\"http:\/\/\"# /etc/sysconfig/proxy

# Routing entfernen
route del default
rm  /etc/sysconfig/network/routes
touch /etc/sysconfig/network/routes
service network restart
Den 'unset http_proxy' mach ich zu Sicherheit zweimal, die erste Zeile hat nicht immer funktioniert.

MfG
 
A

Anonymous

Gast
oelk schrieb:
Code:
sed -i s#PROXY_ENABLED=\"yes\"#PROXY_ENABLED=\"no\"# /etc/sysconfig/proxy
sed -i s#HTTP_PROXY=\"http:\/\/192.168.8.9:3128\"#HTTP_PROXY=\"http:\/\/\"# /etc/sysconfig/proxy
Wenn du Konfiguration mit Script und sed in Zukunft mit weniger Problemen machen willst, oder auch mal Scripte schreiben willst die etwas mehr profihaft aussehen, hier ein paar Tips,

Nimm als Trennzeichen nicht # oder andere Zeichen die Sonderfunktionen haben. # hat sowohl in der Bash mit der du das Script aufrufst, wie auch in sed eine Kommentarfunktion und sowas ist nicht ganz ungefährlich, da schon kleinste Änderungen an einem eigentlich funktionieren Script ausreichend sein könnten, das das ganze in die Hose geht und eine halbe sed-Code Zeile zum Kommentar wird und dir das ganze Script crasht. (GNU)Sed nimmt hinter s theoretisch (fast)jedesTrennzeichen, aber # ist nicht die beste Wahl.
Standard ist / , das sollte man auch verwenden wenn man nicht unbedingt viel Dateinamen und bearbeiten muss, dann empfiehlt sich zum Beispiel ~ das hat dann den Vorteil das man dann / nicht quoten braucht. Ein anderes Trennzeichen als / zu verwenden und dann / aber trotzdem noch zu quoten zeigt das der Schreiber des Scriptes überhaupt keine wirkliche Ahnung davon hat was in der sed Zeile passiert.

Quote des gesamten sed Befehlscode, und zwar so das die Bash dort nichts ändern kann. Das erspart dir nen Haufen Probleme und dann brauchst du innerhalb des Sedcodes nicht noch mal nen Haufen nur wegen der Bash zu quoten, die Quoterei die man in Sed und bei Regulären Ausdrücken benötigt, reicht vollkommen aus, da muss man sich nicht zusätzlich nochmal das Quoten schon gequoteter Sonderzeichen zumuten.

Wenn du Konfigurationsscripte mit sed bearbeitest, dann Programmiere das in sed genauso wie es logisch Richtig ist und so wie es in der Konfiguration selbst auch ausgewertet und verwendet wird, und so wie du das auch mit Hand manuell ändern würdest. ZB alle Kommentare und Leerzeichen ignorieren. Die Konfiguratiosvariable als Suchmuster nehmen und den Wert dahinter auswerten und gegebenenfalls ersetzen und nicht die gesamte Zeile ..... usw.

wenn du mit sed und der Option -i arbeitest, dann alles in einem Schritt und sed -i nicht mehrmals hintereinander auf die selbe Datei aufrufen, das kann bisweilen auch mal Nebenwirkungen zeigen, wie du selbst auch schon bemerkt hast. Eine Sicherungskopie von Konfigurationsdateien die man per Script ändert ist sicher auch nicht schlecht. Aber dann braucht man auch -i nicht wirklich.

Berücksichtige soweit möglich alle gültigen Syntax der Konfiguration, wenn YES und yes und NO und no erlaubt ist dann solltest du auch alle Schreibweisen berücksichtigen, und wenn "192.168.1.200:8181" und "proxy.mydomain:8181" beides gültige Konfigurationsmöglichkeiten sind die du zurücksetzen willst, dann solltest du auch beides abfragen, ansonsten verlässt du dich allzuschnell darauf das dein Script funktioniert, und änderst irgendwas in deinem autoyast File oder hast einfach nur eine andere Installationsquelle die etwas anders arbeitet , und schon hast du den Salat weil dein Script nicht mehr passt und du gar nicht verstehst warum das jetzt plötzlich nichts mehr funktioniert, und du so einfach die Zusammenhänge gar nicht herstellen kannst, warum jetzt gar nichts mehr funktioniert.

In der Endkonsequenz könnte dann ein sed Aufruf in einem Bashscript durchaus auch mal so hier aussehen. (ohne Erklärung und Kommentar, der sollte natürlich auch noch rein, damit deine Urlaubsvertretung auch nachvollziehen kann was hier passieren soll). Sicherlich kompliziert anzuschauen, aber dafür eben auch etwas Universeller.
Code:
sed -i ' /^#/bA;
         /^[ \t]*$/bA;
         /PROXY_ENABLED/s/"YES"/"no"/i;
         /HTTP_PROXY/s/= *".*:[0-9]\+"/=""/;
         :A;
       '   /etc/sysconfig/proxy
Zum Rest deines Scripts wären durchaus auch noch ein paar Kleinigkeiten anzumerken, aber wir sind alle nicht vollkommen auf die Welt gekommen und wollen es eigentlich auch nicht alle wirklich werden.

robi
 
OP
O

oelk

Member
Das klappt ja alles schon ganz gut.
Jetzt bin ich aber auf eine andere Idee gekommen:
ich installaire mit autoyast mit der zukünftigen IP 192.168.0.50, die soll er später haben.
In 2. Schritt würde ich dann
- die IP ändern auf 192.168.1.132 ( da im Hausnetz der Firma),
- ein Gateway und einen Nameserver hinzufügen,
- den Proxy setzen,
- die Updates holen
- den Proxy entfernen
- das Gateway und den Nameserver entfernen
- die ursprüngliche IP wieder setzen.

Ist das überhaupt machbar? Bei meiner Suche ist mir netconfig über den Weg gelaufen.
aber mit der Syntax komme ich nicht klar.

Ich mach übrigens auf einer openSUSE 13.1 mit net.ifnames=0

MfG
 
Oben