beaglebone

Pythonscript unter Ubuntu als Service starten

Meinen Wetterserver möchte ich als Service starten, so dass ich Programmupdates ohne Reboot des BBB einspielen kann.

Ich benötige zwei Services

  • zum Speicher der über MQTT empfangen Daten: wnf_wetter_spe­icher.service
  • zum Anzeigen der Daten: wnf_wetter_http­.service
$ sudo nano /etc/systemd/system/wnf_wetter_speicher.service

Da der Service unbedingt eine aktives Netzwerk braucht, wird dieser Service nach dem network-online.target gestartet.

[Unit]
Description=wnfWetterSpeichern
Wants=network-online.target
After=network-online.target syslog.target

[Service]
Type=simple
User=wnf
Group=wnf
WorkingDirectory=/home/wnf/wnfwetter/
ExecStart=/home/wnf/wnfwetter/wnf_wetter_speicher.py
StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target
sudo nano /etc/systemd/system/wnf_wetter_http.service
[Unit]
Description=wnfWetterHttp
After=syslog.target

[Service]
Type=simple
User=wnf
Group=wnf
WorkingDirectory=/home/wnf/wnfwetter/
ExecStart=/home/wnf/wnfwetter/wnf_wetter_http.py
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable wnf_wetter_speicher.service
$ sudo systemctl enable wnf_wetter_http.service
$ sudo systemctl daemon-reload
$ sudo service wnf_wetter_speicher start
$ sudo service wnf_wetter_http start

Literatur

Letsencrypt auf BBB erneuern

Von Letsencrypt kommen E-Mails mit der Nachricht

You may need to update your client to the latest version in case it is still using the deprecated TLS-SNI-01 validation method. https://community.letsencrypt.org/…upport/74209

$ certbot --version || /path/to/certbot-auto --version
certbot 0.28.0
$ sudo sh -c "sed -i.bak -e 's/^\(pref_challs.*\)tls-sni-01\(.*\)/\1http-01\2/g' /etc/letsencrypt/renewal/*; rm -f /etc/letsencrypt/renewal/*.bak"
$ sudo certbot renew --dry-run
  • Jetzt kommt die Fehlermeldung:
IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: bone.nfix.de
   Type:   connection
   Detail: Fetching
   http://bone.nfix.de/.well-known/acme-challenge/C1ye-gE-z3kMKFE-UQxZ-pkGaLD19E9FA7bHa6malik:
   Error getting validation data
  • Da certbot den http Zugriff auf bone.nfix.de benötigt, muss in der Fritzbox das Port 80 freigegeben se­in.
$ sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/bone.nfix.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for bone.nfix.de
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/bone.nfix.de/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/bone.nfix.de/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Radicale auf BBB (Logging: OSError: [Errno 30] Read-only file system: '/var/log/radicale/log')

Nachdem ich auf meinen BBB von Ubuntu 16.04 auf Ubuntu 18.04 gewechselt hatte musste ich feststellen, dass das der Radicale-Server nicht mehr lief.

Der Befehl $ journalctl –unit radicale.service -e liefert u.a. diese Fehlermeldung:

OSError: [Errno 30] Read-only file system: '/var/log/radicale/log'

den Radicale-Server anhalten

$ sudo systemctl stop radicale

Da ich nicht herausgefunden habe, warum das Filesystem Read-Only sein soll habe ich in

$ sudo nano /etc/radicale/config

das Logging ausgeschaltet

[logging]
## config = /etc/radicale/logging
## debug = True

den Radicale-Server wieder starten

$ sudo systemctl start radicale

Radicale auf BBB

Die Installation von Radicale als CalDav und CardDav Server auf meinem BBB war erfolgreich. Radicale kommt mit einem eigenen Http-Server daher und muss deshalb nicht in nginx eingebunden werden.

Leider hatte Thunderbird/Lig­htning bei der ganzen Probiererei die Zusammenarbeit mit meinem CalDav-Kalender eingestellt. Es gab nur das gelbe Warndreieck: „Der Kalender ist nicht verfügbar“. Wie „hier (Kalender syncronisiert nicht – DAV_NOT_DAV – gelbes Warndreieck)“: https://www.thunderbird-mail.de/…warndreieck/ zu lesen ist, liegt das daran, dass Thunderbird die Passwörter nur einmal pro Server speichern kann. Deshalb habe ich

  • die Passwörter für den Radicale-Server in Thunderbird gelöscht.
  • Den Radicale-Kalender in Thunderbird abgemeldet
  • Thunderbird neu gestartet
  • Den Radicale-Kalender neu erstellt (mit der kompletten Pfadangabe, wie Radicale sie anzeigt.)
https://radicale.fritz.box:5232/user/xxxa40a-84cb-b167-4d4c-06f92db7xxx/
  • Es wird erneut nach User und Passwort gefragt, dann sollte der Radicale Kalender auch unter Thunderbird funktionieren.

Literatur

Beaglebone Black und Locale

Meine Pythonscripte laufen nicht richtig auf dem BBB. Es kommt zur beliebten Fehlermeldung:

UnicodeEncodeError: 'ascii' codec can't encode character ...

1. Locale generieren

sudo locale-gen de_DE.UTF-8

2. Locale setzen, dies generiert auch die Datei /etc/default/lo­cale.

update-locale LANG=de_DE.UTF-8

3. Danach das System neu starten oder eine neue Konsole öffnen.

Literatur

Tags: 

Beaglebone Black und die blaue LED

Literatur BeagleBone Black Built-In LEDs

Falls der BBB sichtbar ist, nervt eine blau blinkende LED gehörig. Dabei handelt es sich um die LED 0 deren Steuerung im Verzeichnis /sys/class/led­s/beaglebone:gre­en:usr0 festgelegt wird.

