Attention ce tuto est en suspend depuis une MaJ Google...


Installation d'une stack :

rclone, gclone, plexdrive, crop, mergerfs et les Services Accounts Google

Il y'a peu j'ai franchi le pas : rejoindre une organisation et bénéficier d'un stockage illimité.
Mais il ne s'agit pas d'un simple :

mount /google/illimite /mnt/google

Nous allons franchir plusieurs étapes, pour etre raccord et pouvoir adapter on va commencer par dresser un tableau et une liste d'occurence que j'utiliserais et que vous devrez remplacez.
Le but final : UPLOADER plusieurs Tera d'un coup sans subir de limitation quotidienne des 750 Go.

A venir :

Et une étape supplémentaire pour ceux qui veulent rapatrier leur drive déjà uploader vers le teamdrive avec une vitesse assez éclair : 6 to transferés en 48mn pour ma part.

Je précise que j'ai tout fait en user direct avec sudo, ceux qui veulent le faire en root à vous d'adapter.
Dans ce tuto, nous allons utiliser :

- sudo
- rclone
- fuse
- plexdrive
- gclone
- sa-gen
- mergerfs
- crop

Et nous allons visiter google 😉
Liste des occurrences et des termes à adapter pour vous :
Dans la console Google :

Mon projet			: tank

Mes différents remotes rclone

Mon drive basique		: gdrive
Mon drive crypté		: gdrive-crypt
mon teamdrive basique   	: teamdrive
mon teamdrive crypté            : teamdrive-crypt
mon teamdrive plexdrive         : teamdrive-plex-uncrypt

Je me base sur les infos et tutos proposé dans l'organisation, plusieurs utilisateurs m'ont aidés et permis de mettre ce tuto à l'écrit.

Merci donc à Merrick pour l'organisation, Laster13 pour avoir passer pas mal de temps à débugger, Kesurof pour le tips docker et surement quelques autres membres de MDD, SSD et C-E

Etape 0 :

On va commencer par s'assurer que votre /home/user ( dans mon cas /home/mathieu ) soit bon dans les droits :

ls -al /home/mathieu

ca doit retourner :

drwxr-xr-x 17 mathieu mathieu  4096 Sep 12 12:05 .

si ca retourne :

drwxr-xr-x 16 root    mathieu  4096 Sep 16 20:42 .

c'est pas bon...

on sait jamais selon les installs, comme ça on est sur de pouvoir écrire direct dans /home/user.

1) Installons RCLONE

$ cd /tmp
$ curl https://rclone.org/install.sh | sudo bash

2) Installation de FUSE

$ sudo apt update
$ sudo apt install fuse

Modifier le fichier /etc/fuse.conf et décommenter la ligne

user_allow_other

3) Installation de PlexDrive

Je pars du principe qu'on installe sur un serveur classique, si vous avez une architecture différente : https://github.com/plexdrive/plexdrive/releases

$ sudo wget https://github.com/plexdrive/plexdrive/releases/download/5.1.0/plexdrive-linux-amd64 -O /usr/bin/plexdrive
$ sudo chmod 755 /usr/bin/plexdrive

4) Configuration pour GoogleDrive

Direction : -> https://console.developers.google.com/apis/dashboard -> on se connecte avec le compte Gsuite ( pas le votre perso hein )
En haut à gauche on clique sur Sélectionnez un projet / Select a project, une fenêtre s'ouvre.
En théorie vous ne devriez pas avoir de projets déjà crées. Donc on va en créer un : le mien s'appellera tank.

Nom du projet	: tank
Zone		: Choisissez l'organisation dans laquelle vous etes.
Créer.

Une fois la création faite, on peut aller faire un OAuth 2.0 client IDs utile pour rclone et plexdrive.
Donc à gauche vous devez avoir dans le menu latérale, un bouton Identifiants.
En haut maintenant on clique sur Créer des identifiants et on choisit ID client OAuth

Type d'application	: J'ai choisis Périphérique d'entrée TV et limitée.

