[Tuto] SeedBox et MediaCenter sur Raspberry
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
- Modifié
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 scripttransmission-daemon' overrides LSB defaults (2 3 4 5).
transmission-daemon' overrides LSB defaults (0 1 6).
insserv: warning: current stop runlevel(s) (0 1 2 3 4 5 6) of script
Du coup le script tourne en boucle au boot.
Ai-je loupé une étape?
Merci d'avance.
arakneed et wxcvbn
Il y a un excellent tuto ici très bien expliqué http://www.framboise314.fr/booter-le-raspberry-pi-sur-un-disque-dur-usb/
Il a été tester et approuver par moi
- Modifié
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...
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!!
- Modifié
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 !
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.
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