Dropbox als Server unter Linux einrichten

Ich nutze seit einiger Zeit für weniger wichtige Dateien den Storage Provider Dropbox. Dieser bringt ein kleines Tool um Dateien mit dem Windows oder Linux PC zu Synchronisieren mit. Auch Smartphone Apps sind verfügbar. Allerdings vermisse ich seit einiger Zeit die Möglichkeit, einen Ordner auf einem Linux-Server automatisch im Hintergrund abzugleichen. Das ist zum Beispiel ganz nützlich um diesen Ordner auch per Samba (CIFS/SMB) oder NFS im lokalen Netz freizugeben.

Nun habe ich nach einiger Recherche im Netz eine Möglichkeit gefunden, Dropbox als Service einzurichten. Das ganze ist im Dropbox-Wiki sehr gut Dokumentiert.

Die dort verwendeten init Script verwenden allerdings Multiuser-Umgebungen. Auf einem Server ist es besser einen getrennten Benutzer anzulegen und Dropbox unter diesem zu starten. Der neue user dropbox mit dem Basedir /data/raid/dropbox soll dazu verwendet werden.Nach dem Anlegen des Benutzers muss der dropboxd einmalig unter diesem Benutzer gestartet und der Account aktiviert werden. Meine Anpassungen am Gentoo Script sehen wie folgt aus:

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later
# $Header: /var/cvsroot/gentoo-x86/sys-fs/dropbox/files/dropbox.init-1.0,v 1.4 2007/04/04 13:35:25 cardoe Exp $
NICENESS=5
DROPBOX_USER="dropbox"
DROPBOX_HOME="/data/raid/dropbox"
DROPBOX_BINARY="/opt/dropbox/dropboxd"
DROPBOX_LOG="/var/log/dropbox_log"
DROPBOX_ERR="/var/log/dropbox_err"
depend() {
need localmount net
after bootmisc
}
start() {
ebegin "Starting dropbox..."
touch $DROPBOX_LOG
touch $DROPBOX_ERR
chown $DROPBOX_USER $DROPBOX_LOG $DROPBOX_ERR
start-stop-daemon -1 $DROPBOX_LOG -2 $DROPBOX_ERR -b -S -m --pidfile /var/run/dropbox.pid -o -N $NICENESS -u $DROPBOX_USER -v -e HOME=$DROPBOX_HOME -x $DROPBOX_BINARY
eend $?
}
stop() {
ebegin "Stopping dropbox..."
start-stop-daemon --stop --pidfile /var/run/dropbox.pid
eend $?
}
status() {
if [ -e /var/run/dropbox.pid ] ; then
echo "dropboxd running."
else
echo "dropboxd not running."
fi
eend $?
}

PHP – Shell Scripte mit root-rechten ausführen – sudo

Wie immer steht am Anfang eine Idee. Bei mir war es der Wunsch, vom Smartphone das kopieren der Speicherkarten meiner Kameras zu starten. Das ganze vollständig zu automatisieren war mir zu riskant, da ich schon noch zwischen Mounten (für Samba), Kopieren und Verschieben der Dateien auf der Speicherkarte unterscheiden wollte.

Alles haben diese Befehle gemeinsam, man benötigt root-rechte zum Mounten und Auswerfen der Speicherkarten. Webserver mit root-rechten betreiben? suexec Modul von Apache nutzen? Alles zu riskant und viel zu kompliziert. Der einfachste weg ist es, ein Shellscript mit root-Berechtigungen vom Webserver aus zu starten. Und das geht am besten mit sudo.

Um das Script /usr/local/sbin/webscript.sh unter root rechten zu starten, muss zuerst der Webserver berechtigt werden, das Script unter root Rechten zu starten. Das geht in der Datei /etc/sudoers. Der Eintrag

apache ALL=(ALL) NOPASSWD: /usr/local/sbin/webscript.sh

berechtigt den Benutzer apache von jedem Quellhost ohne zusätzliche Passworteingabe das Script auszuführen. Funktioniert das, sollte der Host auf localhost begrenzt werden.
Anschließend kann das Script aus PHP mittels

system('sudo /usr/local/sbin/webscript.sh');

oder wenn die Ausgabe direkt im Browser ausgegeben werden soll mit

passtruh('sudo /usr/local/sbin/webscript.sh');

ausgeführt werden. erstellt man nun ein Shellscript das eine CF-Karte mountet, je nach Parameter die Dateien kopiert oder verschiebt und startet es per PHP vom webserver, kannd er Kopiervorgang von jedem http fähigen Gerät aufgerufen werden. So ist ein Szenario denkbar, vom Streaming-Radio mit RSS-Reader komplexe Scripte am Webserver auszuführen.

Bilder mit PHP skalieren – image-Funktionen

Nachdem mich nun mehrere Leute nach einem Image Scaler für PHP fragten, und ja finestpics.de so etwas verwendet, habe ich dazu entschlossen ein kleines Script für genau dieses Problem zu veröffentlichen. Das Script lädt ein Bild in den Speicher, ermittelt Länge und Breite und skaliert das Bild auf die lange Seite ohne Verzerrung. Aber mehr dazu sollte jedem beim lesen des Quellcodes klar werden.

Für die ganze Skalierung werden die Image/gd Funktionen von PHP verwendet. Es sollte ab php4 funktionieren.

Hier gehts zum Script.