On lui donne un nom : tank ( j'ai fait simple )
Créer
Une fois créer vous aurez un ID client et un code secret du client qui seront utiles pour rclone.
Garder cette page ouverte on va en avoir besoin dans quelques lignes.
Plus qu'a activer l'API Google Drive, à gauche on clique sur Bibliothèque/Library et dans la barre rechercher des API et des Services on tape drive pour choisir Google Drive API on clique
dessus et on choisi le projet précédemment créer : tank.

5) Création des remote dans rclone

Alors petite précision : si vous le faite en root, le fichier de conf sera dans /root/.config/rclone/rclone.conf
si vous le faites en user il sera dans /home/user/.config/rclone/rclone.conf
ATTENTION : si vous lancer la commande en root et qu'ensuite vous le faite en user, penser à virer le fichier de conf dans le dossier root sinon CONFLIT !

$ rclone config
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> N -> pour nouveau remote :)
name> gdrive ( on se base sur les infos au début )
Une longue liste va s'afficher,
Storage> 13 -> pour google drive
13 / Google Drive
   \ "drive"

Pour la prochaine étape il faut avoir la page des identifiants oauth que l'on a crées juste avant

client_id> 21jk6tr86-17657709211-abcdjmad0vadcu0tjpmiuq1p.apps.googleusercontent.com <- FAKE !

prochaine ligne c'est le code secret qui est sous la ligne id client de la même page

client_secret> g77nlkfzeiofjkzf564564 <- FAKE !

Allez suivant :

Scope> 1 -> pour full access
root_folder_id> on laisse vide
service_account_file> on laisse vide
Edit advanced config?
y/n> N
Remote config
Use auto config?
y/n> N -> pour qu'on ai un lien à aller valider sinon il va vouloir ouvrir un navigateur sur le serveur...
Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&blablablablablalblalblalzlzedjk&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=K29YemjY29UQViUCUEAWfA
Log in and authorize rclone for access

Vous copiez le lien dans un nouvel onglet/fenêtre de votre navigateur, vous y allez, vous vous assurer de bien choisir votre compte gsuite et vous autoriser.
Plus qu'à coller le code que vous récupérer dans la case dessous

Enter verification code> ici la on le colle le code !
Configure this as a team drive? On le fera après.
y) Yes
n) No
y/n> N
--------------------                                                                                                                                                           
y) Yes this is OK
e) Edit this remote
d) Delete this remote
Et puis enfin on choisis Y, parce que c'est okkkkk ( hein jacquouille )

Bon si vous avez suivi jusqu'ici on a fait notre premier remote gdrive non-chiffré.

$ rclone copy /home/user/.config/rclone/rclone.conf gdrive: 

le : apres gdrive est tres important !
Normalement au bout de quelques secondes sur votre drive vous devriez voir apparaître votre fichier ... vous pouvez l'effacer directement depuis le drive 🙂

Bon allez t'es chaud ? on se fait le drive chiffré !

$ rclone config
n pour new remote
name> gdrive-crypt
Storage> 10 
10 / Encrypt/Decrypt a remote
   \ "crypt"
remote>gdrive:/crypt

ici on choisit de chiffré le dossier crypt qui sera sur le gdrive, vous pouvez l'appeler nsa ou autre mais, si vous changer pensez à adapter par la suite.

filename_encryption> 1
1 / Encrypt the filenames see the docs for the details.
   \ "standard"
directory_name_encryption> 1
1 / Encrypt directory names.
   \ "true"

Pour les 2 précédentes questions on lui dit qu'on veut chiffrer les noms de fichiers et les noms de dossiers.
Allez la ça se corse : si vous perdez les mots de passes que nous allons générer adieu le déchiffrement ...

Password or pass phrase for encryption.
y) Yes type in my own password
g) Generate random password
y/g> g
Bits> 128

Là c'est à votre convenance, j'avais mis 1024 au début mais j'avais pas mal de problèmes. Donc 128 c'est bien ca fait déjà un jolie mot de passe 😉

Your password is: aXgwpZ0UlFTL4DXWuJGCRg

