OneDrive : Client Linux OpenSource

OneDrive : Client Linux OpenSource

Table of Contents

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

Update 07/12/2023 :
Le projet utilisé dans cet article est stoppé.
Utiliser / Adapter avec celui-ci : https://github.com/abraunegg/onedrive.git

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 snapd
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 << EOF
    # Directory where the files will be synced
    sync_dir = "~/OneDrive_Perso"
    # Skip files and directories that match this pattern
    skip_file = ".*|~*"
    EOF
  • OneDrive pro :

    cat > ~/.config/onedrive_pro/config << EOF
    # Directory where the files will be synced
    sync_dir = "~/OneDrive_Pro"
    # Skip files and directories that match this pattern
    skip_file = ".*|~*"
    EOF

Initialisation

L'étape suivante que j'ai réalisé a été de lier chaque configuration (perso et pro) à un compte OneDrive. Pour se faire j'ai exécuté dans un 1er temps la synchronisation de mon OneDrive perso :

onedrive --monitor --confdir="~/.config/onedrive_perso"

Un lien est généré :

Authorize this app visiting:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=22c49a0d-d21c-4792-aed1-8f163c982546&scope=files.readwrite%20files.readwrite.all%20offline_access&response_type=code&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient

Enter the response uri:

En visitant cette URL, une authentification sur le compte OneDrive désiré est demandé. Puis, viens une page blanche (ou noire suivant votre thème) :

J'ai copié l'URI de cette page en réponse à mon prompt Enter the response uri:

La synchro démarre (oui, j'aime bien watch dogs legion...) :

Ensuite, je teste mon compte OneDrive_Pro :

onedrive --monitor --confdir="~/.config/onedrive_pro"

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*
Les commentaires sont fermés.