Contexte

Dans le cadre de mon travail, j'ai récement migré sur Pop!_OS pour mon environnement du quotidien. Etant un utilisateur de plusieurs comptes OneDrive (perso & pro), il me fallait pouvoir synchroniser ceux-ci dans des dossiers différents de mon système.

Par exemple :

  • Mon compte OneDrive perso dans ~/OneDrive_Perso
  • Mon compte OneDrive pro dans ~/OneDrive_Pro

Bien evidément, cela doit fonctionner en tant que service.

Je suis tombé sur ce projet : https://github.com/skilion/onedrive

C'est un outil sous licence GPL3 permettant d'intéragir avec OneDrive sous Linux.

Les fonctionnalités sont les suivantes :

  • State caching
  • Real-Time file monitoring with Inotify
  • Resumable uploads
  • Support OneDrive for Business (part of Office 365)
  • Shared folders (only OneDrive Personal)

J'ajouterai également qu'il est possible de faire du multi-comptes.

C'est parfait car c'est mon besoin 🙂

Installation

Pour information, j'ai réalisé cette installation sous Pop!_OS 21.10 mais celle-ci devrait fonctionner à partir des dérivés d'Ubuntu 18+. Pour Fedora, CentOS, ArchLinux, se référer directement à la page du projet cité plus haut.

Tout d'abord l'installation des pré-requis :

sudo apt install git libcurl4-openssl-dev libsqlite3-dev snap
sudo snap install --classic dmd

Puis le clonage du projet et l'installation de l'outil :

git clone https://github.com/skilion/onedrive.git
cd onedrive
make
sudo make install

Configuration

La configuration est optionnelle. Par défaut, tous les fichiers seront stockés dans ~/OneDrive et les fichiers/dossiers commençant par . et ~ seront ignorés.

3 directives sont définissables :

  • sync_dir : Le répertoire où seront stockés les données.

  • skip_file : Les fichiers / dossiers à ne pas synchroniser. L'utilisation des wildcards * et ? sont autorisés. Le | peut être employé pour séparer différents patterns.

    > L'outil doit être relancé avec l'argument --resync après une modification de la directive skip_file.

  • sync_list : Spécifier les fichiers / dossiers à synchroniser. J'en parlerai dans un prochain article.

    > L'outil doit être relancé avec l'argument --resync après une modification de la directive skip_file.

Comme je veux utiliser 2 configurations différentes (une perso et une pro), j'ai créé 1 répertoire pour chaque compte où seront stockés mes données respectives :

mkdir -p ~/{OneDrive_Perso,OneDrive_Pro}

Ensuite, j'ai créé 2 dossiers de configuration (un dossier par compte) :

mkdir -p ~/.config/{onedrive_perso,onedrive_pro}

J'ai ensuite créé mes 2 fichiers de configurations (un fichier par compte).

  • OneDrive perso :

    
    cat > ~/.config/onedrive_perso/config < ~/.config/onedrive_pro/config < Il est important de libèrer le token office avant. J'étais, au préalablement, identifié sur mon compte perso.
    >
    > Pour cela, je me suis déconnecté avec mon navigateur internet de mon compte office perso précédement connecté à l'aide de l'URL suivante : https://www.office.com/?auth=2

5. Services

Lors de l'installation de l'outil un service a été créé : /usr/lib/systemd/user/onedrive.service.

J'ai décidé de garder ce service pour mon compte perso et d'en créer un second pour mon compte pro :

cp /usr/lib/systemd/user/onedrive.service /usr/lib/systemd/user/onedrive_pro.service

J'ai ensuite édité mon 1er service (onedrive perso) pour correspondre à sa configuration :

vi /usr/lib/systemd/user/onedrive.service

Puis, j'ai modifié la ligne ExecStart :

ExecStart=/usr/local/bin/onedrive --monitor --confdir="~/.config/onedrive_perso"

Et enfin la même modification pour mon serive OneDrive pro :

vi /usr/lib/systemd/user/onedrive_pro.service

Cette fois-ci, j'ai modifié comme suit :

ExecStart=/usr/local/bin/onedrive --monitor --confdir="~/.config/onedrive_pro"

Pour terminer, j'ai activé mes 2 services :

systemctl --user enable onedrive.service
systemctl --user enable onedrive_pro.service
systemctl --user start onedrive.service
systemctl --user start onedrive_pro.service

6. Vérifications / Logs

Pour vérifier le bon fonctionnement des services, j'utilise ces 2 commandes :

journalctl --user-unit onedrive -f
journalctl --user-unit onedrive_pro -f

7. Désinstallation

sudo make uninstall
rm -rf ~/.config/onedrive*