Celui la faut le noter quelque part en securité et le prochain avec...

Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n> Y
Password or pass phrase for salt. Optional but recommended.
Should be different to the previous password.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank (default)
y/g/n> g
Bits> 128

Le mot de passe juste après est à noter soigneusement avec le premier...
Attention ils sont stockés de manière obscure 😉 quand vous ouvrirez votre fichier rclone.conf ils seront probablement differents... j'ai donc choisis de copier directement ceux que j'avais noté dans le fichier.

Your password is: gFf31fwjs4q8uLN7hN69-A
Use this password? Please note that an obscured version of this
password (and not the password itself) will be stored under your
configuration file, so keep this generated password in a safe place.
y) Yes (default)
n) No
y/n> y
[gdrive-crypt]
type = crypt
remote = gdrive:/crypt
filename_encryption = standard
directory_name_encryption = true
password = *** ENCRYPTED ***
password2 = *** ENCRYPTED ***
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> Y

Voila on viens de créer donc le remote gdrive classique et celui chiffré.
Dans votre fichier /home/user/.config/rclone/rclone.conf vous devez avoir un truc du genre :.

[gdrive]
type = drive
client_id = 21jk6tr86-17657709211-abcdjmad0vadcu0tjpmiuq1p.apps.googleusercontent.com
client_secret = g77nlkfzeiofjkzf564564
scope = drive
token = {"access_token":"kejfhezjfhzfhzifhzfuihzuifhzfhfuizwQ70ZGYwc-5YXNeDA_HRSIXCH7kvBk6oIBK8lPh1W8eoJUgqO9nrnxJ1Iikb3GP3F00kjufovmkzsViWXSD16g7TwRL20O","token_type":"Bearer","refresh_tok$

[gdrive-crypt]
type = crypt
remote = gdrive:/crypt
filename_encryption = standard
directory_name_encryption = true
password = aXgwpZ0UlFTL4DXWuJGCRg -> la on trouve notre premier mot de passe
password2 = gFf31fwjs4q8uLN7hN69-A -> la le deuxieme c'est les trucs les plus importants a garder : sans ca y'aura plus jamais de fichier en clair !

Voila, on a notre base pour rclone / plexdrive / mergerfs.
Allez on continue !

6) Configuration de plexdrive

(Là je vais pomper le wiki de Popallo et Merrick)
Il faut tout d'abord lancer plexdrive une première fois à la main pour terminer la configuration.
Tout d'abord, créez le répertoire dans lequel monter le cache

$ sudo mkdir -p /mnt/plexdrive
$ sudo chown ${USER}: /mnt/plexdrive
Puis lancez plexdrive, et laissez vous guider :
plexdrive mount -o allow_other /mnt/plexdrive
(J'ai un seul et meme projet pour rclone, plexdrive.)
1. Please go to https://console.developers.google.com/
2. Create a new project
3. Go to library and activate the Google Drive API
4. Go to credentials and create an OAuth client ID
5. Set the application type to 'other'
6. Specify some name and click create
7. Enter your generated client ID: 
Une fois votre client ID et votre secret rentré, plexdrive va donner un lien sur lequel il faudra se rendre pour terminer la configuration. Une fois terminé, il ne vous rendra pas la main, et il faudra taper ctrl+c.
En fonction de la quantité de données présentes dans votre dirve, plexdrive peut prendre plusieurs heures avant de tout indexer. Laissez tourner au moins 5 minutes avant de terminer la commande avec ctrl+c
Le fichier de configuration a été créé dans /home/${USER}/.plexdrive/config.json

ATTENTION si votre home n'est pas writable y'aura erreur.

On va aller créer le drive partagé sur https://drive.google.com.
Donc on se connecte avec le compte gsuite, à gauche en dessous de Mon Drive / My Drive il y'a Drive Partagé / Shared Drive, clic droit dessus et nouveau drive partagé / new shared drive, on lui donne un nom.
Ok voila premier étape faite !
en user sur la console

$ rclone config
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> teamdrive
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
Storage> 13 -> pour google drive
13 / Google Drive
   \ "drive"
 Storage> 13
...
client_id> 21jk6tr86-17657709211-abcdjmad0vadcu0tjpmiuq1p.apps.googleusercontent.com

C'est pas le mien et il doit pas exister celui la 😉 )

client_secret> g77nlkfzeiofjkzf564564

ne collez pas ça non plus hein, récupérer le votre.
Allez suivant :

Scope> 1 

pour full access

root_folder_id> on laisse vide
service_account_file> on laisse vide
Edit advanced config?
y/n> N
Remote config
Use auto config?
y/n> N 

pour qu'on ai un lien à aller valider sinon il va vouloir ouvrir un navigateur sur le serveur...

Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&blablablablablalblalblalzlzedjk&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=K29YemjY29UQViUCUEAWfA
Log in and authorize rclone for access

Vous copiez le lien dans un nouvel onglet/fenetre de votre navigateur, vous y allez, vous vous assurer de bien choisir votre compte gsuite et vous autoriser.
Plus qu'à coller le code que vous récupérer dans la case dessous

Enter verification code> ici là on le colle le code !
Configure this as a team drive? ATTENTION ICI ON VA DIRE YES CETTE FOIS 
y) Yes
n) No (default)
y/n> y
Fetching team drive list...
Choose a number from below, or type in your own value
 1 / teamdrive
   \ "0ADi9DZ5aa7899Uk9PVA"

