[HowTo] Installer DropBox sur un serveur Linux en CLI#

Sept 01, 2011

15 min read

Fidèle utilisateur de DropBox depuis plusieurs années je me suis demandé comment l’installer en ligne de commande sur mon serveur Debian (squeeze).

Imaginez les avantages, vous me direz bien sur qu’il existe d’autres moyen de synchroniser/partager des fichier. Mais l’intérêt de DropBox est la simplicité et son emploie par de nombreuse personnes a ce jour.

Préparation de l’installation#

Prérequis pour cette installation:

  • screen

  • lynx

  • python 2.6

  • wget

  • Librairie C > 2.4

aptitude install screen lynx wget python glibc

Obtenir la dernière version stable du tar pour votre architecture

  • x86 pour les architectures 32bits

  • x86_64 pour les architectures 64bits

wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"
wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86_64"

Choisir un utilisateur pour lancer DropBox, de préférence sans droits root

Par exemple epheo, pour moi

Connectez vous et allez dans son Home

su epheo
cd ~/

Installation#

Vérifiez et de zippez l’archive dans le Home

tar -tzf dropbox.tar.gz && tar -xvzf dropbox.tar.gz

Nous avons donc le client DropBox dans ~/.dropbox-dist/

Lancez le dans un screen

screen
~/.dropbox-dist/dropboxd

Ici premier problème, il nous demande de se connecter sur une page Web afin de se connecter.

Copiez l’adresse indiquée,

Sortez du screen avec ctrl+A+D

Accédez a un page Web quelconque via le navigateur CLI Lynx

lynx http://lyon-roller.com

Allez ensuite a l’url copiée précédemment avec maj+G (pour Go) et collez l’url

Connectez vous une première fois avec vos identifiants

Puis reconfirmez votre mot de passe une seconde fois (un peu plus bas dans la page)

Quittez lynx (maj+Q)

récupérez ensuite votre screen

screen -r

Votre compte doit être normalement lié avec votre machine et les fichiers commencent (enfin) a se synchroniser

:)

Nous allons maintenant télécharger un script python permettant de démarrer, stopper et connaître l’état de DropBox plus aisément.

  • Créer un dossier bin pour accueillir le script

  • Télécharger le script

  • Lui donner les droits

  • Vérifier le status de DropBox

mkdir -p ~/bin
wget -O ~/bin/dropbox.py"http://www.dropbox.com/download?dl=packages/dropbox.py"
chmod 755 ~/bin/dropbox.py
~/bin/dropbox.py status

Si tout va bien, il devrais vous retourner un message du genre:

Téléchargement de 6 170 fichiers (1,3 Ko/seconde, 69 jours restants)

(Oui, c’est lent…)

Redémarrez maintenant DropBox a l’aide du script python afin de vérifier que tout fonctionne correctement.

~/bin/dropbox.py stop
~/bin/dropbox.py start

Lancer DropBox au démarrage du système#

Pour Debian, le mieux est de créer un script init.d

Voici un exemple de script, remplacez user par votre utilisateur dans la variable DROPBOX_USERS

#!/bin/sh
# Script de lancement de DropBox
DROPBOX_USERS="user"

DAEMON=.dropbox-dist/dropbox

start() {
    echo "Démarrage de dropbox..."
    for dbuser in $DROPBOX_USERS; do
        HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
        if [ -x $HOMEDIR/$DAEMON ]; then
            HOME="$HOMEDIR" start-stop-daemon -b -o -c $dbuser -S -u $dbuser -x $HOMEDIR/$DAEMON
        fi
    done
}

stop() {
    echo "Arrêt de dropbox..."
    for dbuser in $DROPBOX_USERS; do
        HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
        if [ -x $HOMEDIR/$DAEMON ]; then
            start-stop-daemon -o -c $dbuser -K -u $dbuser -x $HOMEDIR/$DAEMON
        fi
    done
}

status() {
    for dbuser in $DROPBOX_USERS; do
        dbpid=`pgrep -u $dbuser dropbox`
        if [ -z $dbpid ] ; then
            echo "dropboxd n'est pas lancé pour USER $dbuser: "
        else
            echo "dropboxd est lancé pour l'utilisateur USER $dbuser: (pid $dbpid)"
        fi
    done
}

case "$1" in

    start)
        start
        ;;

    stop)
        stop
        ;;

    restart|reload|force-reload)
        stop
        start
        ;;

    status)
        status
        ;;

    *)
        echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
        exit 1

esac

exit 0

Creer un script dans /etc/init.d/

vi /etc/init.d/dropbox

Collez le script ci-dessus après modification

Enregistrez et fermez avec ctrl+x

Pour les autres distrib, une solution générale un peu plus “crade” consisterai a ajouter une crontab.

crontab -e
@reboot $HOME/.dropbox-dist/dropboxd

Post-installation#

Maintenant que tout fonctionne il peu être intéressant de déplacer le dossier par défaut de DropBox

la solution qui m’a paru la plus simple et de créer un lien symbolique

  • Stoppez DropBox

  • Déplacez le dossier

  • Créez un lien symbolique vers son ancien emplacement (home)

  • Redémarrez DropBox

~/bin/dropbox.py stop
mv ~/Dropbox /votre/nouveau/dossier
ln -s /votre/nouveau/dossier/Dropbox ~/
~/bin/dropbox.py start

Liste des problèmes et améliorations envisageable#

Vous ne pouvez/voulez pas installer lynx -> Créez un tunnel SSH SOCKS a partir d’un autre PC vers votre serveur

ssh -D 9999 nom_dutilisateur@ipduserveur

Activez le proxy SOCKS dans votre navigateur avec host= localhost et port = 9999

Puis inscrivez vous normalement

DropBox envoie sans arrêt des paquets sur le port 17500#

(et ça me saoule, mon pare-feux me fait la gueule)

Oui, DropBox synchronise aussi en LAN via le port 17500.

Et bien entendu, pas d’option à décocher dans un fichier de conf, ce serait trop beau.

En revanche, un patch python oui :)

Il faut commencer par installer pyDropboxValues.py avec dropbox.py (dans le dossier bin)

wget -O ~/bin/pyDropboxValues.py "http://dl.dropbox.com/u/340607/pyDropboxValues.py"
chmod +x ~/bin/pyDropboxValues.py && ~/bin/pyDropboxValues.py

Il devrait maintenant afficher une liste de config de DropBox. C’est normal, on passe a la suite:

Dans l’ordre:

  • Télécharger le patch dans le dossier DropBox

  • Stopper DropBox

  • Backup er pyDropboxValues.py

  • Appliquer le correctif

  • Relancer DropBox

wget -O ~/bin/dropbox_set_lansync.py "http://dl.dropbox.com/u/340607/dropbox_set_lansync.py"
~/bin/dropbox.py stop
cp ~/bin/pyDropboxValues.py ~/bin/pyDropboxValues.py.bak
chmod +x ~/bin/dropbox_set_lansync.py && ~/bin/dropbox_set_lansync.py off
~/bin/dropbox.py start

Et c’est tout bon