Bonjour,

Merci pour le tuto.

Que donne Plex sur le Raspberry? Tu arrives à streamer sans saccades? Du 720p? Du 1080p?
J'avais déjà pensé à cette solution mais je me demandais si le CPU allait bloquer.

Alors on est en Local donc pas de transcodage, je télécharge que du 1080p et aucun freez.
Quand je télécharge a fond et je regarde un film sur ma TV et Plex via navigateur le CPU (4 coeur) ne dépasse même pas les 20%.

J'ai même test un 2160p sur plex, le CPU bouge pas par contre utilisable uniquement sur navigateur a mon souvenir.
Par contre n'est pas passer sur AppleTV, ni SamsungTV avec les client plex

    Salut, wxcvbn sympas le tutoriel.

    Pourrais-tu essayer d'aérer le tutoriel pour faciliter la lecture.

      Un petit complément pour ton tuto, vu que tu vas utiliser ton disque dur externe en permanence,
      c'est de copier tout le system sur le hdd et de garder uniquement la partition de boot sur la carte SD.
      Avantage : durée de vie de la sd, extension du system directement à la taille du hdd, le cache de kodi...
      Un tuto est dispos à cette adresse :
      https://easydomoticz.com/preserver-la-carte-sd-episode-ii-booter-sur-usb/
      je crois qu'il y a 1 ou 2 oubli, à adapter.

      Pour répondre à Salimeche :
      Pour la HD, c'est uniquement suivant ta bande passante, le raspberry comme dit plus haut dépasse rarement les 20% en charge.

        arakneed Alors ça c'est parfait je chercher le moyen de le faire et j'allais investir dans un PiWD.
        Ou y'a un paquet a installé pour évité l'écriture et effacement en permanence sur la SD. (il le fait a uniquement au reboot)

        Comme je débute j'y ai pas encore vraiment songé mais je vais voir ça de plus prêt 🙂

          10 jours plus tard

          Bonjour et merci pour ce tuto très bien détaillé. J'ai malheureusement un soucis à la fin concernant la mise en place du script Transmission/VPN.
          Lorsque de je désactive le lancement auto de Transmission j'ai l'erreur suivante :

          Synchronizing state for transmission-daemon.service with sysvinit using update-rc.d...
          Executing /usr/sbin/update-rc.d transmission-daemon defaults
          Executing /usr/sbin/update-rc.d transmission-daemon disable
          insserv: warning: current start runlevel(s) (empty) of script transmission-daemon' overrides LSB defaults (2 3 4 5).
          insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script
          transmission-daemon' overrides LSB defaults (0 1 6).

          Du coup le script tourne en boucle au boot.
          Ai-je loupé une étape?
          Merci d'avance.

          Salut;
          Bonjour;

          Pour l'installation de la rpi, je privilégie la raspbian netinstall, qui pour un usage serveur n'installe que le minimum (ssh), et non tout le tra-la-la, le graphique, etc..
          https://github.com/debian-pi/raspbian-ua-netinst/releases/latest
          Explications et PWD ici:
          https://github.com/debian-pi/raspbian-ua-netinst
          Comme pour l'image classique, il suffit de l'écrire sur la SD, lancer la rpi, laisser faire 10 à 30 mn selon la connexion, chercher ensuite sur son réseau local avec nmap par exemple l'ip de la pi, s'y connecter, paramétrer "/etc/network/interfaces" pour une ip fixe....

          Ensuite, pour l'installation du rootfs (système sur DD de 2 To chez moi), j'avais fait un petit script (datant d'au moins 2 ou 3 ans) qui permettait de configurer le cmdline.txt en boot par uuid avec l'avantage par rapport au boot via "sda, sdb,...), de ne pas être dépendant de l'ordre d'insertion des périphériques usb si plusieurs de connectés.

          Le script à lancer en root, qui va vous demander de préciser le disque dur détecté sur lequel installer le rootfs, et la taille à réserver pour cette partition (4 à 6 Go suffisent pour une raspbian netinstall; 8 à 10 max pour une raspbian classique), le reste du DD servant pour "/home"; naturellement le DD doit être vierge car comme formatage en ext4, toutes les données seront perdues:

          #!/bin/bash
          clear
          LC_ALL=fr_FR.UTF-8 &
          if [ $(id -u) -ne 0 ];then echo "Ce script doit être execute sous root ou lancé avec sudo";sleep 5;exit;fi
          de=$(lsblk | grep sd.*disk |awk '{print $1}')
          if [ "$de" = "" ];then echo "Aucun disque usb de détecté !!, rebranchez en un et relancer le script.";sleep 5;exit;fi
          while true;do
          echo "Disque(s) usb externes(s) présent(s): "$de
          read -p "Sur quel disque effectuer l'installation ? " sd
          if grep -q "$sd" <<<"$de";then if [ -e "/dev/$sd" ];then break;fi;fi
          done
          while [ "$rep" = "" ];do
          read -p "Choisir une taille entre 4 et 10 Go pour le système (nombre entier, pas de décimales ni d'unités) :" rep
          if ! [ "$rep" -ge 4 -a "$rep" -le 10 ];then rep="";fi
          done
          if [ $( mount | grep "/dev/mmcblk0p2" | wc -l )  == 1 ] ; then
          until [[ ${rep2} =~ ^[o,n,O,N]+$ ]];do
          clear
          echo "Votre installation va se faire sur $sd ..attention toutes les donnees de $sd seront supprimees..."
          echo "Voulez vous vraiment continuer ??? o/n O/N ..."
          read rep2
          done
          if [ "$rep2" == "o" ] || [ "$rep2" == "O" ]
          then
          rep=$(echo "$((rep * 2097152))");rep1=$((rep+1))
          apt-get update --fix-missing;apt-get upgrade -y;apt-get autoremove -y;apt-get autoclean -y;apt-get clean -y
          if ! [ -f /etc/locale.gen.old ];then cp /etc/locale.gen /etc/locale.gen.old;fi
          echo 'fr_FR ISO-8859-1
          fr_FR.UTF-8 UTF-8
          fr_FR@euro ISO-8859-15'>/etc/locale.gen
          locale-gen
          echo 'LANG=fr_FR.UTF-8
          LANGUAGE=fr_FR:fr' >/etc/default/locale
          echo 'LANG=fr_FR.utf8
          LANGUAGE=FR
          LC_CTYPE="fr_FR.utf8"
          LC_NUMERIC="fr_FR.utf8"
          LC_TIME="fr_FR.utf8"
          LC_COLLATE="fr_FR.utf8"
          LC_MONETARY="fr_FR.utf8"
          LC_MESSAGES="fr_FR.utf8"
          LC_PAPER="fr_FR.utf8"
          LC_NAME="fr_FR.utf8"
          LC_ADDRESS="fr_FR.utf8"
          LC_TELEPHONE="fr_FR.utf8"
          LC_MEASUREMENT="fr_FR.utf8"
          LC_IDENTIFICATION="fr_FR.utf8"
          LC_ALL=' >/etc/environment
          echo 'Europe/Paris'>/etc/timezone
          dpkg-reconfigure -f noninteractive tzdata
          if ! which gdisk >/dev/null;then apt-get install -y gdisk;fi
          if ! which parted >/dev/null;then apt-get install -y parted;fi
          if ! which rsync >/dev/null;then apt-get install -y rsync;fi
          parted -s /dev/${sd} mklabel gpt
          parted -s -a none /dev/${sd} mkpart primary 0 ${rep}s
          parted -s -a none /dev/${sd} mkpart primary ${rep1}s 100%
          clear
          echo "Formatage en ext4 des partitions..Patientez...peut etre assez long...voir tres long..selon la capacite du disque... et votre version de rpi";sleep 5
          mkfs.ext4 /dev/${sd}1 >/dev/null
          mkfs.ext4 /dev/${sd}2 >/dev/null
          echo "Formatage en ext4 termine..."
          PARTUUID=$(blkid -o export /dev/${sd}1 | grep PARTUUID)
          UUID1=$(blkid -o export /dev/${sd}1 | grep ^UUID)
          UUID2=$(blkid -o export /dev/${sd}2 | grep ^UUID)
          mkdir -p /mnt/mm1;mkdir -p /mnt/mm2;mkdir -p /mnt/sd1;mkdir -p /mnt/sd2
          mount /dev/mmcblk0p1 /mnt/mm1;mount /dev/mmcblk0p2 /mnt/mm2;mount /dev/${sd}1 /mnt/sd1;mount /dev/${sd}2 /mnt/sd2
          if [ $( mount | grep "/mnt/mm1" | wc -l )  == 1 ] ; then test=1; fi
          if [ $( mount | grep "/mnt/mm2" | wc -l )  == 1 ] ; then test=$((test+1)); fi
          if [ $( mount | grep "/mnt/sd1" | wc -l )  == 1 ] ; then test=$((test+1)); fi
          if [ $( mount | grep "/mnt/sd2" | wc -l )  == 1 ] ; then test=$((test+1)); fi
          if [ "$test" == "4" ]
          then
          clear
          echo "Copie de la partition systeme ROOTFS..soyez  patients..";sleep 5
          rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/home/*"} /* /mnt/sd1
          cp -f /mnt/sd1/etc/fstab /mnt/sd1/etc/fstab.sd;sed -i -e 's/.*mmcblk0p2.*$/#&/g' /mnt/sd1/etc/fstab
          echo $UUID1"		/			ext4        defaults           0    1" >>/mnt/sd1/etc/fstab
          echo $UUID2"		/home		ext4        defaults           0    2" >>/mnt/sd1/etc/fstab
          cp -f /mnt/sd1/etc/fstab /mnt/sd1/etc/fstab.hd
          if [ "$(ls -A /home)" ];then cp -Rfp /home/* /mnt/sd2;fi
          cp -f /mnt/mm1/cmdline.txt /mnt/mm1/cmdline.sd
          if [ -f /mnt/mm1/initrd.img* ];then sed -i "s/\/dev\/mmcblk0p2/$UUID1/g;" /mnt/mm1/cmdline.txt;else sed -i "s/\/dev\/mmcblk0p2/$PARTUUID/g;" /mnt/mm1/cmdline.txt;fi
          cp -f /mnt/mm1/cmdline.txt /mnt/mm1/cmdline.hd
          tune2fs -m 0 /dev/${sd}2
          echo 'nameserver 208.67.222.222
          nameserver 208.67.220.220
          nameserver 8.8.8.8'>/mnt/sd1/etc/resolv.conf;chattr +i /mnt/sd1/etc/resolv.conf
          echo ': ${LANG:=fr_FR.UTF-8}; export LANG
          : ${LANGUAGE:=fr_FR:fr}; export LANGUAGE'>>/mnt/sd1/etc/profile
          echo ': ${LANG:=fr_FR.UTF-8}; export LANG
          : ${LANGUAGE:=fr_FR:fr}; export LANGUAGE'>>/mnt/sd1/etc/bash.bashrc
          if ! [ -f /mnt/sd1/var/swap ];then fallocate -l 1024m /mnt/sd1/var/swap;chmod 600 /mnt/sd1/var/swap;mkswap /mnt/sd1/var/swap;echo "vm.swappiness=20" >>/mnt/sd1/etc/sysctl.conf; echo "/var/swap	none	swap	sw	0	0" >>/mnt/sd1/etc/fstab;fi
          cat <<'EOF' >/mnt/sd1/usr/local/bin/bootsd.sh
          #!/bin/bash
          if [ $(id -u) -ne 0 ];then echo "Ce script doit être execute sous root ou lance avec sudo";sleep 5;exit;fi
          mount /dev/mmcblk0p1 /mnt
          cat /mnt/cmdline.sd >/mnt/cmdline.txt
          umount /mnt
          echo "Redemarrage...";sleep 5
          reboot
          EOF
          cat <<'EOF' >/mnt/mm2/usr/local/bin/boothd.sh
          #!/bin/bash
          if [ $(id -u) -ne 0 ];then echo "Ce script doit être execute sous root ou lance avec sudo";sleep 5;exit;fi
          mount /dev/mmcblk0p1 /mnt
          cat /mnt/cmdline.hd >/mnt/cmdline.txt
          umount /mnt
          echo "Redemarrage...";sleep 5
          reboot
          EOF
          chmod +x /mnt/mm2/usr/local/bin/boothd.sh;chmod +x /mnt/sd1/usr/local/bin/bootsd.sh;rm -f /mnt/sd1/usr/local/bin/installpi.sh
          umount -l /mnt/mm1;umount -l /mnt/mm2;umount -l /mnt/sd1;umount -l /mnt/sd2
          find /mnt/* -type d -empty -delete
          echo "Installation terminee....reboot de la machine...";sleep 5;reboot
          fi;fi
          else
          echo "Cette installation ne peut se faire qu'a partir de la carte SD ...";sleep 5
          fi
          exit
          

          Laisser faire, une fois fini, la rpi reboot en utilisant le rootfs du DD.
          Si vous désirez revenir au rootfs sur la sd, saisir:

          bootsd.sh

          dans la console
          Pour revenir au roofs sur le DD à partir de la sd:

          boothd.sh

          Si, ça peut servir...

          Salut
          @Iocca
          c'est juste un warning (avertissement)

          et pour le script c’est normale qui tourne en boucle car il surveille la connections du vpn.

          Hello,

          Pourrais-tu détailler cette partie:

          #ping ip du vpn serveur, si pas de reponse arret de transmission + restart du vpn
          TRANS=$(pgrep transmission)
          ping -q -c2 10.8.0.1 > /dev/null
          if [ $? -ne 0 ] || [ -z "$TRANS" ]

          A quoi correspond cette IP 10.8.0.1? Où la récupère t-on?
          Je comprends que TRANS récupère la valeur du process de transmission mais je ne pige pas la dernière ligne.

          merci!!

            Salut tomavip
            L'IP est celle du serveur VPN, en effet OpenVPN crée un sous-réseau virtuel en 10.8.0.x (par défaut) dans lequel ses clients sont assignés.

            tomavip
            Salut;
            Un petit screen devrait suffire:

            Moi je ping sur l'adresse attribuée par le serveur et non celle du serveur, mais ça ne change rien...
            Sinon le client torrent je le bind sur l'ip attribuée par le serveur vpn:

            "bind-address-ipv4": "10.8.0.3",

            Plus de vpn -> plus de connexion automatiquement du client torrent/ à un bind sur "0.0.0.0"....hadopi..

            Par contre nécessite de faire lancer un script au lancement du vpn; et je n'utilise le vpn que pour le client torrent pas pour le reste.
            Dans le fichier conf d'openvpn:

            #redirect-gateway def1 #Je commente cette ligne pour ne pas utiliser le vpn pour tout
            route-nopull #pour ne pas utiliser le vpn pour toutes les applications
            script-security 2
            up up.sh 
            down down.sh

            dans le fichier client du vpn
            Puis up.sh (a adapter en fonction du résultat d'ifconfig : du screen + haut)

            #!/bin/bash
            if [[ $5 == 255* ]];then set $1 $2 $3 $4 $4 $6;fi
            ip rule add from "$4" table VPN
            ip route add table VPN default via "$5"
            ip route add table VPN "$5" via "$4" dev "$1"
            systemctl restart transmission-daemon.service
            /etc/openvpn/checkopenvpn & #lancement du test avec ping du type "script.sh" du tuto de @wxcvbn
            

            *$4 = ip inet transmise par le vpn sur le screen
            $5 = ip destination ...........................
            $1 = tunx interface réseau du vpn (souvent tun0)
            Comme dans le screen + haut $4 = $5; mais ce n'est pas toujours le cas, celà dépend de la config du serveur, seul ifconfig peut le dire...mais cette ligne "if [[ $5 == 255 ]];then set $1 $2 $3 $4 $4 $6;fi" remet tout en ordre....

            Le down.sh:

            #!/bin/bash
            killall checkopenvpn
            ip rule delete from "$4" table VPN
            ip route flush table VPN
            exit
            

            Création table VPN:

            echo '1 VPN' >>/etc/iproute2/rt_tables

            Tâche cron:

            0-59 * * * *  if ! ( /bin/pidof openvpn > /dev/null );then /bin/systemctl start openvpn.service;fi

            Merci à tous les 2! Je regarde tout ça en détail asap !

            un mois plus tard

            Bonjour,

            J'ai bien suivi le tuto et tout fonctionne très bien. Excepter, pour la partie de Openvpn.
            Quand je fais un ifconfig, ds la partie tun0.
            Je n'est pas une adresse IP, OpenVPN crée en sous-réseau virtuel de type 10.8.0.x
            À la place, c'est l'adresse ip du serveur vpn que je me connect.

            Donc, le script ne fonctionne pas pour moi.
            Je dois changer l'adresse ip ds le script à toute les fois que je change de serveur (région ds le monde).

            Je me demande si j'ai loupé quelque chose ou si vous avez des suggestions.
            Merci.

            un an plus tard

            Bonjour , je suis complet noob et me sens pas à l aise avec le code ... Existe t il une image qui permette d avoir kodi et une seedbox et juste ça ? ( un peu comme recalbox a kodi et une partie émulateur ) .
            Comme ca rien à installer 🙂 #verynoob

            Merci d avance

            Répondre…