User Tools

Site Tools


userpages:roco007

Installation auf einem Raspberry 2 B mit Raspian Jessie

Installation mit fertigen Paketen

Dazu gibt es hier eine Anleitung. Möglicher Weise ist der zweite Punkt unter "Konfiguration des Raspberry Pi's" weiter unten erforderlich.

Installation mit selbst Compilierten Paketen

Bei dieser Anleitung wird von einem Raspberry 2 B mit einem über NOOBS neu installiertem Raspbian Jessie ausgegangen.

Darüber, dass rocrail auf Jessie läuft, wurde bereits im Forum berichtet.

Zum Thema Raspberry Pi sei auch auf die Userpage von Pirat-Kapitan verwiesen, dort ist einiges zum Thema Raspberry Pi zusammengetragen.

Meine Anlage, die sich im Aufbau befindet, wird über einen BiDiB master von Fichtelbahn gesteuert der über USB am Raspberry hängt. Demzufolge bezieht sich ein Teil der Anleitung auch darauf. Der Raspberry Pi hängt über ein LAN im Netzwerk und wird über einen DHCP-Server mit der Netzwerkkonfiguration versorgt. Er wird "headless", ohne Tastatur, Maus und Monitor, betrieben. Auf ihm läuft nur der Rocrail-Server, zum steuern der Anlage kommen unterschiedliche Clients, ein Laptop mit WinXP, ein Netbook mit Ubuntu 14.04 LTS 64 bit, Tablets mit andRoc und Handys zum Einsatz. Diese Anleitung erfordert auch Zugang zum source-code der über git aus dem Internet geladen wird.

Vorbereitungen

Zusätzlich zur Standardinstallation sind erforderlich:

  • libusb-1.0-0-dev
  • libwxgtk3.0-dev
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install libwxgtk3.0-dev

libwxgtk2.8-0 ist hingegen nicht installiert

Konfiguration des Raspberry Pi's

Da der Raspberry Pi headless läuft, ist er so konfiguriert, dass er keine Graphische Benutzeroberfläche startet und dass kein user automatisch angemeldet wird.

Raspbian Jessie versucht anscheinend so schnell wie möglich zu booten ohne Rücksicht darauf, ob das Netzwerk bereits konfiguriert ist. Dies war möglicherweise der Grund dafür, dass rocrail bei mir nicht auf dem normalen Weg als Dienst gestartet werden konnte bzw. wieder beendet wurde, das wurde hier diskutiert. Daher ist Raspian so umkonfiguriert, dass es beim Booten auf das Netzwerk wartet.

Beide Punkte können über das Konfigurationstool auf einer Textkonsole konfiguriert werden. Dazu in einer Textkonsole, dies kann auch eine ssh-Verbindung sein:

sudo raspi-config

aufrufen. Dort sind folgende Einstellungen zu treffen:

  • Unter Punkt 3: Boot Options: B1 Console Text console, requiring user to login
  • Unter Punkt 4: Wait for Network at Boot: Slow Wait for network connection before completing boot

Download des Quelltextes

Hierzu sei auf die Wiki verwiesen, ein update eines bereits vorhandenen Source-code-Verzeichnisses erfolgt mit

cd /home/pi/rocrail_build/source/
git pull

Compilieren

Zur Installation wird rocrail compiliert und ein .deb-Paket erstellt, dieses wird in ein lokales, privates Paket-Archive eingespielt und über eine Paketverwaltung, z.B. aptitude, installiert. Das Compilieren und Erstellen des Paketes geschieht mit:

release=$(lsb_release -cs) 
processor=$(uname -m)
if [ $processor == "armv6l" ]; then
	platform="armhf"
fi
if [ $processor == "armv7l" ]; then
	platform="armhf"
fi
ncpu=$(grep -c processor /proc/cpuinfo)
cd /home/pi/rocrail_build/source/
make -j $ncpu fromtar
myexit=$?
if [ $myexit -eq 0 ] ; then	
	cd /home/pi/rocrail_build/source/rocrail/
	./mkdeb.sh $release $platform
fi

Anmerkung: Eigentlich sollte hier ein "make fromtar server" und ein "mkdeb-server.sh" ausreichend sein, dies habe ich persönlich jedoch nicht getestet.

Installation als Dienst

