per Skript Netzwerkandressen in verschiedenen Dateien anpass

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
stschulze
Beiträge: 8
Registriert: 12.10.2013 19:08:02

per Skript Netzwerkandressen in verschiedenen Dateien anpass

Beitrag von stschulze » 12.10.2013 19:14:22

hi,

in einem VDR-System möchte ich in verschiedenen Konfigurationsdateien an mir bekannten Stellen Einträge zur IP-Adresse des Rechners per Skript anpassen. Leider habe ich keine Ahnung, wie ich das am Besten anstellen soll.

Ich stelle mir das so vor:

1. Rechner startet

2. IP-Adresse von eth0 und eth1 werden ausgelesen

3. In Abhängigkeit des hostname wird entweder die IP von eth0 oder eth1 in die Konfigurationsdateien geschrieben, z.B in die /etc/vdr/setup.conf

4. der VDR und die Plugins werden geladen

Mir ist klar, dass der Wunsch dies zur Bootzeit zu erledigen anspruchsvoll, ggf. nicht realisierbar ist. Mir würde deshalb auch ein statischer Skriptaufruf ausreichen, da ich davon ausgehe, dass sich die IP-Adresse nicht ständig ändert.

Ich wäre Euch dankbar für hilfreiche Vorschläge, wie ein solches Skript aussehen kann.

Herzlichen Gruß Stephan

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: per Skript Netzwerkandressen in verschiedenen Dateien an

Beitrag von Cae » 12.10.2013 19:56:35

Das ist sogar sehr elegant loesbar, da man Code in die /etc/network/interfaces packen kann; die up- und down-Direktiven sind genau dafuer gedacht:

Code: Alles auswählen

iface eth0 inet static
	up   if echo foobar | cmp -s - /etc/hostname; then ip addr add 192.0.2.42/24 dev eth0; else ip addr add 192.0.2.123/24 dev eth0; fi
	down if echo foobar | cmp -s - /etc/hostname; then ip addr del 192.0.2.42/24 dev eth0; else ip addr del 192.0.2.123/24 dev eth0; fi
oder so aehnlich. Das wuerde die IP-Adresse auf .42 setzen, wenn der Hostname foobar lautet, ansonsten auf .123. Falls das ein bisschen mehr Code wird, sollte man die Logik und das Setzen der IPs in extra Skripte verschieben.

Willkommen im Forum!

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

stschulze
Beiträge: 8
Registriert: 12.10.2013 19:08:02

Re: per Skript Netzwerkandressen in verschiedenen Dateien an

Beitrag von stschulze » 12.10.2013 20:11:16

Cae hat geschrieben:Das ist sogar sehr elegant loesbar, da man Code in die /etc/network/interfaces packen kann; die up- und down-Direktiven sind genau dafuer gedacht:

Code: Alles auswählen

iface eth0 inet static
	up   if echo foobar | cmp -s - /etc/hostname; then ip addr add 192.0.2.42/24 dev eth0; else ip addr add 192.0.2.123/24 dev eth0; fi
	down if echo foobar | cmp -s - /etc/hostname; then ip addr del 192.0.2.42/24 dev eth0; else ip addr del 192.0.2.123/24 dev eth0; fi
oder so aehnlich. Das wuerde die IP-Adresse auf .42 setzen, wenn der Hostname foobar lautet, ansonsten auf .123. Falls das ein bisschen mehr Code wird, sollte man die Logik und das Setzen der IPs in extra Skripte verschieben.

Willkommen im Forum!

Gruss Cae
Danke für die rasche Antwort und das Willkommen.

Gute Idee, in der /etc/network/interfaces werden die Netzwerkeinstellungen vorgenommen, da ist es in der Tat passend.