Ici il va lister les drives partagés que tu as créer. En théories tu dois en avoir un seul celui qu'on a créer précédemment sur l'interface drive google.
Sur la première ligne tu va avoir le nom que tu lui as donnés et en dessous l'ID ce dernier permettra de monter le plexdrive 🙂

Enter a Team Drive ID> 1 ou le numéro de ton drive partagé.
--------------------
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> Y

voila on a créer notre teamdrive non chiffré comme pour le premier remote que l'on a fait.

7) Chiffrement / Déchiffrement du teamdrive et plexdrive

Passons au chiffrement/déchiffrement, là on va faire assez simple.

Le chiffrement dans rclone est bidirectionnel : un fichier normal passé par le chiffrement va être chiffré, et un fichier chiffré qui passe par le chiffrement (avec les mêmes clés) va redevenir lisible.

Maintenant que nous avons un joli remote chiffré, il faut le déchiffrer. Nous allons donc maintenant créer une dernière configuration pour déchiffrer ce remote.
Supposons que dans votre drive, seul le répertoire /crypt est chiffré, il faut donc créer une configuration de rclone qui va déchiffrer le répertoire /mnt/plexdrive/crypt

$ nano /home/user/.config/rclone/rclone.conf

Tu dois retrouver tout les remotes qu'on à crées...

[teamdrive]
type = drive
client_id = 17657709695-21jk6tt'acrujallaislelaisseruq1p.apps.googleusercontent.com
client_secret = g77nqviwpasfoulaguepengPAOzd8
scope = drive
token = {"access_token":"ya29.a0AfH6SMAWf6ODCQKPmFFhTYOd6T3si9proutPKTNow-Dh6KbIqu9vlZqTG_SEPWPN5lMuZe-3O-vI$
team_drive = 0ADi9DZ5aaMM9Uk9PVA
root_folder_id =

Alors cette section au dessus on va la copier/coller et l'adapter :

[teamdrive-crypt]
type = crypt
remote = teamdrive:/crypt
filename_encryption = standard
directory_name_encryption = true
password = aXgwpZ0UlFTL4DXWuJGCRg <- La j'ai repris les password de mon drive chiffré du début
password2 = gFf31fwjs4q8uLN7hN69-A <- La aussi, je rappelle que sans ces derniers, il vous sera impossible de déchiffrer ce que vous aurez chiffrés précédemment en cas de perte...
team_drive = 0ADi9DZ5aaMM9Uk9PVA

On va en profiter pour le déchiffrement pour plex :

[teamdrive-plex-uncrypt]
type = crypt
remote = /mnt/plexdrive/crypt
filename_encryption = standard
directory_name_encryption = true
password = aXgwpZ0UlFTL4DXWuJGCRg
password2 = gFf31fwjs4q8uLN7hN69-A
 

On enregistre.

Bon maintenant on va pouvoir lancer automatiquement plexdrive sur le shared drive 🙂

Créez le fichier /etc/systemd/system/plexdrive.service (pensez à changer les chemin du répertoire à monter, le nom du user et du groupe, et le chemin de configuration)

[Unit]
Description=Plexdrive
AssertPathIsDirectory=/mnt/plexdrive
After=network-online.target
 
[Service]
Type=simple
User=mathieu (CHANGE TON USER)
Group=mathieu ( CHANGE TON GROUP)
ExecStart=/usr/bin/plexdrive mount --drive-id=0ADi9DZ5aaMM9Uk9PVA -v 3 /mnt/plexdrive <- a --drive-id= tu colles ton ID que tu as récuperer :)
ExecStop=/bin/fusermount -uz /mnt/plexdrive
Restart=on-abort
 
