Schlagwort-Archive: Linux

Programme zeitgesteuert starten mit at und timeout

… und damit Internet-Radio aufzeichnen

Ja, ich will tatsächlich einen Live-Stream zu einer bestimmten Zeit rippen. Dafür gibt’s Tools wie streamripper (für MP3-Stream) und yt-dlp (für alles andere einschließlich AAC über HLS), doch die wollen zu einer bestimmten Zeit gestartet und wieder gestoppt werden. Zumindest streamripper kann sich per entsprechender Option auch selbst wieder beenden, aber yt-dlp läuft, wenn der Stream nicht von sich aus endet, endlos weiter.

Für’s Starten dachte ich zuerst an cron, aber wenn es nicht um wiederkehrende Aufgaben, sondern um ein einmaliges Starten geht, geht es auch einfacher mit at.

Bei at ist zu beachten, dass der auszuführende Befehl über die Standardeingabe an at gesendet wird und die Ausgabe standardmäßig von at über sendmail versendet wird. Wenn das nicht installiert oder konfiguriert ist, kann man das Verhalten mit der Option at -M ausschalten. Falls die Ausgabe der gestarteten Programme interessiert, kann man die auch in ein File umleiten.

Für’s Beenden gibt es den Befehl timeout, der nach einer definierten Anzahl von Sekunden einen Prozess killt. Für meinen konkreten Fall, das Beenden der Aufzeichnung von yt-dlp, musste ich noch die Option timeout --signal=2 mitgeben, damit yt-dlp nicht abgeschossen, sondern über das gleiche Signal, das einem Strg+C an der Kommandozeile entspricht, beendet wird. Nur dann schließt yt-dlp den angefangenen Stream korrekt ab und es entsteht ein fertiges (in meinem konkreten Fall .mp4-) File.

Zur Vereinfachung hier das Ganze fertig in Skripte gesteckt, wo direkt schon mal die URLs für das Web-Radio von hr2 drin stehen. Das atq am Ende zeigt den aktuellen Stand der Queue an, näheres steht in der Manpage zu at.

Bei der Gelegenheit sollte man übrigens noch mal dringen prüfen, ob die Zeitzone richtig eingestellt ist und das ggf. mit sudo timedatectl set-timezone "Europe/Berlin" (oder was auch immer für eine Zeitzone gewünscht wird) nachholen.

Beispiel für streamripper:

#!/bin/sh                                                                                           

# Starte eine Stream-Aufzeichnung mit streamripper zu einer definierten Zeit.                       

# Dazu wird "at" benutzt mit -M, weil at sonst versucht zu mailen...                                
# Einstellung der URL, der Dauer und der Zeit ueber Variablen.                                      
# duration in Sekunden, time HHMM, month engl. Abkuerzung                                           

url="https://dispatcher.rndfnk.com/hr/hr2/live/mp3/high"
duration=10920
time=1959
day=21
month=MAR
command="streamripper $url -a -A -l $duration"

echo $command
echo $command |at $time $day $month -M
atq

Beispiel für yt-dlp, was HLS kann, aber keinen eigenen Timeout hat:

#!/bin/sh                                                                                           

# Starte eine Stream-Aufzeichnung mit yt-dlp zu einer definierten Zeit.                             

# Dazu wird "at" benutzt mit -M, weil at sonst versucht zu mailen...                                
# Einstellung der URL, der Dauer und der Zeit ueber Variablen.                                      
# duration in Sekunden, time HHMM, month engl. Abkuerzung                                           
# Beachten: signal=2 beim timeout sollte dafuer sorgen, dass yt-dlp den Output fixt                 

url="https://hlshr2.akamaized.net/hls/live/2016534/hr2/master.m3u8"
duration=10920
time=1959
day=21
month=MAR
command="timeout --signal=2 $duration yt-dlp $url"

echo $command
echo $command |at $time $day $month -M
atq

Über das zeitgesteuerte Aufnahmen von Internetradio mit at und yt-dlp steht auch was in dem Blogartikel „Internetradio zeitgesteuert aufnehmen mit yt-dlp“ von Wolfgang Kirk.

