Dropbox sur Linux

J’ai eu besoin d’installer Dropbox sur un serveur Rocky Linux pour effectuer périodiquement des copies de sauvegarde de certains répertoires (des backups) avec l’outil Borg.

Bien que Linux ne soit pas le marché cible de Dropbox, ils proposent quand même un support basique composé de deux programmes: un démon, et un script client pour contrôler le démon.

Les choses à savoir

Le support de Dropbox sur Linux est minimal car leur outil est peu configurable. En particulier, la synchronisation se fait dans le répertoire $home de l’utilisateur et cela n’est pas modifiable. Dans mon cas, mon ordinateur est un mini serveur avec un disque SSD pour le système et un disque dur classique pour les données. Je souhaitais donc que la synchronisation Dropbox se fasse sur la bonne partition du disque dur.

L’astuce pour contrôler l’emplacement des fichiers Dropbox est donc de créer un utilisateur dédié et de paramétrer son répertoire à l’emplacement souhaité.

De plus, on installera le démon en tant que service systemd. Il faudra se souvenir de lancer ou d’arrêter le service avec systemd (la méthode standard sur Rocky Linux) et pas avec le script python fourni par Dropbox. En revanche, leur script est très utile, même indispensable, pour les autres commandes qu’il contient.

Créer l’utilisateur dropbox et son répertoire

En supposant qu’on souhaite placer les fichiers Dropbox dans /data/dropbox :


sudo adduser -m -d /data/dropbox -r -s /sbin/nologin dropbox
  • L’option -m indique de créer un répertoire $home pour l’utilisateur dropbox que l’on crée.
  • L’option -d paramètre l’emplacement du répertoire $home.
  • L’option -r indique qu’il s’agit d’un utilisateur système.
  • L’option -s /sbin/nologin empêche que cet utilisateur puisse se loguer.

Installer Dropbox sur Rocky Linux

Les URL de téléchargement sont fournies sur cette page.

Ce code télécharge l’archive principale et le script python pour contrôler le programme, le tout est copié dans le répertoire de notre utilisateur dropbox.

Si vous n’avez pas déjà l’outil wget installé sur votre système: sudo dnf install wget

Même chose pour l’outil tar: dnf install tar

Pour le programme principal:


cd /usr/src
sudo wget -O dropbox.lnx.x86_64.tar.gz https://www.dropbox.com/download?plat=lnx.x86_64
sudo tar -xf dropbox.lnx.x86_64.tar.gz
sudo rm -r dropbox.lnx.x86_64.tar.gz
sudo cp -r .dropbox-dist /data/dropbox/
sudo rm -r .dropbox-dist
sudo chown -R dropbox:dropbox /data/dropbox/.dropbox-dist

Pour le script python:


cd /usr/src
sudo wget -O dropbox.py https://www.dropbox.com/download?dl=packages/dropbox.py
sudo mv dropbox.py /data/dropbox/
sudo chown dropbox:dropbox /data/dropbox/dropbox.py
sudo chmod 754 /data/dropbox/dropbox.py

Pour que le démon Dropbox puisse être lancé en tant que service, on va créer ce service pour systemd (documentation en bon français ici):

Créer le nouveau fichier pour le service dropbox.service:


sudo vi /etc/systemd/system/dropbox.service

Puis adapter et copier le contenu ci-dessous (notamment le chemin du programme). Pour rappel, pour passer en mode insertion dans l’éditeur VI, c’est la touche INSER. Pour sortir du mode insertion, c’est la touche ECHAP. Pour sauvegarder et quitter, c’est la séquence: :wq et valider.

[Unit]
Description=Dropbox
Wants=network-online.target
After=network-online.target

[Service]
User=dropbox
Group=dropbox
Type=simple
ExecStart=/data/dropbox/.dropbox-dist/dropboxd

[Install]
WantedBy=multi-user.target

La ligne WantedBy=multi-user.target indique que le service est prévu pour le mode « multi-user » qui est le mode de démarrage par défaut de Rocky Linux, par opposition par exemple au mode rescue.target où très peu de services seront lancés.

Pour que ce nouveau service soit pris en compte, puis le démarrer:


sudo systemctl daemon-reload
sudo systemctl enable --now dropbox
sudo systemctl status dropbox

Associer son compte Dropbox

La première fois que le démon est lancé, une URL sera affichée dans ses logs afin de s’authentifier depuis un autre ordinateur. Le démon attendra que l’authentification réussisse pour continuer et initialiser le répertoire d’accueil des données.

Pour voir les logs du service:


journalctl -u dropbox.service

Une fois authentifié, la synchronisation commence mais vous ne verrez rien de plus dans les logs. Pour connaître l’état du démon, il faut utiliser le script python.

Contrôler le démon avec le script python

Pour tester le script python, essayez cette première commande qui devrait confirmer que le démon est actif:


sudo -u dropbox /data/dropbox/dropbox.py status

Premier paramétrage

Désactiver LAN sync

LAN sync est une fonctionnalité de Dropbox, active par défaut, qui accélère la synchronisation Dropbox entre plusieurs ordinateurs du réseau local. Dans mon cas, le serveur linux se trouve dans un sous-réseau virtuel et cette fonction est bloquée par un pare-feu. Je n’ai pas souhaité adapter les règles du pare-feu pour voir si LAN sync pouvait traverser les réseaux virtuels, je préfère autant le désactiver et que les serveurs de Dropbox soient la source de synchronisation. Cette étape est facultative et n’empêche pas dropbox de fonctionner, mais cela évitera des milliers d’alertes dans les logs du pare-feu si les requêtes sont bloquées.


sudo -u dropbox /data/dropbox/dropbox.py lansync n

Contrôle de flux

Je n’en suis pas sûr mais j’ai eu l’impression lors de mes tests que définir des valeurs explicitement élevées sur la commande throttle améliorait les débits (le premier argument correspond à download, le second à upload):


sudo -u dropbox /data/dropbox/dropbox.py throttle 99999 99999

La commande status indique l’état d’avancement de la synchronisation. La vitesse et la durée restante sont peu fiables d’après mes tests, la synchronisation a été relativement lente chez moi, cependant plus rapide que ce que laissait imaginer les valeurs indiquées par la commande de statut.

Arrêter ou démarrer le service

Si comme moi, vous souhaitez faire des backups avec Borg, il est conseillé d’arrêter la synchronisation pendant le backup. Vous pouvez le contrôler via ces trois commandes standards de systemd:

  • sudo systemctl status dropbox.service
  • sudo systemctl start dropbox.service
  • sudo systemctl stop dropbox.service

Rappelez-vous de ne pas utiliser les commandes start et stop du script python, ce dernier n’a aucune connaissance du service que l’on a créé dans systemd.