[Install]
WantedBy=default.target

puis

$ sudo systemctl enable plexdrive
$ sudo systemctl start plexdrive

Au bout de quelques minutes ( si tu as deja des choses sur ton drive ) tu devrais les voir en clair et chiffré dans le dossier /mnt/plexdrive.

Continuons : créons le fichier /etc/systemd/system/rclone.service pour monter rclone

[Unit]
Description=Google Drive (rclone)
AssertPathIsDirectory=/mnt/plex-uncrypt

[Service]
Type=simple
User=mathieu <-change ton user
Group=mathieu <- change ton groupe
ExecStart=/usr/bin/rclone mount \
   --config=/home/tonuser/.config/rclone/rclone.conf \
   --allow-other \
   --no-modtime \
   --drive-use-trash \
   --stats=0 \
   --checkers=16 \
teamdrive-plex-uncrypt:/ /mnt/plex-uncrypt
ExecStop=/bin/fusermount -uz /mnt/plex-uncrypt
Restart=always
RestartSec=10

[Install]
WantedBy=default.target

On va créer /mnt/plex-uncrypt

$ sudo mkdir /mnt/plex-uncrypt
$ sudo chown mathieu: /mnt/plex-uncrypt
$ sudo systemctl enable rclone
$ sudo systemctl start rclone

Voila maintenant on devrait voir les fichiers en clair dans /mnt/plex-uncrypt

Allez c'est pas fini mais on approche le but 🙂

8) Installation de gcloud

echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
apt update && apt install google-cloud-sdk

Une fois installé en user:

$ gcloud init

On suit la procedure, on se log bien avec les identifiants GSUITE
Pour les pojets tu dois en avoir un seul 😉 si t'en as plusieurs pas grave choisis en un. Tu suis la procédure rien de complexe.

Direction https://groups.google.com -> on se log avec les id gsuite

-> Create group
Group Name : donpapabaroko <- exemple il se peut qu'il existe déjà a toi d'en trouver un ;)
group email address : donpapabaroko et tu choisis @googlegroups.com ( pas d'inquietude sur le fait que ca soit un groupe externe.
-> Next 
-> Next
-> Create group

Allez maintenant on va générer les SA

$ sudo git clone https://github.com/88lex/sa-gen.git /opt/gen-sa
$ sudo chown -R ${USER}: /opt/gen-sa
$ nano /opt/gen-sa/sa-gen

on va adapter :

ORGANIZATION_ID="" <- on laisse vide
GROUP_NAME="donpapabaroko@googlegroups.com" <- c'est le mail du groupe qu'on a créer précédemment.
PROJECT_BASE_NAME="tonpseudo" <- tu choisis un nom de projet, pas un nom que tu as déjà mis 
...
SA_EMAIL_BASE_NAME="mathieu" <- ce que tu veut.

On enregistre.

$ cd /opt/gen-sa
$ ./sa-gen

Plus qu'a attendre la fin, il va générer 3 x 100 Service Accounts. A terme notre serveur pourra utiliser donc 300 x 750 gb d'upload...
Pendant les premiers jours il faudra ajouter à la main dans le groupe les comptes SA, 100 par jour de mémoire 😉
On retourne sur https://group.google.com à la liste des groupe au bout de la ligne à droite on clique sur add members.
Dans le fichier /opt/sa/allmembers.csv
on recupere les lignes 1 a 100
donpapabaroko@googlegroups.com,tonpseudo100@tonprojet1.iam.gserviceaccount.com,USER,MEMBER
ca doit ressembler. Tu copie donc les 100 premieres lignes, on les colle dans group Members et ADD il se peut qu'il disent qu'il ne peut pas ajouter un truc ou deux rien de grave.
on raffraichit et normalement tu devrais voir le nombre de membres dans le groupe. Je rapelle 1 membre = 750 go d'upload...

9) Installation de gclone l'alternative de rclone pour la rotation des SA