Nach der Installation kann rocrail so konfiguriert werden, dass es beim Booten automatisch gestartet wird. Dazu ist folgendes an einer Textkonsole einzugeben:

systemctl rocraild enable

Nach einem Neustart sollte nun rocrail zur Verfügung stehen.

Sollte rocrail nicht starten bzw. beim Booten wieder beendet werden dann nochmal zurück zum Punkt "Konfiguration des Raspberry Pi's" vielleicht liegt das Problem dort.

Automatisierung

Der Download und das Compilieren sollen automatisch irgendwann in der Nacht erfolgen.

Nachfolgend meine Lösung für dieses Thema.

Einige Vorbemerkungen:

  • Der download und das Compilieren erfolgen als user "uli", demzufolge lautet der Pfad in den folgenden scripten /home/uli/…., wer dies als user "pi" machen möchte, muss natürlich den Pfad entsprechend anpassen.
  • Es sind mehrere Computer unter Ubuntu 14.04 und der Raspbian unter Jessie im Einsatz, demzufolge erfolgt das Compilieren auf unterschiedlichen Computern.
  • Ein "headless" Computer unter Ubuntu 14.04 LTS Server 64 bit namens "d2500" mit der IP-Adresse 192.168.25.137 synchronisiert das lokal source-code Verzeichnis /home/uli/rocrail_build/source4all/ per "git" mit den offiziellen Source-code-Quellen. Zum Compilieren wird dieses lokale Verzeichnis am d2500 mit dem Verzeichnis /home/uli/rocrail_build/source per "rsync" synchronisiert.

Zeitgesteuertes Compilieren

Bisher hat das zeitgesteuerte Erledigen der Aufgaben über einen cron-job funktioniert der jedoch unter Jessie nicht mehr ausgeführt wurde. Daher ist eine neue Lösung erforderlich, diese basiert auf diesem Link. Erforderlich sind zwei Dateien: cron-compile-rocrail@uli.service und cron-compile-rocrail@uli.timer um zeitgesteuerte Aufgaben per "systemd" als user "uli" zu erledigen, beide liegen im Verzeichnis /etc/systemd/system/ und müssen demzufolge als Benutzer "root" dorthin kopiert werden. Erstellt wurden beide Dateien jedoch als Benutzer "uli" und haben die Rechte rw-r–r–.

/etc/systemd/system/cron-compile-rocrail@uli.service:

[Unit]
Description=Get and compile rocrail
# The name of the timer that's going to call this service file.
Wants=cron-compile-rocrail@uli.timer

[Service]
# Comment out the line below if you want to run it as root.
User=%I
# KISS (Keep It Simple Stupid)
Type=simple
# The actual command that must be called.
ExecStart=/home/uli/rocrail_build/compile_rocrail.cron

[Install]
WantedBy=basic.target

/etc/systemd/system/cron-compile-rocrail@uli.timer

[Unit]
Description=Get and compile rocrail

[Timer]
# To add a time of your choosing here, please refer to systemd.time manual page for the correct format
OnCalendar=*-*-* 01:00:00
# Persistence=true since this script is going to be called every week for life.
Persistent=true
# The name of the actual service must be specified since it contains the command to be run.
Unit=cron-compile-rocrail@uli.service

[Install]
WantedBy=basic.target

Die Definition "OnCalendar=*-*-* 01:00:00" führt das Bash-script "ExecStart=/home/uli/rocrail_build/compile_rocrail.cron" jeden Tag um 01:00 in der Nacht aus.

Mit den drei folgenden Befehlen wird das automatische Compilieren aktiviert:

# Refresh the daemons that systemd can see.
systemctl daemon-reload
# Enable the timer
systemctl enable cron-compile-rocrail@uli.timer
# Enable the service
systemctl enable cron-compile-rocrail@uli.service
# Start the cron-radiorecorder timer
systemctl start cron-compile-rocrail@uli.timer

Die Bash scripts

Das erste script sorgt dafür, dass sämtliche Ausgaben in eine log-Datei umgeleitet werden, dieses script wird vom systemd-timer aufgerufen. Ursprünglich wurde der Befehl im folgenden Script mit einem "&" am Ende der Zeile in den Hintergrund geschickt, mit der systemd-timer funktioniert dieses jedoch nicht mehr.

