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
per Skript Netzwerkandressen in verschiedenen Dateien anpass
Re: per Skript Netzwerkandressen in verschiedenen Dateien an
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: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
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
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
Re: per Skript Netzwerkandressen in verschiedenen Dateien an
Danke für die rasche Antwort und das Willkommen.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: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.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
Willkommen im Forum!
Gruss Cae
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.
Grund: rot ist die Farbe der Mods und Admins. Mit [u] ersetzt.
Re: per Skript Netzwerkandressen in verschiedenen Dateien an
Also du willst eine IP eines definierten Interfaces nehmen und die in einer Datei eintragen?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
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";
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
Re: per Skript Netzwerkandressen in verschiedenen Dateien an
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 :
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"
Re: per Skript Netzwerkandressen in verschiedenen Dateien an
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 wieeinbauen.
Gruss Cae
Code: Alles auswählen
read -p 'alte IP angeben: ' oldip
sed "s/$oldip/$firstip/g" ...
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