$ sudo wget -P /usr/local/bin https://transfer.cloudbox.media/get/FjUqh/rclone_gclone_v1.52.3-DEV_1
$ cd /usr/local/bin
$ sudo mv rclone_gclone_v1.52.3-DEV_1 gclone
$ sudo chmod +x gclone

10) Installation de crop

$ mkdir /home/user/crop
$ cd /home/user/crop
$ wget https://github.com/l3uddz/crop/releases/download/v0.5.5/crop_v0.5.5_linux_amd64.tar.gz
$ tar -xvf crop_v0.5.5_linux_amd64.tar.gz
$ rm crop_v0.5.5_linux_amd64.tar.gz
$ chmod +x crop
$ nano config.yaml
rclone:
  config: /home/mathieu/.config/rclone/rclone.conf
  path: /usr/local/bin/gclone 
  stats: 30s
  live_rotate: true
  service_account_remotes:
    '/opt/sa': 
      - teamdrive 
      - teamdrive-crypt
  global_params:
    default:
      move:
        - '--order-by=modtime,ascending'
        - '--transfers=8'
        - '--delete-empty-src-dirs'
      sync:
        - '--fast-list'
        - '--tpslimit-burst=50'
        - '--max-backlog=2000000'
        - '--track-renames'
        - '--use-mmap'
        - '--no-update-modtime'
        - '--drive-chunk-size=128M'
        - '--drive-use-trash=false'
      dedupe:
        - '--dedupe-mode=newest'
        - '--tpslimit=5'
uploader:
  - name: tv
    enabled: true
    check:
      min_free_space: 10995119925676
      limit: 1
      type: age
    local_folder: /home/mathieu/torrents/complete/Series
    remotes:
      move: 'teamdrive-crypt:/Series'
    rclone_params:
      global_move: default
  - name: movies
    enabled: true
    check:
      min_free_space: 10995119925676
      limit: 1
      type: age
    local_folder: /home/mathieu/torrents/complete/Films
    remotes:
      move: 'teamdrive-crypt:/Films'
    rclone_params:
      global_move: default

Je vais détailler :

path: /usr/local/bin/gclone : on lui indique gclone pour utiliser les SA
 service_account_remotes:
    '/opt/sa': 
      - teamdrive 
      - teamdrive-crypt
 

Ici on va lui dire que les SA sont a utilisé pour les remotes :

- teamdrive (non chiffré)

- teamdrive-crypt (chiffré)

Dans la section uploader: j'ai 2 catégories à adapter pour vous. J'ai une partie film et une serie.
J'ai changer le limit: a 1 pour que dès que le fichier est posé par le post process et avec le timer de crop ( on va le voir apres) le fichier fait partie des fichiers a uploader.
On enregistre.

Dernière correction :
On va pouvoir ajouter les SA au remotes dans la conf rclone que gclone va lire.

$ nano /home/user/.config/rclone/rclone.conf

dans les 2 sections [teamdrive] et [teamdrive-crypt]
on ajoute :

server_side_across_configs = true
service_account_file = /opt/sa/1.json
service_account_file_path = /opt/sa/

Comme ca gclone, va lire la configuration et il saura qu'il a un dossier de SA à faire tourner.

On enregistre et pour le fun on reboot le tout.

Au redémarrage on devrait avoir dans :
/mnt un dossier plexdrive et un plex-uncrypt

on va automatiser crop :

$ sudo nano /etc/systemd/system/crop_upload.service
## /etc/systemd/system/crop_upload.service ##
[Unit]
Description=crop upload
After=network-online.target

[Service]
User=mathieu
Group=mathieu
Type=exec
ExecStart=/home/mathieu/crop/crop upload
ExecStopPost=/bin/rm -rf /home/mathieu/crop/crop.lock

[Install]
WantedBy=default.target

Adaptez USER, GROUP et les chemins avec votre dossier crop.
On enregistre.

$ sudo nano /etc/systemd/system/crop_upload.timer
# /etc/systemd/system/crop_upload.timer
[Unit]
Description=crop upload
After=network-online.target

[Timer]
# hourly, daily, weekly are valid. as are OnCalendar=DayOfWeek Year-Month-Day Hour:Minute:Second
# (example:  "OnCalendar=Mon..Fri 22:00" to run weekdays at 22:00, a second line can be added i.e. "OnCalendar=Sat,Sun 03:00" to run at 3am on weekends.)
#OnCalendar=
# to use inactivity since last finished running, 1h can be used for 1hour.
OnUnitInactiveSec=10m

[Install]
WantedBy=timers.target

Dans mon cas je l'ai reglé pour que toutes les 10mn il démarre et regarde ce qu'il peut envoyer, j'ai pris un serveur avec pas beaucoup d'espace 😉
Mais on peut le regler sur un calendrier. A lire 😉

$ sudo systemctl enable crop_upload.service
$ sudo systemctl enable crop_upload.timer
$ sudo systemctl start crop_upload.service
**une premiere fois pour que le timer d'inactivité démarre apres ;)**
$ sudo systemctl start crop_upload.timer
$ sudo systemctl list-timers
NEXT                          LEFT          LAST                          PASSED       UNIT                         ACTIVATES
Fri 2020-09-18 11:19:55 CEST  6min left     Fri 2020-09-18 11:09:55 CEST  3min 53s ago crop_upload.timer            crop_upload.service

VOILAAAAAAA !

En théorie, si pas d'erreur, toutes les 10mn crop s'active regarde dans les dossiers :
/home/mathieu/torrents/complete/Films
/home/mathieu/torrents/complete/Series
si des fichiers sont arrivés, si oui il les uploades, si jamais lors de l'upload tu arrives au bout des 750gb il va prendre un autre compte SA qu'il a dans sa base pour continuer,
et il indiquera dans les logs a quel date il pourra s'en re-servir.

TIPS :
J'utiliser mergerfs au lieu de unionfs
il faut par contre rester en 2.29 pour le moment :

$ cd /tmp
$ sudo wget https://github.com/trapexit/mergerfs/releases/download/2.29.0/mergerfs_2.29.0.debian-buster_amd64.deb
$ sudo dpkg -i mergerfs_2.29.0.debian-buster_amd64.deb
$ sudo mergerfs -v
mergerfs version: 2.29.0
FUSE library version: 2.9.7-mergerfs_2.29.0
fusermount version: 2.9.7-mergerfs_2.29.0
using FUSE kernel interface version 7.31