Ubuntu 22 auf dem Raspberry Pi

… für Nextcloud

Ein weiterer Beitrag aus der Rubrik „Notizen über Computerkram für mich selbst“.

Raspberrypios kommt aktuell von Haus aus noch mit PHP 7. PHP lässt sich mit einer externen Paketquelle auf 8.0 bringen. Nextcloud wird für die kommende Version aber PHP 8.1 und ein 64-Bit-Betriebssystem brauchen. Daher sollte Ubuntu 22.04 LTS 64 Bit auf einen Raspi 3 kommen.

Der Pi-Imager kann direkt Einstellungen wie Benutzername, SSH-Public Key, WLAN-Kennung und Passwort usw. übertragen und tut dies mit cloud-init. Dies kann später zu Überraschungen führen, da Änderungen in Ubuntu, die an den sonst üblichen Stellen vorgenommen werden, beim nächsten Start von cloud-init wieder zurückgesetzt werden. Dies war der erst Punkt, der mich Nerven gekostet hat. Da cloud-init meiner Auffassung nach wenn die Ersteinrichtung erledigt ist an sich nicht mehr gebraucht wird, habe ich mich entschieden, cloud-init zu entfernen.

sudo apt remove cloud-init

Der zweite Punkt, der mich Nerven gekostet hat, war, dass aus welchen Gründen auch immer der Raspi nun so konfiguriert war, dass er zwar die WLAN-Zugangsdaten über cloud-init vom Imager vorher korrekt bekommen hat, aber die LAN-Buchse nicht aktiv ist!

Das Netzwerk kann über netplan konfiguriert werden, cloud-init hinterlässt die Datei /etc/netplan/50-cloud-init.yaml für die Konfiguration von netplan, die auch die WLAN-Daten enthält, allerdings keinen Eintrag für die LAN-Buchse.

Über den NetworkManager geht das ganze sorgenfrei, allerdings ist der erst Mal nicht installiert. Also:

sudo apt install network-manager

Jetzt erst mal nen gescheiten Editor installieren:

sudo apt install emacs

Dann in der Datei /etc/netplan/50-cloud-init.yaml nach network: und vor wifis: die Zeile

renderer: NetworkManager

einfügen und weiter unten renderer: networkd auskommentieren oder löschen.

sudo emacs /etc/netplan/50-cloud-init.yaml

Noch eine kleine Aufzählung von Paketen, die ich für Nextcloud auf Apache sowie für Dateiverschlüsselung und für Let’s Encrypt installieren musste:

sudo apt install mariadb-server apache2 php
sudo apt install php-mysql php-xml php-zip php-mbstring
sudo apt install php-curl php-gd php-imagick
sudo apt install php-gmp php-bcmath php-intl
sudo apt install cryptsetup
sudo apt install ecryptfs-utils
sudo apt install certbot
sudo apt install python3-certbot-apache

Und nun noch das Zertifikat holen:

sudo certbot --apache

Nun sollte alles bereit sein. Nextcloud installiere ich nicht über eine Paketquelle sondern kopiere es in /var/www/html/nextcloud/ Den Owner stelle ich auf…

sudo chown -R www-data:www-data /var/www/html

Sofern das Nextcloud-Datenverzeichnis woanders liegt muss das dem selben User gehören.

@ oder die rechte und die linke Hand des Teufels

Normalerweise ist es auch bei einer Mac-Tastatur völlig egal, ob man die linke oder die rechte alt-Taste (beim Mac auch option-Taste) verwendet.

Böse Falle: Hat man ein Ubuntu-Linux in Parallels laufen, wird die linke alt-Taste das Menü der jeweiligen Anwendung öffnen, nur mit der rechten alt-Taste kann man zum Beispiel das @-Symbol (alt+L) eingeben.

Aber Vorsicht: Während das bei der internen Tastatur eines MacBook gilt, sieht es bei externen Tastaturen schon wieder anders aus und es kann sein, dass es dort genau andersherum ist…