Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
acd_cli-plex [Le 20/12/2016, 13:27]
ethanfel
acd_cli-plex [Le 11/09/2022, 11:27] (Version actuelle)
moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892)
Ligne 1: Ligne 1:
-{{tag>16.04 ubuntu server ​tutoriel ​acd_cli plexmediaserver amazon plex infini encfs fuse unionfs ​}}+{{tag>Xenial ​tutoriel fuse}}
 ---- ----
  
 ====== Comment creer un serveur plex media server avec un stockage infini (amazon) ====== ====== Comment creer un serveur plex media server avec un stockage infini (amazon) ======
  
-Ce tutoriel décrit les étapes nécessaires pour creer un server distant (ou local) Plex, accompagné d'un stockage Amazon cloud storage illimité (jusqu’à 100to en réalité) tout en cryptant ​l'intégrabilité ​des fichiers.+Ce tutoriel décrit les étapes nécessaires pour créer ​un server distant (ou local) Plex, accompagné d'un stockage Amazon cloud storage illimité (jusqu’à 100to en réalité) tout en chiffrant ​l'intégralité ​des fichiers.
  
  
Ligne 11: Ligne 11:
   * Disposer des [[:​sudo|droits d'​administration]].   * Disposer des [[:​sudo|droits d'​administration]].
   * Disposer d'une connexion à Internet configurée et activée.   * Disposer d'une connexion à Internet configurée et activée.
