Im allgemeinen funktioniert das Script /etc/init.d/openqrm-client prächtig nur wenn man die ausgetretenen Pfade verlässt wird es problematisch.
So auch hier, wird haben auf den KVM-Maschinen (diejenigen, die die CPU-Leistung für die VM's bereitstellen) Bonding installiert. Leider wird das openQRM-Client-Script schon vorher gestartet und versagt dabei…
Es darf erst gestartet werden wenn die Bridge-Interfaces hochgefahren wurden, die an die Bonding-Interfaces gebunden sind:
# brctl show bridge name bridge id STP enabled interfaces br0 8000.001b215fb8cd no bond0 br1 8000.0024e849890b no bond1 br2 8000.001b21447e50 no bond2
Aus diesem Grund brauchen wir ein upstart-Script, welches unseren openQRM-Client erst startet, wenn das Bonding-Interfaces hochgefahren wurden:
# vi /etc/init/openqrm-client.conf
description "openQRM-Client zum richtigen Zeitpunkt starten lassen"
author "DER Sysop"
start on started bridge-network-interface
or started network-interface-security
or started network-interface INTERFACE=bond0
or started net-device-up IFACE=bond0
or started ssh
console output
script
# erstmal alles laden, was man gebrauchen könnte
. /var/openqrm/openqrm-resource.conf
# auch wenn die Netzwerk-Geräte hochgefahren sind,
# kann es in einigen Fällen noch nicht funktionieren,
# hier wird einfach etwas Wartezeit benötigt
ping -c50 ${resource_openqrmserver}
# openQRM-Client starten
if [ "$(/etc/init.d/openqrm-client status)" = "openQRM-client service is not running" ] ; then
/etc/init.d/openqrm-client restart
fi
end script
Es ist auch möglich andere Start-Event's anzugeben. Welche Event's auf dem System verwendet werden, kann man mit diesem Kommando sehen:
# initctl list
Gezielt kann man den Status eines Event's so abfragen:
# initctl status ssh ssh start/running, process 3403 # initctl status network-interface INTERFACE=bond0 network-interface (bond0) start/running
Da diese Start-Methode
ist, sollte man sich vielleicht überlegen, ob man hier nicht auch die anderen Aktionen einträgt, die bisher im openQRM-Start-Script (/etc/init.d/openqrm-client) reingehäkelt wurden.
In dem Fall würde die UpStart-Konfigurationsdatei so aussehen:
description "openQRM-Client zum richtigen Zeitpunkt starten lassen"
author "DER Sysop"
start on started bridge-network-interface
or started network-interface-security
or started network-interface INTERFACE=bond0
or started net-device-up IFACE=bond0
or started ssh
console output
script
# erstmal alles laden, was man gebrauchen könnte
. /var/openqrm/openqrm-resource.conf
# auch wenn die Netzwerk-Geräte hochgefahren sind,
# kann es in einigen Fällen noch nicht funktionieren,
# hier wird einfach etwas Wartezeit benötigt
ping -c50 ${resource_openqrmserver}
# hier wird ein komplettes Update durchgeführt
aptitude update
aptitude -y safe-upgrade
# hier werden noch Pakete installiert, die wir brauchen
aptitude -y install screen links nmap bmon mc
# openQRM-Client starten
if [ "$(/etc/init.d/openqrm-client status)" = "openQRM-client service is not running" ] ; then
/etc/init.d/openqrm-client restart
fi
### MTU für 10000MB/s
rm -f /root/netspeed.sh
wget -q -t 10 -nc -O /root/netspeed.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/netspeed.sh"
/bin/sh /root/netspeed.sh
# in die HW-DB eintragen
rm -f /root/hardwareinfos_zum_server_schicken.sh
wget -q -t 10 -nc -O /root/hardwareinfos_zum_server_schicken.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/hardwareinfos_zum_server_schicken.sh"
/bin/bash /root/hardwareinfos_zum_server_schicken.sh
end script
WICHTIG! Diese Änderungen werden auf aktiven VM's (auch nach einem Reboot) nicht wirksam! Sie betreffen nur neu erstellte Appliances, und müssen auf laufenden Maschinen in der Datei /etc/init.d/openqrm-client nachgezogen werden.
So wird die aktuellste Konfiguration immer automatisch beim Start ausgerollt und man braucht sie nur noch im OpenQRM-Client-TAR-Paket zu pflegen.
Als erstes muss das openQRM-Client-Archiv an einem sicheren Ort ausgepackt werden:
# mkdir /var/tmp/openqrm-client # cd /var/tmp/openqrm-client # tar xzf /usr/share/openqrm/web/boot-service/openqrm-client.ubuntu.x86_64.tgz
# vi usr/share/openqrm/etc/init.d/openqrm-client
Wir werden hier die Funktione "openqrm_client_start" um ein paar Zeilen ergänzen.
Wichtig ist, das wir nur innerhalb dieser "if"-Abfrage etwas tun!
if [ ! -f /linuxrc ]; then
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
fi
Nach unseren Änderungen sieht es so aus:
if [ ! -f /linuxrc ]; then
# hier werden noch Pakete installiert, die wir brauchen
aptitude update ; aptitude -y safe-upgrade ; aptitude -y install screen links nmap bmon mc
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
rm -f /etc/init/openqrm-client.conf
wget -q -t 10 -nc -O /etc/init/openqrm-client.conf "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/openqrm-client.conf"
fi
Zum Schluss muss das Archiv wieder zusammen gepackt und aufgeräumt werden:
# tar czf /usr/share/openqrm/web/boot-service/openqrm-client.ubuntu.x86_64.tgz * # cd # rm -fr /var/tmp/openqrm-client
# openQRM-Client starten
description openQRM-Client zum richtigen Zeitpunkt starten lassen
author DER Sysop
#start on started bridge-network-interface
# or started network-interface-security
# or started network-interface INTERFACE=bond0
# or started net-device-up IFACE=bond0
# or started ssh
start on started ssh
console output
respawn
respawn limit 10 120
pre-start script
# erstmal alles laden, was man gebrauchen könnte
. /var/openqrm/openqrm-resource.conf
# auch wenn die Netzwerk-Geräte hochgefahren sind,
# kann es in einigen Fällen noch nicht funktionieren,
# hier wird einfach etwas Wartezeit benötigt
ping -c50 ${resource_openqrmserver}
end script
script
# erstmal alles laden, was man gebrauchen könnte
. /var/openqrm/openqrm-resource.conf
# in die HW-DB eintragen
rm -f /root/hardwareinfos_zum_server_schicken.sh
wget -q -t 10 -nc -O /root/hardwareinfos_zum_server_schicken.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service /hardwareinfos_zum_server_schicken.sh"
/bin/sh /root/hardwareinfos_zum_server_schicken.sh
# hier wird ein komplettes Update durchgeführt
aptitude update
aptitude -y safe-upgrade
# hier werden noch Pakete installiert, die wir brauchen
aptitude -y install screen links nmap bmon mc
if [ "$(/etc/init.d/openqrm-client status)" = "openQRM-client service is not running" ] ; then
/etc/init.d/openqrm-client restart
fi
end script
Siehe auch openQRM - Client installiert beim Start fehlende Pakete
Leider funktioniert diese Konfiguration mit Upstart noch nicht reibungslos!
Es wird jede vom System installierte Upstart-Konfiguration ordnungsgemäß abgearbeitet nur die selbst erstellten Upstart-Konfigurationen werden nicht abgearbeitet.
Höchstwahrscheinlich ist noch ein weiterer Arbeitsschritt nötwendig, der mir zur Zeit aber noch nicht bekannt ist.
Solange die sichere Abarbeitung unserer selbst erstellten Upstart-Konfigurationen nicht gegeben ist, werden wir unsere Aktionen durch "rc.local" ausführen lassen.
Hierfür müssen folgende Anpassungen in dem OpenQRM-Client-TAR-Paket vorgenommen werden:
# mkdir /var/tmp/openqrm-client # cd /var/tmp/openqrm-client # tar xzf /usr/share/openqrm/web/boot-service/openqrm-client.ubuntu.x86_64.tgz
# vi usr/share/openqrm/etc/init.d/openqrm-client
Wir werden hier die Funktione "openqrm_client_start" um ein paar Zeilen ergänzen.
Wichtig ist, das wir nur innerhalb dieser "if"-Abfrage etwas tun!
if [ ! -f /linuxrc ]; then
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
fi
Nach unseren Änderungen sieht es so aus:
if [ ! -f /linuxrc ]; then
# hier werden noch Pakete installiert, die wir brauchen
aptitude update ; aptitude -y safe-upgrade ; aptitude -y install screen links nmap bmon mc
# start boot-services from enabled plugins
for boot_service in $openqrm_boot_services; do
openqrm_boot_service $boot_service start
done
rm -f /etc/init/openqrm-client.conf
wget -q -t 10 -nc -O /etc/init/openqrm-client.conf "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/openqrm-client.conf"
rm -f /root/openqrm-client_start.sh
wget -q -t 10 -nc -O /root/openqrm-client_start.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/openqrm-client_start.sh"
/bin/sh /root/openqrm-client_start.sh
fi
Zum Schluss muss das Archiv wieder zusammen gepackt und aufgeräumt werden:
# tar czf /usr/share/openqrm/web/boot-service/openqrm-client.ubuntu.x86_64.tgz * # cd # rm -fr /var/tmp/openqrm-client
echo '#!/bin/bash
if [ -n "$(egrep "^auto[ /t]*bond0" /etc/network/interfaces)" ] ; then
while [ ! -s /sys/class/net/bond0/address ]
do
. /var/openqrm/openqrm-resource.conf
sleep 1
ip addr > /tmp/netz 2>&1
ping -c1 ${resource_openqrmserver} > /tmp/ping 2>&1
done
fi
. /var/openqrm/openqrm-resource.conf
ping -c30 ${resource_openqrmserver}
rm -f /root/hardwareinfos_zum_server_schicken.sh
wget -q -t 10 -nc -O /root/hardwareinfos_zum_server_schicken.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/hardwareinfos_zum_server_schicken.sh"
/bin/bash /root/hardwareinfos_zum_server_schicken.sh
if [ "$(/etc/init.d/openqrm-client status)" = "openQRM-client service is not running" ] ; then
aptitude update
aptitude -y safe-upgrade
aptitude -y install screen links nmap bmon mc
/etc/init.d/openqrm-client restart
fi
' > /etc/rc.local
update-rc.d -f rc.local remove
update-rc.d rc.local defaults 99 11