Benutzer-Werkzeuge

Webseiten-Werkzeuge


openqrm_-_client_per_upstart_starten

openQRM - Client per Upstart starten

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

  1. die zukünftige in Ubuntu;
  2. deutlich einfacher zu handhaben als Init-Sys-V;

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

UpStart-Konfiguration im OpenQRM-Client-TAR-Paket einbauen

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

/usr/share/openqrm/web/boot-service/openqrm-client.conf

# 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

Problem

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.

vorübergehende Problemumgehung

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

/usr/share/openqrm/web/boot-service/openqrm-client_start.sh

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
/home/http/wiki/data/pages/openqrm_-_client_per_upstart_starten.txt · Zuletzt geändert: von 127.0.0.1