-  * un serveur/vps disposant de FUSE (j'​utilise hetnzer online et ovh kimsufi), attention a OpenVZ pour les vps, vérifié bien la disponibilité de fuse. +  * un serveur/vps disposant de FUSE (j'​utilise hetnzer online et ovh kimsufi), attention a OpenVZ pour les vps, vérifié bien la disponibilité de fuse.
   * un accès SSH   * un accès SSH
   * un compte [[https://​www.amazon.com/​clouddrive/​home|amazon cloud storage]]   * un compte [[https://​www.amazon.com/​clouddrive/​home|amazon cloud storage]]
  
-  [...] + 
-===== Première étape : Préparation =====+===== La Préparation =====
  
 Tout d'​abord,​ il vous faudra installer Plex, rendez vous sur la [[https://​www.plex.tv/​downloads//​|page de téléchargement]],​ copié le lien pour Ubuntu et wget. Dans mon exemple, c'est la version 1.3.3 de plex. Tout d'​abord,​ il vous faudra installer Plex, rendez vous sur la [[https://​www.plex.tv/​downloads//​|page de téléchargement]],​ copié le lien pour Ubuntu et wget. Dans mon exemple, c'est la version 1.3.3 de plex.
 +==== Plex ====
  
 <​code>​cd ~ <​code>​cd ~
Ligne 42: Ligne 43:
  
 <​code>​service ssh restart</​code>​ <​code>​service ssh restart</​code>​
 +
 +==== Les dossiers ====
  
 Une fois reconnecté avec l'​utilisateur plex (su plex), on va créer les dossiers nécessaires,​ une documentation détaille est disponible [[http://​makeshift.ninja/​unlimited-plex-media-server-using-amazons-unlimited-storage-backend-pt1.html|ici]]. Une fois reconnecté avec l'​utilisateur plex (su plex), on va créer les dossiers nécessaires,​ une documentation détaille est disponible [[http://​makeshift.ninja/​unlimited-plex-media-server-using-amazons-unlimited-storage-backend-pt1.html|ici]].
Ligne 55: Ligne 58:
 mkdir /​home/​plex/​logs/​ mkdir /​home/​plex/​logs/​
 </​code>​ </​code>​
 +
 +==== Les paquets ====
  
 ensuite on install l'​ensemble des paquets necessaires : ensuite on install l'​ensemble des paquets necessaires :
Ligne 62: Ligne 67:
 sudo easy_install3 -U pip sudo easy_install3 -U pip
 </​code>​ </​code>​
 +
 +==== Acd_cli ====
  
 Une fois tout ceci terminé, on réalise l'​installation d'​[[https://​github.com/​yadayada/​acd_cli|ACD_CLI]] qui est une interface en ligne de commande qui permet de monter des disques cloud comme des dossiers locaux. Une fois tout ceci terminé, on réalise l'​installation d'​[[https://​github.com/​yadayada/​acd_cli|ACD_CLI]] qui est une interface en ligne de commande qui permet de monter des disques cloud comme des dossiers locaux.
Ligne 85: Ligne 92:
 ===== Le vif du sujet ===== ===== Le vif du sujet =====
  
-**Le principe est simple :** +**Le principe est simple :**
  
   * **/​local-sorted**,​ qui est le fichier local non crypté ou vous déposerez vos médias.   * **/​local-sorted**,​ qui est le fichier local non crypté ou vous déposerez vos médias.
Ligne 92: Ligne 99:
   * **/​acd-sorted** qui est le dossier distant décrypté.   * **/​acd-sorted** qui est le dossier distant décrypté.
   * **/​sorted**,​ le dossier qui via unionfs, permet de "​fusionner"​ local-sorted et acd-sorted, ce sera le dossier utilisé par Plex.   * **/​sorted**,​ le dossier qui via unionfs, permet de "​fusionner"​ local-sorted et acd-sorted, ce sera le dossier utilisé par Plex.
 +
 +Nous allons maintenant générer la clé de cryptage avec encfs, il est *impératif* qu'une fois ces étapes terminées, que vous conserviez une __sauvegarde__ de la clé de cryptage.
 +
 +Pour monter encfs, on lance simplement
 +
 +<​code>​encfs /​home/​plex/​.local-sorted /​home/​plex/​local-sorted</​code>​
 +
 +Encfs va vous demander les réglages de cryptages, ceux par défauts sont correctes et une mot de passe, qu'il faudra lui aussi conserver précieusement.
 +
 +Une fois terminé, tout fichier placé dans */​local-sorted*,​ apparaîtra crypté dans */​.local-sorted*.
 +
 +Nous allons ensuite déplacer la clé de cryptage :
 +<​code>​fusermount -u /​home/​plex/​local-sorted
 +mv /​home/​plex/​.local-sorted/​.encfs6.xml /​home/​plex/​encfs.xml</​code>​
 +
 +Dorénavant,​ pour monter un système de fichier encfs, il sera nécessaire de stipuler ​ la présence d'un fichier de configuration.
 +
 +<​code>​ENCFS6_CONFIG='/​home/​plex/​encfs.xml'​ encfs /​home/​plex/​.local-sorted /​home/​plex/​local-sorted</​code>​
 +
 +**Testons si ça fonctionne :**
 +<​code>​ls /​home/​plex/​.local-sorted/​ # Normalement vide 
 +touch /​home/​plex/​local-sorted/​test
 +ls /​home/​plex/​.local-sorted/​ # A fichier avec un nom sans aucun sens devrait apparaître. </​code>​
 +
 +
 +==== Le montage d'​Amazon Cloud Drive ====
 +
 +<​code>​acd_cli mount /​home/​plex/​.acd-sorted/</​code>​
 +
 +**/​home/​plex/​.acd-sorted/​** affiche désormais les fichiers du dossier **/** d'​amazon cloud drive de manière crypté.
 +
 +On monte désormais avec EncFS :
 +<​code>​ENCFS6_CONFIG='/​home/​plex/​encfs.xml'​ encfs /​home/​plex/​.acd-sorted /​home/​plex/​acd-sorted</​code>​
 +
 +Les fichiers sur amazon cloud storage apparaissent de manière decrypté dans le dossier **/​acd-sorted**
 +
 +=== Upload ===
 +
 +Pour Upload, il y a deux manière, la manière la plus simple étant d'​utilisé acd_cli upload suivit d'un acd_cli sync ou rclone et un crypte python pour remonter automatiquement le point de montage.
 +
 +== acd_cli upload ==
 +
 +<​code>​acd_cli upload /​home/​plex/​.local-sorted/​* /
 +acd_cli sync</​code>​
 +
 + cela fonctionne mais pour le moment je trouve acd_cli upload inconsistant (avec pas mal d'​erreurs) et acd_cli instable ( crash du point de montage fréquent)
 + 
 +== Rclone ==
 +C'est la solution que j'​utilise. le principe est le suivant :
 +
 +un script bash que j'​execute dans un [[https://​doc.ubuntu-fr.org/​screen|screen]] avec la commande suivant :
 +
 +<note tip>​l'​option **move** supprime le fichier source, a remplacer par *copy* pour le conserver</​note>​
 +<​code>​rclone move -v /​home/​plex/​.local-sorted acd:/</​code>​
 +
 +le script :
 +<​code>​nano /​home/​plex/​.loopreclone.sh</​code>​
 +
 +on y colle le code suivant :
 +
 +<​code>#​!/​bin/​bash
 +for i in {1..10}
 +do
 +        rclone move -v /​home/​plex/​.local-sorted acd:/  ​
 +        mail -s "​Upload $i $(date) " //votre email// <<<​ '​Update !'
 +done</​code>​
 +
 +ensuite on rend le scripte exécutable :
 +<​code>​ chdmod +x /​home/​plex/​.looprclone.sh</​code>​
 +
 +On l’exécute ensuite dans un screen, l'​upload va ce réaliser 10 fois en envoyant un email a chaque fin de boucle (pour avoir une idée de la progression),​ c'est très pratique pour un upload tres volumineux dans un dossier qui ce renouvelle régulièrement quand on télécharge ses médias perso.
 +
 +Pour rafraîchir la liste des fichiers il faut executer :
 +
 +<​code>​acd_cli sync</​code> ​
 +
 +mais cela a tendant a faire crasher le point de montage, une solution plus stable et automatique est disponible dans la dernière partie du tuto.
 +
 +==== UnionFS-FUSE ====
 +
 +on execute simplement :
 +
 +<​code>​unionfs-fuse -o cow /​home/​plex/​local-sorted=RW:/​home/​plex/​acd-sorted=RO /​home/​plex/​sorted/</​code>​
 +
 +Cela fusionne les deux dossiers non crypté en 1 seul dossier **/​sorted**. qu'on utilisera pour plex.
 +Cela a pour avantage de permettre a plex d'​ajouter un fichier rapidement lorsqu'​il est ajouté sur le server dans **/​local-sorted** et lorsque celui si est upload sur amazon, décrypté et remonté localement dans */​acd-sorted,​ de ne pas y voir de différence puisqu'​il sera monté de manière identique dans **/​sorted**.
 + 
  
 ===== Conclusion ===== ===== Conclusion =====
  
-Voila, vous savez maintenant faire le café avec Ubuntu !+Voila, vous avez l'​essentiel pour réaliser votre propre Plex infini. C'est évidemment a utiliser ​avec des médias dont vous avez légalement acquis la propriété ou vos films perso.
  
-===== Problèmes ​connus=====+Je vous invite a terminer le tuto par la lecture des problèmes ​connus, il y en a quelque un, notamment celui causé par acd_cli sync, qui fait planté le point de montage et qui devient inaccessible.
  
-Si votre café est trop fort, saisissez la commande suivante dans un [[:​terminal]]:​ ...+===== Problèmes connus et leurs solutions=====
  
-===== Voir aussi =====+==== Crash du montage apres une syncro ​====
  
-  * [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=64840|Discussion "​Tutoriel pour faire le café"​]] sur le forum ubuntu-fr+Le principale défaut est comme expliqué plus haut, acd_cli sync, qui a tendance a faire planté ​le point de montage, ce qui empêche de simplement placer un acd_cli dans un crontab.
  
 +On va donc utiliser deux scripts.
 +le premier, très simple, va executer un acd_cli sync suivit immédiatement par un script python qui va verifié si le montage a planté et le remonté le cas échéant.
 +
 +<​code>​nano /​home/​plex/​sync.sh</​code>​
 +
 +on y colle :
 +<​code>​ #!/bin/bash
 +/​usr/​local/​bin/​acd_cli -d sync
 +python3 /​home/​plex/​.automount.py</​code>​
 +
 +et on le rend executable par un **chmod +x**.
 +
 +on crée ensuite le .automount.py avec le code suivant, j'ai modifié le script mais la source est [[https://​gist.github.com/​a5m0/​5090c42f16c39c8a34876bfcc7b3703d|ici]]:​
 +
 +<​code>​import os
 +import subprocess
 +import logging
 +logging.basicConfig(filename='​acdmount.log',​ level=logging.INFO,​ format='​%(asctime)s %(levelname)s %(message)$
 +logging.info('​ACD mount checker started'​)
 +DEVNULL = open(os.devnull,​ '​wb'​)
 +#pb = Pushbullet('​pushbullet-api-key-here'​)
 +#​logging.info("​running ACD sync")
 +#​subprocess.call(["/​usr/​local/​bin/​acd_cli",​ "​sync"​],​ stdin=None, stdout=DEVNULL)
 +exists = os.path.exists("/​home/​plex/​.acd-sorted/"​)
 +if exists is not True:
 +    logging.warning("​ACD mount is down")
 +   # push = pb.push_note("​ACD mount down", "​attempting restart"​)
 +   # logging.info("​attempting umount"​)
 +   # subprocess.call(["/​usr/​local/​bin/​acd_cli",​ "​umount"​],​ stdin=None, stdout=DEVNULL)
 +    logging.info("​attempting umount fuser"​)
 +    subprocess.call(["/​bin/​fusermount",​ "​-uz",​ "/​home/​plex/​.acd-sorted"​],​ stdin=None, stdout=DEVNULL)
 +  # logging.info("​running ACD sync")
 +  # subprocess.call(["​acd_cli",​ "​sync"​],​ stdin=None, stdout=DEVNULL)
 +    logging.info("​attempting ACD mount"​)
 +    subprocess.call(["/​usr/​local/​bin/​acd_cli",​ "​mount",​ "/​home/​plex/​.acd-sorted/"​],​ stdin=None, stdout=DEVNUL$
 +#     print ("​ACDmount ​ done")
 +  #  if os.path.exists("/​home/​plex/​.acd-sorted/"​):​
 +   # ​    push = pb.push_note("​ACD mount back up", "​restart successful"​)
 +    #    logging.info("​ACD mount restart succeeded"​)
 + #​else:​
 +  # print 'all good'</​code> ​
 +  ​
 +On va ensuite exécuter ce scripte tout les 6 minutes via [[https://​doc.ubuntu-fr.org/​cron|cron]],​ un délais entre chaque sync est au minimum de 5 minutes.
 +  ​
 + <​note>​*/​6 * * * * sh /​home/​plex/​sync.sh >> /​home/​plex/​logs/​cron.log 2>&​1</​note>​
 +  ​
 +  ​
 +==== Remontage apres un reboot ====
 +
 +on va créer un script qui permet de remonter tout ceci via cron apres un reboot.
 +
 +On crée d'​abord un fichier .encfspass qui ne contiendra que le mot de pass de encfs.
 +  ​
 +<​code>​nano /​home/​plex/​.encfspass</​code>​
 +
 +ensuite un script **.mount.sh** contenant le code suivant qu'on rendre exécutable via **chmod +x**
 +<​code>​ !/bin/sh
 +/​bin/​fusermount -uz /​home/​plex/​acd-sorted
 +/​bin/​fusermount -uz /​home/​plex/​.acd-sorted
 +/​bin/​fusermount -uz /​home/​plex/​local-sorted
 +/​bin/​fusermount -uz /​home/​plex/​.local-sorted
 +/​bin/​fusermount -uz /​home/​plex/​sorted
 +acd_cli sync
 +acd_cli mount -ro /​home/​plex/​.acd-sorted
 +ENCFS6_CONFIG='/​home/​plex/​encfs.xml'​ encfs --extpass="​cat /​home/​plex/​.encfspass"​ /​home/​plex/​.acd-sorted /​home/​plex/​acd-sorted
 +ENCFS6_CONFIG='/​home/​plex/​encfs.xml'​ encfs --extpass="​cat /​home/​plex/​.encfspass"​ /​home/​plex/​.local-sorted /​home/​plex/​local-sorted
 +unionfs-fuse -o cow /​home/​plex/​local-sorted=RW:/​home/​plex/​acd-sorted=RO /​home/​plex/​sorted/​
 +exit </​code>​
 +
 +et on ajoute a cron :
 +
 +<​code>​@reboot /​home/​plex/​.mount.sh > /​home/​plex/​logs/​mount.log 2>&​1</​code>​
 +
 +
 +  ​
 +===== Voir aussi =====
 +==== les sources : ====
 +[[https://​amc.ovh/​|Automated Media centre]]
 +[[http://​http://​makeshift.ninja/​|makeshitf.ninja]]
 +[[https://​github.com/​yadayada/​acd_cli|https://​github.com/​yadayada/​acd_cli]]
 + 
  
 ---- ----
-//​Contributeurs principaux : [[:​utilisateurs:​IDENTIFIANT]].//+//​Contributeurs principaux : [[:​utilisateurs:​Ethanfel]].//
  • acd_cli-plex.1482236824.txt.gz
  • Dernière modification: Le 20/12/2016, 13:27
  • par ethanfel