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’utilisateurdropbox
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
.