Photo by Hakim Menikh / Unsplash

TelDrive + rClone : le stockage sur Telegram

rClone 8 nov. 2023

I'm back !

J'ai pu récupérer 90% de mes articles, y'a un paquet de mise en page à refaire (un jour...) et j'ai perdu ceux depuis mars 2022. Certains m'ont contactés en m'indiquant qu'ils avaient des archives via RSS, si vous avez les images ça peut servir en effet :)
Si vous voulez commenter les articles il faut vous inscrire sur le blog (je me moque des IP et emails, j'en ferai rien) sinon il y a toujours Discord.

Le stockage sur Telegram via TelDrive et rClone

Le stockage "illimité" à pas cher chez Amazon, Google et Dropbox : c'est terminé ! On en a abusé et bien profité. Il reste Opendrive, chez qui j'ai eu un compte, qui permet de stocker de manière illimité mais ils limitent la vitesse d'upload (et non d'accès) passés les 15To environ. Ceci dit, pour 10€/mois, ça en fait un bon endroit pour stocker quelques documents chiffrés via rClone (montez ça en WebDav, c'est le plus stable).

Depuis quelques mois divyam234 joue avec le stockage de Telegram et il a modifié une version de rClone pour l'intégrer dans les remotes :

  • On profite du chiffrement de Telegram,
  • DL/UP via des bots Telegram, chacun étant limité en actions et vitesse d'upload (5Mo/s sauf erreur), il est recommandé d'en utiliser au moins 4 parallèlement,
  • Utilisable via rClone (montage, upload, cache),
  • Le stockage est illimité et lié à votre compte Telegram.

Les risques : avec l'abus qui se profile TelDrive et/ou rClone risquent d'être bannis, à trop stocker vous risquez d'être banni.

aerya@ubuntulab:~$ df -H
Filesystem         Size  Used Avail Use% Mounted on
tmpfs              206M  1,2M  205M   1% /run
/dev/vda2           52G  5,8G   44G  12% /
tmpfs              1,1G     0  1,1G   0% /dev/shm
tmpfs              5,3M     0  5,3M   0% /run/lock
/dev/vda1          1,2G  6,4M  1,2G   1% /boot/efi
UNRAID              17T  4,1T   13T  24% /mnt/UNRAID
tmpfs              206M  4,1k  206M   1% /run/user/1000
TelDrive1Crypted:  1,2P     0  1,2P   0% /mnt/TelDrive1Crypt

Passons aux choses sérieuses :
- Un environnement Linux,
- Un compte Telegram (que vous pouvez potentiellement perdre => une eSIM Free à 2€ est parfaite), un canal et des bots,
- Créer une app Telegram et en récupérer les ID/Hash,
- Une base de données Postgres (à auto-héberger en Docker par exemple),
- TelDrive de divyam234 qui est un outil d'accès au stockage Telegram avec WebUI,
- Sa version modifiée de rClone,
- Suivre mon tutoriel \o/

Pour créer un canal sur Telegram il faut cliquer sur l'icône en haut à droite de l'application, sorte de carré avec un stylo, puis Nouveau canal, le nommer et je pense qu'il convient de le laisser en Privé pour ce type d’utilisation.

Ensuite on crée une application, gratuite évidemment, qui permettra de récupérer des identifiants à utiliser pour TelDrive. Se rendre sur https://my.telegram.org/auth, renseigner son numéro et y accéder via le code unique reçu sur Telegram.
Aller ensuite sur https://my.telegram.org/apps et en créer une "bidon". Le but étant d'obtenir l'ID et le Hash.

TelDrive nécessite une base de données PostgreSQL L'auteur recommande de se servir de NeonTech en version gratuite, je ne suis pas à un Docker près et préfère héberger ça.

docker run -d \
  --name='postgresql' \
  --net='bridge' \
  -e TZ="Europe/Paris" \
  -e 'POSTGRES_PASSWORD'='<pwd>' \
  -e 'POSTGRES_USER'='<user>' \
  -e 'POSTGRES_DB'='teldrivetesting' \
  -p '5432:5432/tcp' \
  -v '/mnt/user/newappdata/postgresql':'/var/lib/postgresql/data':'rw' 'postgres:16' \

On continue avec TelDrive. Voici mon exemple en Docker. J'utilise toujours en partie Watchtower, si ce n'est pas votre cas retirez la partie "labels". Les variables sont à remplir/ajouter selon les besoins :

  • APP_ID et APP_HASH sur les informations obtenues en créant l'application Telegram
  • JWT_SECRET est un token d'accès à votre compte Telegram. Il recommande d'en créer un unique et aléatoire via une génération openssl : openssl rand -hex 32
  • DATABASE_URL reprend les infos remplies précédemment avec le Docker Postgre
  • COOKIE_SAME_SITE ne semble pas être nécessaire, j'ai pas testé sans
  • LAZY_STREAM_BOT (qu'il vient de passer en false par défaut ce soir) pour que les bots ne se lancent qu'en cas d'utilisation
services:
  server:
    image: ghcr.io/divyam234/teldrive/server
    restart: always
    container_name: teldrive
    volumes:
      - /mnt/user/newappdata/teldrive/teldrive.db:/app/teldrive.db:rw
    environment:
      APP_ID: ***
      APP_HASH: ***
      JWT_SECRET: ***
      DATABASE_URL: postgres://<user>:<pwd>@10.0.4.64:5432/teldrivetesting
      COOKIE_SAME_SITE: true
      LAZY_STREAM_BOTS: true
    ports:
      - 3120:8080
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

La WebUI est servie sur le port 3120 et on s'y connecte avec notre compte Telegram

Commencer par aller dans les options et sélectionner le canal Telegram pour le stockage des fichiers

Puis ajouter des bots. Ces derniers serviront pour UP/DL via TelDrive, donc rClone. Pour ça aller sur Telegram, contacter BotFather (@BotFather) et créer les bots 1 par 1 avec la commande /newbot puis copier 1 par 1 les token des bots dans cet encart (oui, c'est ch*ant).

Et pour terminer, mettre autant d'uploads simultanés que de bots créés

Voici venu le temps des rires et des chants d'installer rClone, en version modifiée bien entendu.
J'ai testé sur Ubuntu (faut que je regarde sur UNRAID si je peux en installer 2 en parallèle), j'ai pas compilé mais installé directement le .deb

wget https://github.com/divyam234/rclone/releases/download/v1.64.3/rclone-v1.64.3-linux-amd64.deb
sudo dpkg -i rclone-v1.64.3-linux-amd64.deb

Il nous faudra une session (cookie) TelDrive pour créer le remote. Pour l'obtenir, se rendre sur la WebUI, F12 (sous Firefox) et onglet Storage puis cookie et récupérercelui de TelDrive. Ce sera l'access token pour configurer rClone (je passe les détails, ça doit faire 7-8 ans que je l'explique) avec un remote TelDrive (numéro 47).

Par habitude j'ai ensuite créer un remote chiffré mais c'est inutile vu que Telegram est par défaut chiffré...

Au final le fichier de configuration rClone ressemble à ceci :

[TelDrive1]
type = teldrive
access_token = eyJh[...]00g
api_host = http://10.0.4.64:3120
chunk_size = 1Gi

[TelDrive1Crypted]
type = crypt
remote = TelDrive1:
password = ***

De là on peut repartir comme en 40 avec nos scripts de montage et d'upload, comme pour Google, Dropbox etc
Gardez tout de même en tête que comme pour les ex-eldorados du stockage "illimités" à prix cassés, à force d'abus des uns et des autres, cette astuce finira par disparaître.

Exemple de montage

rclone mount TelDrive1: /mnt/TelDrive1 \
--allow-other \
--allow-non-empty \
--dir-cache-time 24h \
--log-level INFO \
--log-file /home/aerya/TelDrive1Mount.log \
--poll-interval 10s \
--umask 002 \
--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" \
--drive-pacer-min-sleep 10ms \
--drive-pacer-burst 200 \
--vfs-read-ahead 2G \
--tpslimit 12 \
--tpslimit-burst 12
root@ubuntulab:/home/aerya# df -H
Filesystem         Size  Used Avail Use% Mounted on
tmpfs              206M  1,2M  205M   1% /run
/dev/vda2           52G  5,9G   43G  12% /
tmpfs              1,1G     0  1,1G   0% /dev/shm
tmpfs              5,3M     0  5,3M   0% /run/lock
/dev/vda1          1,2G  6,4M  1,2G   1% /boot/efi
UNRAID              17T  4,1T   13T  24% /mnt/UNRAID
tmpfs              206M  4,1k  206M   1% /run/user/1000
TelDrive1Crypted:  1,2P     0  1,2P   0% /mnt/TelDrive1Crypt

Exemple d'upload d'un fichier de 10Go (fallocate -l 10G film.mkv) avec 4 bots => 4x5Mo/s de moyenne

rclone move -c -v --copy-links --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" --fast-list --drive-stop-on-upload-limit --transfers=10 --checkers=10 --stats 5s /mnt/PRE TelDrive1:/
2023/11/08 22:14:51 INFO  : Films/film.mkv: Multi-thread Copied (new)
2023/11/08 22:14:51 INFO  : Films/film.mkv: Deleted
2023/11/08 22:14:51 INFO  :
Transferred:   	       10 GiB / 10 GiB, 100%, 17.132 MiB/s, ETA 0s
Checks:                 2 / 2, 100%
Deleted:                1 (files), 0 (dirs)
Renamed:                1
Transferred:            1 / 1, 100%
Elapsed time:     10m18.0s

Hier soir j'ai testé avec une vraie vidéo de 16Go, lue ensuite avec VLC via le montage sur Linux : nickel :)

Enjoy ! (pour la Science seulement !)

Mots clés