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…