Das bash-script /home/uli/rocrail_build/compile_rocrail.cron:

#!/bin/bash
cd /home/uli/rocrail_build/
/home/uli/rocrail_build/compile_rocrail 1>/home/uli/rocrail_build/compile.$(date +%Y%m%d%H%M).log 2>/home/uli/rocrail_build/compile.$(date +%Y%m%d%H%M).log 

Das eigentliche Script /home/uli/rocrail_build/compile_rocrail dass den Download und das Compilieren übernimmt:

#!/bin/bash
mystarttime=$(date +%s)
# syncronizing source code
if [ -d /home/uli/rocrail_build/source4all ]; then
   echo "getting from internt"
   rm -rf /home/uli/rocrail_build/source/common/version.h
   cd /home/uli/rocrail_build/source4all
   git pull
   cd /home/uli/rocrail_build/source
   rsync -auv /home/uli/rocrail_build/source4all/ /home/uli/rocrail_build/source/
else
   echo "getting from d2500"
   # required to give d2500 time for "git pull"
   sleep 10m
   rsync -auv 192.168.25.137:/home/uli/rocrail_build/source4all/ /home/uli/rocrail_build/source/
   rm -rf /home/uli/rocrail_build/source/common/version.h
fi

cd /home/uli/rocrail_build/source/rocrail/
release=$(lsb_release -cs) 
processor=$(uname -m)
ncpu=$(grep -c processor /proc/cpuinfo)
echo $processor
if [ $processor == "armv6l" ]; then
   platform="armhf"
fi
if [ $processor == "armv7l" ]; then
   platform="armhf"
fi
if [ $processor == "i686" ]; then
   platform="i686"
fi
if [ $processor == "x86_64" ]; then
   platform="amd64"
fi

# compiling soruce code 
echo "building for $release $platform"
cd /home/uli/rocrail_build/source/
make -j $ncpu fromtar
myexit=$?

# building deb file or not
if [ $myexit -eq 0 ] ; then
   cd /home/uli/rocrail_build/source/rocrail/
   ./mkdeb.sh $release $platform
   cd /home/uli/rocrail_build/source/package/
   debfile=$(ls *.deb)
   echo "debfile $debfile"
   cp $debfile /home/uli/rocrail_build/archive/
   scp $debfile d2500:/home/uli/rocrail_build/incomming/$processor/
   ssh d2500 /home/uli/rocrail_build/addtorepo $processor $release $debfile
else
   echo "compiled failed"
fi

if [ -d /opt/rocrail/ ]; then
   echo "backup of rocrail files"
   backupdate=$(date +%Y%m%d%H%M)
   if [ -f /opt/rocrail/plan.xml ]; then
      cp /opt/rocrail/plan.xml /home/uli/backup/$backupdate.plan.xml
      scp /opt/rocrail/plan.xml d2500:/home/uli/Daten/Modelleisenbahn/rocrail/backup/$backupdate.plan.xml
   fi
   if [ -f /opt/rocrail/rocrail.ini ]; then
	cp /opt/rocrail/rocrail.ini /home/uli/backup/$backupdate.rocrail.ini
	scp /opt/rocrail/rocrail.ini d2500:/home/uli/Daten/Modelleisenbahn/rocrail/backup/$backupdate.rocrail.ini
   fi
fi
myendtime=$(date +%s)
myduration=$(date -u -d "0 $myendtime seconds - $mystarttime seconds" +"%H:%M:%S")
echo "done compile_rocrail in $myduration hh:mm:ss"

In diesem script wird ein weiteres bash-script, addtorepo, auf dem Computer d2500 aufgerufen. Dieses fügt das soeben erstellte Debian-Paket in ein lokales, nicht öffentlich zugängliches, Archiv ein über das rocrail verteilt und installiert wird. Das script /home/uli/rocrail_build/addtorepo:

#!/bin/bash
#processor=$1
#release=$2
#debfile=$3
echo $1
echo $2
echo $3
reprepro -b /var/www/apt/$1/$2/ --confdir /var/www/apt/$1/$2/conf.$2 includedeb $2 /home/uli/rocrail_build/incomming/$1/$3

Informationen dazu gibt es unter diesem Link oder unter diesem Link.

userpages/roco007.txt · Last modified: 2018/11/12 08:56 (external edit)