Der VDR wird über OSD durch den Nutzer konfiguriert. U.a. hat man so die Möglichkeit per OSD einzustellen, ob DHCP oder manuelle IP-Adressvergabe genutzt werden soll. Wenn der Nutzer das macht, wird u.a. die interfaces-Datei neu geschrieben. Mit dem reboot wird dann die IP-Adresse entsprechend gesetzt. Dann soll das neue Skript zum Einsatz kommen und u.a. in der /etc/vdr/setup.conf die IP-Einstellungen für das streamdev-Plugin gesetzt werden, auch wenn man per DHCP die IP-Adresse bekommt.

Ich wäre dankbar, wenn mir jemand einen Tipp geben könnte, wie ich die IP-Adresse auslesen und an eine Stelle in eine Textdatei schreiben kann. Je nachdem um welchen Hostname es sich handelt, wird dann entweder eth0-IP oder eth1-IP in die Textdatei reingeschrieben.
Zuletzt geändert von Cae am 12.10.2013 22:28:58, insgesamt 1-mal geändert.
Grund: rot ist die Farbe der Mods und Admins. Mit [u] ersetzt.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: per Skript Netzwerkandressen in verschiedenen Dateien an

Beitrag von Cae » 12.10.2013 22:29:09

Also du willst eine IP eines definierten Interfaces nehmen und die in einer Datei eintragen?

Code: Alles auswählen

#!/bin/sh

case "$(hostname)" in
	foo)
		interface=eth0;
		;;
	bar)
		interface=eth1;
		;;
	*)
		echo >&2 "$0: undefined hostname: $(hostname)"
		exit 1;
		;;
esac

first_ip="$(ip addr show "$interface" | awk '"inet"==$1{sub(/\/.*/,"");print$2;exit}')"
conf=/etc/vdr/setup.conf
template="${conf}.template"

[ -e "$template" ] || cp -a "$conf" "$template";
sed 's/__INSERT_IP__/'"$first_ip"'/g' <"$template" >"$conf";
Die Idee ist, dass man eine .template-Datei hat, die die zu ersetzenden Stellen mit __INSERT_IP__ ausgefuellt hat. Die wird dann per sed ersetzt und an die Stelle der originalen Config geschrieben. Natuerlich gehen dabei eventuell gemachte Einstellungen an der originalen Config verloren; nach Moeglichkeit sollte man die IP-Direktive in eine separate Datei ausgliedern, an der sich sonst nie etwas aendert.

Beachte ausserdem, dass ein Interface mehrere IPs haben kann, wobei oben nur die erste genommen wird. Welche das ist, kann zufaellig sein.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

stschulze
Beiträge: 8
Registriert: 12.10.2013 19:08:02

Re: per Skript Netzwerkandressen in verschiedenen Dateien an

Beitrag von stschulze » 13.10.2013 03:23:03

super, danke, das hat mir sehr weitergeholfen ...

ich habe das Skript fast fertig .... einzig eine Sache fehlt mir noch:

Kann man über den Befehl dialog abfragen, nach welcher alten IP-Adresse man in den einzelnen Textdateien sucht um diese zu ersetzen durch die neue IP-Adresse.

Super wäre es, wenn der Nutzer die IP-Adresse eingeben kann und ich diese nicht fest im Skript festlegen müsste, im folgenden Code ist es die 192.168.0.16 :

Code: Alles auswählen

[ -e "$template2" ] || cp -a "$conf2" "$template2";
			sed 's/192.168.0.16/'"$first_ip"'/g' <"$template2" >"$conf2";
			echo "/etc/vdr/setup.conf"

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: per Skript Netzwerkandressen in verschiedenen Dateien an

Beitrag von Cae » 13.10.2013 22:07:31

Die Idee dabei war eigentlich, dass __INSERT_IP__ nicht manuell von dir ersetzt wird, sondern genau so in der .template drin steht. Dadurch hat man das Problem gar nicht, weil's immer derselbe String ist. Nichtsdestotrotz koennte man etwas wie

Code: Alles auswählen

read -p 'alte IP angeben: ' oldip
sed "s/$oldip/$firstip/g" ...
einbauen.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten