Skip to content

FTP-Server für GeoNetwork

Linux GeoNetwork ist ein Server für Metadaten von Geodaten. Also Daten die beschreiben was in Geodaten drin ist, wo die Informationen her kommen, was man damit machen darf und vielleicht auch noch wie gut sie sind.

Vor allem natürlich, auf welches Gebiet sie sich beziehen, denn man will ja später mit dem GeoNetwork räumlich suchen können. Also ein Gebiet auf der Karte auswählen und nicht nur nach einen Stichwort suchen müssen.

Um die Daten anzubieten bringt GeoNetwork den GeoServer mit, der zu ziemlich alle gängigen Formate an Geodaten von Shape bis GeoTIFF verwerten und einheitlich als WMS und WFS in allen Karten-Projektionen ausliefern kann, damit man sich die Daten komfortabel in das GIS-Programm eigener Wahl als Layer ziehen kann.

Für die eingetragenen Benutzer des GeoNetwork-Knoten ist es aber auch praktisch, die Geodaten selbst auf den Server hochladen zu können. Dafür bietet sich FTP an, ein Protokoll fast so alt wie das Internet selbst und älter als die meisten seiner Benutzer.

Ich stand vor der Aufgabenstellung, nun dem GeoNetwork noch einen FTP-Server zur Seite zu stellen. So ein FTP-Server ist schnell installiert, die Benutzer des GeoNetwork sollten sich auch dort mit dem selben Namen und Passwort einloggen können.

Glücklicherweise ist der proftpd so flexibel, dass er sich auch gegenüber einem SQL-Server authentifizieren kann. Dazu werden Benutzer und Gruppen in zwei Tabellen gehalten. Die Gruppen hab ich mir erspart und die Tabelle nur entsprechend dem Howto angelegt und leer gelassen:

CREATE TABLE ftpgroups (
groupname character varying(30) NOT NULL,
gid integer NOT NULL,
members character varying(255)
)


Für die Benutzer war der erste Plan, die Tabelle anzulegen und einen Trigger zu definieren, der bei Insert/Update auch die Tabelle ftpusers aktualisiert. Mit einer Abfrage gehts aber noch einfacher und vor allem klappt das auch bei einfachen Datenbank-Systemen:

CREATE OR REPLACE VIEW ftpusers AS
SELECT users.id AS pkid, users.username AS userid, users.password AS passwd, 10000+users.id AS uid, NULL::integer AS gid, NULL::text AS homedir, NULL::text AS shell
FROM users;


Wie man leicht erkennen kann wird das SHA1-verschlüsselte Passwort aus der Benutzertabelle des Geonetwork in die Tabelle der FTP-Benutzer gespiegelt, die Benutzer-ID ist der Primärschlüssel plus 10000 (möglicherweise will man hier auch NULL angeben um die Vorgabe der Konfiguration verwenden zu lassen).

Eine passende Konfigurationsdatei für den proftpd lädt nun nur noch die notwendigen Module und weist den FTP-Server an nur noch den Daten aus den Tabellen zu glauben. Die Defaults für UID und GID sind meiner Installation openSUSE 12.1 entnommen und müssen bei Bedarf angepasst werden.

ServerName "CarBioCial FTP Server"
ServerType standalone
DefaultServer on
Port 21
PassivePorts 49152 65534
DebugLevel 0
SystemLog /var/log/proftpd/proftpd.log
UseIPv6 off
Umask 022
MaxInstances 30
User ftp
Group ftp
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
LoadModule mod_sql.c
LoadModule mod_sql_postgres.c
LoadModule mod_sql_passwd.c
AuthOrder mod_sql.c
RootLogin off
AuthPAM off
DefaultRoot ~
RequireValidShell off
SQLBackend postgres
SQLAuthenticate on
SQLEngine on
SQLAuthenticate users*
SQLPasswordEngine on
SQLPasswordEncoding hex
SQLAuthTypes SHA1
SQLConnectInfo geonetwork@localhost geonetwork geopasswd
SQLDefaultUID 40
SQLDefaultGID 49
SQLDefaultHomedir /data/ftp
SQLUserInfo ftpusers userid passwd uid NULL NULL NULL
SQLGroupInfo ftpgroups groupname gid members
SQLUserWhereClause true
SQLNegativeCache off
SQLLogFile /var/log/proftpd/proftpd-sql.log


Danach noch den FTP-Server neu starten und die Benutzer können sich mit ihrem universellen GDI-Passwort einloggen und dies auch im GeoNetwork selbst ändern. Diese wäre mit LDAP nicht möglich gewesen, denn GeoNetwork kann sich nicht an den LDAP-Server binden, sondern nur die Anmeldung darüber durchführen lassen.

Noch ein letzter Tipp: Was hier gebaut wurde geht auch mit so ziemlich jeder Web-Anwendung, die Benutzer in einer SQL-Datenbank speichert. Man kann also genau so einfach ein Forum oder ein Blog mit einem FTP-Server erweitern.

YouTube-Filme auf Video-CD

Linux Das Video-CD-Format ist schon ziemlich alt und von der Qualität her so wie ein guter alter VHS-Videorecorder. Aber diese Scheiben haben einen großen Vorteil: Sie laufen auf jedem DVD-Player, den man sich an die Glotze anschließen kann. Die besseren Formate wie DivX oder H264 können meist nur die 50-Euro-Dinger aus dem Kaufhaus.

Ich hatte grad mal Bedarf ein YouTube-Video für jemand ohne Internet (das gibts auch noch) auf eine CD zu brennen, so dass es ohne viel Knöpfchendrücken abspielbar ist. Da kam mir diese nicht mehr ganz zeitgemäße Video-CD gerade recht. Keine Menüs auswählen, einfach CD rein und spielt ab, so wie man das von Audio-CDs auch kennt.

Als zertifizierter Linuxer natürlich Oldschool Commandline, und das geht erstaunlich einfach musste ich feststellen. Ich hatte mit umfangreichen Parameter-Orgien gerechnet, aber das ist nur bei der Formatkonvertierung erforderlich wenn man dem mencoder verwendet. Der hat dafür den Vorteil alles konvertieren zu können was der mplayer abspielt und das dürfte bei korrekter Installation so wirklich jedes Video sein, das man sich irgendwo runterladen kann.

Das bedeutet auch, dass man mit dem Weg, den ich hier in diesem Artikel notiere damit ich bei Bedarf noch mal drauf zurückgreifen kann so ziemlich jedes Filmchen auf Video-CD brennen kann. Das hätte ich bei meiner alten Digitalkamera auch schon gebrauchen können, die nämlich relativ exotisches (die Mac-User mögen es mir nachsehen) Quicktime-Video erzeugte. Eine Alternative für die Konvertierung wäre noch der ffmpeg, der einfach eine Option target=vcd hat, aber bei einigen Video-Formaten auch gern mal zickt.

Natürlich braucht man die bei YouTube übliche FLV-Datei auf der Platte, es kann auch die bessere MP4-Datei sein, dafür gibts schon diverse Tools um sich den Film von YouTube oder ähnlichen Video-Portalen herunterzuladen. Einige Portale bieten den Download sogar direkt an.

Die eigentliche Umwandlung macht ein etwas unhandlicher Aufruf von mencoder, den ich mir aus der mplayer-Doku kopiert habe:
mencoder -oac lavc -ovc lavc -of mpeg
-mpegopts format=xvcd -vf scale=352:288,harddup
-srate 44100 -af lavcresample=44100
-lavcopts vcodec=mpeg1video:keyint=15:vrc_buf_size=327:
vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224
-ofps 25 -o videocd.mpg hirschhausen.flv

Damit (alles in eine Zeile natürlich!) wird eine Datei mit dem phantasielosen Namen videocd.mpg erzeugt. Wer kreativer ist oder mehrere Dateien konvertieren möchte sieht auch hier sofort was zu tun ist. Die Optionen stehen vorne um über die History der Shell schnell andere Dateien zu verarbeiten.

Danach wird ein Image für die Video-CD gebacken:
vcdimager videocd.mpg

Man kann dem vcdimager auch mehrere Videodateien im passenden Format vorwerfen. Bei den aktuellen Preisen für leere CDs mach ich das aber nicht. Die Defaults passen und weitere Optionen sind nicht erforderlich.

Das erstellte Image kann man dann mit cdrdao auf eine CD brennen:
cdrdao write videocd.cue

Auch hier sind in meinem Fall keine Optionen erforderlich, weil es einen symbolischen Link /dev/cdrecorder bei mir gibt, der korrekt auf /dev/sr0 zeigt.

Das wars schon. Die Dateien lassen sich danach mit rm videocd* einfach alle wegräumen. Ich hab mir die Schritte in ein Skript flv2vcd.sh geschrieben das auch im Downloadbereich bereitliegt. Nun hab ich von der Qualität eines YouTube-Videos auf dem Pantoffelkino keine Wunder erwartet, aber die Qualität ist für mich als aus der Generation Videorecorder sogar noch akzeptabel.

MP3 aus YouTube Video

Linux Für einen Remix im Hauptstadtstudio brauchte ich grad aus einem YouTube Video nur die Tonspur als MP3. Für sowas gibts natürlich tolle Windows-Programme, die das komfortabel erledigen und die bei den Kids auch sehr beliebt sind.

Sowas muss es doch aber auch schlank für die Kommandozeile geben? Gibts natürlich auch. Das Video-Tool der Wahl und auch ganz allgemein ist bei Linux wohl der MPlayer. Dazu gehört ein Zusatztool, der MEncoder, mit dem man Videos konvertieren kann. Der MEncoder kann aber auch nur eine MP3-Datei aus dem Video erstellen, das bei YouTube meist im FLV-Format vorliegt.

Miro speichert aber auch eine Version als MP4 ab, wenn sie vorhanden ist. Beides kann MEncoder problemlos verarbeiten, wenn man sich die richtigen MPlayer Codecs installiert hat. Die Optionen für die Konvertierung muss man sich auf der Manpage zusammensuchen, ich verwende diese hier:
mencoder Geoklapse.MP4 -ovc copy -of rawaudio -oac mp3lame -lameopts preset=standard -o Geoklapse.mp3


Das würde sicher auch mit weniger Optionen gehen, aber so kommt bei mir jedenfalls eine ordentliche MP3-Datei aus dem YouTube-Video heraus.

Mit einer For-Schleife drumherum kann man so auch mal eben das ganze Download-Verzeichnis konvertieren. Anschließend kann man die MP3-Datei noch mit mp3gain auf einen normalen Pegel bringen, falls man mehrere auf einem portablen MP3-Player mitnehmen und nicht immer am Knopf für die Lautstärke drehen möchte.
tweetbackcheck