$ cd /sys/class/leds/beaglebone:green:usr0

Diese LED wird vom heartbeat getriggert:

$ cat trigger
none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock
kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock
kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock
nand-disk usb-gadget usb-host mmc0 mmc1 timer
oneshot [heartbeat] backlight gpio default-on

Um diesen Trigger auf none zu schalten sind die folgenden Befehle nötig:

$ sudo su
# echo none > trigger
$ cat trigger
[none] rc-feedback kbd-scrolllock kbd-numlock kbd-capslock
kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock
kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock
nand-disk usb-gadget usb-host mmc0 mmc1 timer
oneshot heartbeat backlight gpio default-on

Damit die blaue LED beim Booten des BBB ausgeschaltet wird müssen diese Zeilen in die Datei /etc/rc.local vor dem exit 0 eingetragen werden:

# blaue LED ausschalten
cd /sys/class/leds/beaglebone:green:usr0
echo none > trigger
Tags: 

Beaglebone Black

Da auf meinem Beaglebone Black (BBB) das Betriebssystem auf dem internen Speicher installiert war, konnte ich kein do-release-upgrade ausführen, da der Speicherplatz nicht ausreichte. Also musste das System auf einer 32-GByte-SDCard neu aufgesetzt werden.

Auf meinem Desktoprechner, die SD-Card vorbereiten.

$ sudo ./mk_mmc.sh --mmc /dev/sdd --dtb am335x-boneblack --distro xenial --firmware --serial-mode

Die SD-Card im BBB einlegen. Die serielle Schnittstelle des BBB mit dem Desktoprechner verbinden und minicom starten:

$ sudo minicom -D /dev/ttyUSB0

Beim Anschließen des BBB an die stromversorgung den Schalter S2 auf dem BBB gedrückt halten, damit von der SD-Card gebootet wird.

Literatur

Tags: 

letsencrypt Zertifikat auf Beagle Bone Black verlängern

Was vor drei Monaten geschah

Das Zertifikat ist abgelaufen und muss jetzt erneuert werden.

Auf der virtuellen Maschine Kubuntu

$ cd letsencrypt/
$ ./letsencrypt-auto --rsa-key-size 4096 --manual certonly

Eingeben der Domain-Namen

bone.nfix.de

auf dem Beaglebone ins Grundverzeichnis www wechseln und die von letsencrypt erwartete Datei anlegen

$ sudo -i
# cd /var/www/
# printf "%s" KENNUNGS-STRING > .well-known/acme-challenge/KENNUNGS-DATEI

Auf der virtuellen Maschine

  • Enter,
  • Gratulation
  • Your cert will expire on 2016–06–07.
  • Die erzeugten Schlüssel auf den Beaglebone in das Verzeichnis Schlüssel kopieren
$ sudo -i
# cd /etc/letsencrypt/archive/bone.nfix.de/
# scp * wnf@bone2013:schluessel
cert1.pem                                                  100% 2134     2.1KB/s   00:00
cert2.pem                                                  100% 2134     2.1KB/s   00:00
chain1.pem                                                 100% 1675     1.6KB/s   00:00
chain2.pem                                                 100% 1675     1.6KB/s   00:00
fullchain1.pem                                             100% 3809     3.7KB/s   00:00
fullchain2.pem                                             100% 3809     3.7KB/s   00:00
privkey1.pem                                               100% 3272     3.2KB/s   00:00
privkey2.pem                                               100% 3276     3.2KB/s   00:00

Auf dem Beaglevone Den Http-Server anhalten:

$ sudo -i
# service lighttpd stop
# cd /home/wnf/schluessel
# cat privkey2.pem cert2.pem > ssl.pem
# cd /etc/letsencrypt/live/
# cp /home/wnf/schluessel/ssl.pem .
# cp /home/wnf/schluessel/fullchain2.pem ./fullchain.pem

Den Http-Server wieder starten:

# service lighttpd start

Und schon hat der Beaglebone wieder ein gültiges Zertifikat: https://bone.nfix.de/

Auf dem Beaglebone den lighttp-Server für https konfigurieren

Literatur

Voraussetzung

In der VM eine dhparam.pem erstellen (dauert auf dem BBB zu lange)

$ openssl dhparam -out dhparam.pem 4096

die Dateien auf den Beaglebone kopieren

# scp dhparam.pem wnf@bone2013:schluessel
$ sudo -i
# service lighttpd stop

SSL für lighttpd auf dem Beaglebone einrichten

# cd /home/wnf/schluessel
# cat privkey1.pem cert1.pem > ssl.pem
# mkdir /etc/letsencrypt/live/
# cd /etc/letsencrypt/live/
# cp /home/wnf/schluessel/ssl.pem .
# cp /home/wnf/schluessel/fullchain1.pem ./fullchain.pem
# cd /etc/ssl/certs/
# cp /home/wnf/schluessel/dhparam.pem .
# cd /etc/lighttpd/conf-enabled
# touch letsencrypt.conf
# nano letsencrypt.conf
$SERVER["socket"] == ":443" {
     ssl.engine                  = "enable"
     ssl.pemfile                 = "/etc/letsencrypt/live/ssl.pem"
     ssl.ca-file                 =  "/etc/letsencrypt/live/fullchain.pem"
     ssl.dh-file = "/etc/ssl/certs/dhparam.pem"
     ssl.ec-curve = "secp384r1"
     ssl.honor-cipher-order = "enable"
     ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
     ssl.use-compression = "disable"
     setenv.add-response-header = (
    "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload",
    "X-Frame-Options" => "DENY",
    "X-Content-Type-Options" => "nosniff"
)
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
}

Seiten