si c'est pas ca, y'a de forte chance que ca marche pas :/
Avant je montais les dossiers disctinctement, maintenant mon archi est la suivante :
/home/mathieu/torrents/complete/{Series,Films,...} résultat des post process et crop watch ici
/home/mathieu/torrents/incomplete/{series-fini,films-fini,...} arrivé des torrents après DL, sonarr et radarr watch ici pour le postprocess et ils feront un Hardlink ( merci Kesurof pour l'idée )
avant quand je stockais en local, pas de soucis pour faire les hardlink mais avec mergerfs c'est une autre partition donc on se fait refouler.
Du coup dans les CT docker de radarr et sonarr j'ai ajouté dans les dossiers :
/home:/home
résultat il hardlink sans pitié 🙂
et pour finir :
/home/mathieu/medias contient le teamdrive et le local /home/mathieu/torrents/complete/{Series,Films,...}
Du coup radarr et sonarr recupere le fichier dans /downloads ( alias /home/mathieu/torrents/incomplete/{series-fini,films-fini,...}
le post process dans /tv /movies qui sont binder sur /home/mathieu/medias/
mergerfs lui dira qu'il peut ecrire et ira ecrire en local dans /home/mathieu/torrents/complete/{Films,Series}
mais comme lui voit le dossier /home/mathieu/medias le changement de chemin ne change pas
et plex a pour librairie le dossier /home/mathieu/medias du coup les chemins ne bougent jamais pour eux.

$ sudo nano /etc/systemd/system/mergerfs.service
[Unit]
Description=MergerFS Mount
After=network-online.target

[Service]
Type=forking
GuessMainPID=no
ExecStart=/usr/bin/mergerfs \
  -o category.create=ff,async_read=false,cache.files=partial \
  -o dropcacheonclose=true,use_ino,minfreespace=0 \
  -o xattr=nosys,statfs_ignore=ro,allow_other,umask=002,noatime \
  /home/mathieu/torrents/complete=RW:/mnt/plex-uncrypt=NC /home/mathieu/medias
ExecStop=/bin/fusermount -uz /home/mathieu/medias

[Install]
WantedBy=default.target

On enregistre et

$ sudo systemctl enable mergerfs.service
$ sudo systemctl start mergerfs.service 

Salut,

J'utilise mergerfs aussi maintenant. Et aussi le cache de Rclone (pour Plex), en mode full, limité à 200GB. Ça roule tout seul 🙂
J'ai jamais eu besoin de passer par plusieurs SA, j'ai du être enquiquiné une fois par la limite des 750GB d'upload/24h.

Pas eu le temps de finir 🤣
Pour l'utilisation des SA, je pense que c'est surtout le jour où comme moi tu veut liberer 24 to de backup avec une date butoir ...
Après pour une utilisation basique on peut juste rester sur le drive classique, pas de SA et rester avec une limite d'upload, on peut je pense d'ailleurs jouer tu fait déclencher vers 22h et comme le reset s'opère à minuit 😉

C'est un cas d'utilisation extrême, et j'ai trouver intéressant de partager mon expérience.

Merci à tous ceux qui liront, me corrigeront, demanderont des précisions...
Je le laisse dans la catégorie [en cours] le temps de multiple relectures et de vos avis 🙂

Je tiens à remercier, l'équipe Mondedie, les membres, @Merrick, @laster13 et tous ceux que je ne peut tagger.
MDD / C-E / SSD !

Sacré tuto merci pour ton partage d'expérience
Si un jour j'ai une occase de le réaliser y aura bien un retour de ma part 🙂

MattProd a renommé le titre en [TUTO] stack complete : rclone, gclone, plexdrive, mergerfs sur teamdrive.

Super tuto.
Petite question sur le "PROJECT_BASE_NAME", lorsque j'ai lancé gcloud inti, j'en ai profité pour créer un nouveau projet.
Est ce que je peux reprendre le même nom ou il faut un autre nom et si oui, à quoi sert le projet déjà présent lors du gcloud init ?

Merci

    Haldir attention tu as un nombre de projets limités.
    La première connexion est pour initialiser.
    Le project_base_name va créer des projets avec le groupe que tu as créer et les Services Accounts.
    On peut dire par exemple qu'il y'aura le projet treadstone avec ses SA pour envoyer les photos de vacances...
    Et puis un autre projet dédié au backup... C'est a la convenance personnelle mais je préfère séparer comme ca...

    MattProd a renommé le titre en [DEPRECATED TUTO] stack : rclone, gclone, plexdrive, mergerfs sur teamdrive .
    Répondre…