Linux: Stream aufnehmen und Rechner runterfahren

2010-07-14 von wolf

Heute habe ich das Vergnügen den ersten Gastbeitrag zu veröffentlichen. :)

Problem: gute Radiosendungen kommen oft zu Zeiten, zu denen man am Radio/ Rechner sitzt (Arbeit/ Schlaf).
Glücklicherweise bieten viele Sender auch einen Livestream, den man mitschneiden kann.
Wenn man nicht möchte, dass der Rechner die ganze Nacht/ den ganzen Tag läuft, wäre es schön, wenn er sich nach erfolgter Aufnahme selbst herunter fährt.

Aufgrund der vielen verarbeitbaren Formate und der Möglichkeit, den Stream beim aufnehmen auch gleich in ein gewünschtes Format zu transformieren ist vlc eine gute Wahl.

Für das automatische starten des downloads bietet sich unter Linux ein cronjob an (Dokumentation). Mit diesem lässt sich ein Shellscript starten, welches den Download anstößt und nach Beendigung des selben den Rechner herunter fährt.

Das Problem dabei ist, dass für das Herunterfahren des Rechners meist superuser-Rechte benötigt werden, also das Passwort eingegeben werden muss. Der Lösungsansatz, den cronjob einfach als root einzutragen scheitert daran, dass vlc sich aus Sicherheitsgründen nicht als root nutzen lässt. Zwei getrennte cronjobs (einer als Standard-User zum aufnehmen, einer als root zum Herunterfahren) zu nutzen ist ungeschickt, da man beim Hinzufügen oder Entfernen eines neuen Radiostreams jedes Mal zwei Einstellungen vornehmen muss.

Eine Elegantere Lösung ist es, dem Nutzer, der den cronjob ausführen lässt, das Recht erteilt den Befehl des Herunterfahrens ohne Eingabe des Passworts zu gestatten.

Dies wird erreicht, indem man (als superuser) die Datei /etc/sudoers editiert und folgende Zeile anhängt:

UserName    ALL=NOPASSWD:   /sbin/halt

Der Befehl halt wurde statt shutdown gewählt, da er weniger Optionen als shutdown bietet.

dann kann man mit dem Befehl

crontab -e

das Script, welches den download ausführt und danach den Rechner herunter fährt zu bestimmten Zeitpunkten ausführen lassen.

Das Script könnte folgendermaßen aussehen:

#!/bin/sh
NOW=$(date +"%b-%d-%y")
cvlc --run-time=4200 http://mp3stream1.apasf.apa.at:8000/ --sout "#duplicate{dst=std{access=file,mux=raw,dst=/home/UserName/Downloads/Name_der_Sendung-$NOW.mp3}" vlc://quit ;
sudo halt

Es wird automatisch das Datum mit in den Dateinamen geschrieben, so dass die vorherigen Sendungen nicht überschrieben werden.

Autor: wolf

Kategorie: IT Schlagwörter: , , , ,