NAS + DLNA avec un Raspberry Pi

Voici un petit guide sur l’utilisation d’un Raspberry Pi en tant que NAS + serveur DLNA, afin de pouvoir visionner sur votre TV / Platine Blu-ray les vidéos stockées sur vos disques durs, et de pouvoir par la même occasion y accéder via votre (vos) ordinateurs sur le réseau.

Ce guide a été rédigé sur Mac. Les exemples / configurations seront donc adaptés. Il n’est pas compliqué de faire la même chose sous Windows en trouvant l’équivalent des commandes.

Niveau matos :

  • RPI avec Raspbian installé
  • Cable ethernet pour relier le RPI au réseau (en wifi ça servirait pas à grand chose..)
  • 1, 2, 3 ou 4 disques durs.. Dans mon cas j’en utilise deux, dont un auto-alimenté mais je pense qu’il ralenti l’ensemble.

I. Préparation du Raspberry

Accès SSH

La première chose à faire une fois que Raspbian est installé, et que vous voulez accéder à votre RPI headless, est de créer un fichier « ssh » à la racine de la carte SD.

~ touch ssh

En effet, par défaut, le SSH n’est pas activé par défaut sur les dernières versions de Raspbian. En créant ce fichier, vous dites au système de l’activer pour ce démarrage. Le fichier est d’ailleurs supprimé automatiquement.

Vous pouvez maintenant brancher le RPI, et attendre environ 60/90 secondes qu’il ait terminé de démarrer. La prochaine étape est de savoir quelle adresse IP lui a été attribuée. Pour ce faire, il va falloir scanner les IP du réseau. De mon coté, je le fais assez simplement sur Mac avec arp :

~ arp -a
? (192.168.1.1) at b8:26:6c:5c:6f:46 on en0 ifscope [ethernet]
? (192.168.1.14) at 6c:ca:8:c4:58:c6 on en0 ifscope [ethernet]
? (192.168.1.15) at 6c:ca:8:c4:58:c6 on en0 ifscope [ethernet]
? (192.168.1.28) at 6c:ca:8:c4:58:c6 on en0 ifscope [ethernet]

Je sais que 192.168.1.1 est mon routeur, et les machines 14 et 15 sont mes deux ordinateurs. Il reste donc la 28.

Vous allez ajouter un fichier de configuration pour votre connexion SSH, qui permettra de facilité la connexion au Raspberry (au début ça ne changera pas grand chose, mais dans des articles suivants nous changerons la connexion pour n’autoriser que les connexions avec des clés privées) :

~ nano ~/.ssh/config

Ajoutez le code suivant :

Host pi
HostName 192.168.1.28
Port 22
User pi

Il ne reste plus qu’à enregistrer et à taper ssh pi pour se connecter. Le mot de passe à la première connexion est raspberry.

Mise à jour du Raspberry

Lancez les commandes suivantes pour mettre à jour votre RPI :

pi@pimedia:~ $ sudo apt-get update
pi@pimedia:~ $ sudo apt-get upgrade
pi@pimedia:~ $ sudo rasp-config

Une fois dans la configuration, il faut changer le mot de passe pour l’utilisateur pi, changer si vous le souhaitez le hostname, et dans interfacing, activer le ssh. N’hésitez pas à aller voir les autres options.

Voila, votre RPI est prêt à être utilisé.

II. Installation des disques

Cette partie devrait être rapide, c’est loin d’être la plus compliqué.. Nous allons utiliser les disques en NTFS, ce qui sera plus simple pour les partages entre les différents postes et pour le DLNA.

Préparation

Vous allez installer le package ntfs-3g, charger le nom des devices, et ensuite les formater (sauf s’ils sont déjà formatés en NTFS avec du contenu dessus, mais je pars du principe qu’ils sont vierges).

pi@pimedia:~ $ sudo apt-get install ntfs-3g
pi@pimedia:~ $ sudo fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/sda5 16128 976768064 976751937 465.8G 7 HPFS/NTFS/exFAT
/dev/sdb1 63 625121279 625121217 298.1G  HPFS/NTFS/exFAT
....

Nous  voyons donc qu’il y a un disque sur /dev/sda5 et un autre sur /dev/sdb1. Par sécurité nous allons essayer de les démonter et ensuite les formater.

pi@pimedia:~ $ sudo umount /dev/sda5
pi@pimedia:~ $ sudo umount /dev/sdb1
pi@pimedia:~ $ sudo mkntfs /dev/sda5
pi@pimedia:~ $ sudo mkntfs /dev/sdb1

Montage

Créons maintenant les points de montage. Ces derniers sont en fait des dossier qui vont pointer vers le contenu des disques durs. Nous allons les monter à la main, et modifier notre configuration pour qu’ils soient automatiquement montés lors du démarrage du RPI.

pi@pimedia:~ $ sudo mkdir -p /media/hdd1
pi@pimedia:~ $ sudo mkdir -p /media/hdd2
pi@pimedia:~ $ sudo mount -t auto /dev/sda5 /media/hdd1
pi@pimedia:~ $ sudo mount -t auto /dev/sdb1 /media/hdd2

Les disques sont maintenant montés. Nous allons rendre ceci permanent en éditant le fichier /etc/fstab :

pi@pimedia:~ $ sudo nano /etc/fstab

# Ajoutez les lignes suivantes :
/dev/sda5 /media/hdd1 auto noatime 0 0
/dev/sdb1 /media/hdd2 auto noatime 0 0

Et voila maintenant lorsque la machine redémarrera les disques seront automatiquement montés dans les dossiers que nous avons définis précédemment.

III. Partages SAMBA

C’est le moment de passer aux choses sérieuses. On va créer des dossiers sur les disques, qui seront partagés sur le réseau.

A lire aussi :  Nombre de lignes de code

Organisation

Pour l’exemple on va faire 4 dossiers :

  • Share : qui sera public, et qui servira à transférer des fichiers entre les ordinateurs.
  • Films : qui sera public aussi, mais dans lequel on ne pourra pas écrire directement (je sais que ce n’est pas trop logique, mais c’est pour l’exemple).
  • Photos : qui ne sera accessible que aux utilisateurs connectés, et appartement à un groupe particulier.
  • Backup : qui ne sera accessible qu’à un utilisateur en particulier.

Nous allons répartir les dossiers de la sorte :

  • Share + Films : /media/hdd1
  • Photos + Backup : /media/hdd2

Créons donc les dossiers en suivant ce schéma :

pi@pimedia:~ $ mkdir -p /media/hdd1/Share
pi@pimedia:~ $ mkdir -p /media/hdd1/Films
pi@pimedia:~ $ mkdir -p /media/hdd2/Photos
pi@pimedia:~ $ mkdir -p /media/hdd2/Backup

Samba

Il faut ensuite installer Samba :

pi@pimedia:~ $ sudo apt-get install samba samba-common-dir

Et le configurer :

pi@pimedia:~ $ mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
pi@pimedia:~ $ sudo nano /etc/samba/smb.conf

Tout d’abord la partie globale de la configuration :

[global]
# Groupe de travail. A ne pas changer sauf s'il est différent
# sur vos machines.
workgroup = WORKGROUP

# Message du serveur qui apparait sur les fenêtres de connexion
server string = %h server

# Nom Netbios
netbios name = PIMEDIA

# Fichier de log
log file = /var/log/samba/log.%m

# Taille max du fichier de log
max log size = 1000

# Ne pas écrire dans le syslog
syslog = 0

# Script a lancer si un problème de configuration existe
panic action = /usr/share/samba/panic-action %d

# La sécurité par défaut pour accéder aux partages.
# User par défaut (demande une connexion)
security = user

# Encryption des mots de passe
encrypt passwords = true

# Database backend pour enregistrer les mots de passe
passdb backend = tdbsam

# Samba doit obéir aux restrictions de connexion PAM
obey pam restrictions = yes

# Synchronisation avec les mots de passe unix
unix password sync = yes

# Programme pour changer le mot de passe
passwd program = /usr/bin/passwd %u

# Texte à afficher pour changer le mot de passe
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# Change le mot de passe PAM
pam password change = yes

# Utilisateurs avec un mauvais mot de passe sont rejetés.
# Sauf si le nom d'utilisateur n'existe pas ils seront en guest
map to guest = bad user

# Autorise les guest sur les partages que l'on définit.
# Nous allons contrôler les accès directement dans les partages.
usershare allow guests = yes

Vous pouvez déjà tester la configuration en lançant la commande testparm. Mais avant nous allons configurer les partages que nous souhaitons. Cette partie est plus simple, et il ne sera pas difficile pour vous d’en ajouter par la suite selon vos besoins.

[Share]
path =/media/hdd1/Share
read only = no
locking = no
guest ok = yes
force user = pi

[Films]
path =/media/hdd1/Films
read only = yes
guest ok = yes
force user = pi

[Photos]
path = /media/hdd2/Photos
writable = yes
valid users = @Photos
create mode = 0600
directory mask = 0700

[Backup]
path = /media/hdd2/Backup
writable = yes
valid users = Jerome
create mode = 0600
directory mask = 0700

La configuration ici est simple. Nous indiquons le nom du partage en premier lieu. Ensuite nous mettons le chemin vers le dossier qui contient le partage. read only = yes signifie que nous ne pouvons pas écrire dans le dossier (c’est l’équivalent de writable = no).

Ensuite locking = no est important car grâce à ce paramètre, si un fichier est en cours d’écriture sur un poste Windows et que ce dernier plante (on se demande bien pourquoi …), le fichier ne sera pas bloqué et sera quand même accessible sur les autres postes, pour le supprimer par exemple.

Guest ok = yes permet aux invités de se connecter, en utilisant par défaut l’utilisateur pi du système (grâce au paramètre force user = pi).

Les utilisateurs

Avant de redémarrer le serveur, il va falloir créer les groupes et utilisateurs, sinon ça ne fonctionnera pas. On a donc décidé de créer un groupe Photos qui pourra lire / écrire dans le dossier Photos, ainsi qu’un utilisateur Jerome qui aura accès au dossier Backup.

pi@pimedia:~ $ sudo groupadd Photos
pi@pimedia:~ $ sudo useradd Jerome -m -G Photos
pi@pimedia:~ $ sudo useradd Robert -m -G Photos
pi@pimedia:~ $ sudo passwd Jerome
pi@pimedia:~ $ sudo passwd Robert
pi@pimedia:~ $ sudo smbpasswd -a Jerome
pi@pimedia:~ $ sudo smbpasswd -a Robert

Et voila il ne reste plus qu’à redémarrer Samba pour prendre en compte tous les changements :

pi@pimedia:~ $ sudo /etc/init.d/samba restart
NAS + DLNA avec un Raspberry Pi - Partages actifs

Maintenant allez sur votre machine, dans les dossiers partagés. Votre serveur devrait apparaitre avec les dossiers. Connectez vous dessus avec le nom d’utilisateur / mot de passe que vous venez de créer, et voila, vous pouvez faire ce que vous avez à faire dans les dossiers partagés.

IV. Serveur DLNA

Installation

Pour terminer, nous allons installer MiniDLNA qui va permettre d’accéder aux films sur votre TV (ou platine) connectée. Je vous conseil par contre de tout brancher en ethernet pour des raisons de performances (ok je n’ai pas testé en Wifi mais bon ..).

pi@pimedia:~ $ sudo apt-get install minidlna

Une des premières choses à faire une fois l’installation terminée est de changer l’utilisateur et le groupe qui lance le serveur. Pour faire ceci, il faut aller éditer le fichier /etc/default/minidlna :

pi@pimedia:~ $ sudo nano /etc/default/minidlna

# Décommentez les lignes suivantes :
USER="minidlna"
GROUP="minidlna"

Configuration

Passons ensuite à la configuration de MiniDLNA. On va éditer le fichier /etc/minidlna.conf :

# Spécifier l'utilisateur qui lance le démon
user=minidlna

# Dossier contenant les fichiers médias
# Vous pouvez précéder le chemin par A / P / V (audio, pictures, videos)
# pour avoir un classement automatique de vos fichiers dans des
# dossiers bien spécifiques
media_dir=/media/dlna

# Dossier contenant la DB et les couvertures d'albums
db_dir=/var/cache/minidlna

# Chemin vers les logs
log_dir=/var/log

# Interface réseau à utiliser. Ethernet = eth0 / Wifi = wlan0
network_interface=eth0

# Le port à utiliser pour être visible
port=49200

# Le nom qui s'affichera sur votre TV / Platine
friendly_name=PiMedia

# Numero de série que le serveur envoi aux clients (à changer)
serial=681019810597110

# Découvre automatiquement les nouveaux fichiers
inotify=yes

# Noms de fichiers à utiliser pour les couvertures
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg
album_art_names=AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg
album_art_names=Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# On ne veut pas de downscale sur les gros fichiers
strict_dlna=no

# Durée en secondes pour envoyer une notif aux clients
notify_interval=900

Vous pourrez remarquer dans la configuration, que le dossier contenant les fichiers médias n’est pas /media/hdd1/Films. C’est une petite astuce pour ne pas avoir à configurer plusieurs dossiers qui seront classés automatiquement dans des dossiers VidéosMusiques, … On configure un seul dossier qui contiendra des symlinks vers vos autres dossiers médias. C’est peut être pas très clair, voici donc un exemple :

pi@pimedia:~ $ sudo mkdir -p /media/dlna
pi@pimedia:~ $ sudo ln -s /media/hdd1/Films /media/dlna/Films

Et à chaque nouveau dossier contenant des films vous faites un nouveau lien dans ce dossier. Vous n’aurez plus qu’à aller dans « Folders » sur votre TV pour avoir vos symlinks. Je vous invite à tester pour vraiment vous rendre compte de ce que ça fait 😉

A lire aussi :  Nombre de lignes de code

Soulager les logs

Dernière chose à faire, si vous allez regarder le log de miniDLNA il y a des chances que vous ayez la ligne suivante :

[2017/05/06 11:21:42] inotify.c:198: warn: WARNING: Inotify max_user_watches [8192] is low or close to the number of used watches [4] and I do not have permission to increase this limit.  Please do so manually by writing a higher value into /proc/sys/fs/inotify/max_user_watches.

C’est le nombre de dossiers et fichiers dont il peut vérifier les changements simultanément, et pour lui, ce nombre est trop petit. Cela fonctionnera probablement parfaitement, mais nous pouvons arrêter cet avertissement facilement.

pi@pimedia:~ $ sudo nano /etc/sysctl.conf

Et ajoutez à la fin du fichier la ligne suivante :

fs.inotify.max_user_watches = 65536

C’est la valeur la plus basse pour ne pas avoir de message d’erreur dans le log. Et pour finir on dit au système de démarrer MiniDLNA au démarrage :

pi@pimedia:~ $ sudo update-rc.d minidlna defaults

Tests

C’est terminé, vous pouvez allumer votre écran, votre platine, ou autre objet connecté, et vous devriez voir apparaitre dans vos menus, un nouveau « PiMedia ». Si vous naviguez dedans, vos dossiers devraient apparaitre, et vous pourrez profiter de vos fichiers !

Il est possible que le petit RPI prenne un peu de temps à tout indexer. Mais c’est normal, patience.

C’est terminé ! J’espère que ce petit tutorial vous a été utile. N’hésitez pas si vous avez des questions. D’autres articles sur le RPI devraient arriver bientôt !

8 réflexions sur “NAS + DLNA avec un Raspberry Pi

  • 21 août 2017 à 02:11
    Permalien

    Salutation super tuto mais j’ai quelques questions.
    Et ça serait super que tu puisses accéder à ma requêtes et mes questions !

    Requête : pourrais tu rajouter une partie pour faire du raid ?

    (Je débute sur linux)
    Questions :
    1. à quoi sert le « create mode = 0600 » dans les paramêtres samba ?

    2. j’aimerais que les films soient « read only » excepté depuis mon windows donc ma session et mon user.
    Comment dois je procéder ?

    3. pourquoi ne pas mettre le paramêtre « locking = no » à tous les dossiers ?

    Merci d’avance 🙂

    Répondre
    • 22 août 2017 à 08:33
      Permalien

      Bonjour,

      Tout d’abord pour la partie raid je vais essayer de rajouter quelque chose mais n’en faisant pas moi-même ça risque d’être un peu long à écrire 😉
      Ensuite, pour les questions :

      1. Le create mode 0600 définit les droits qui seront affectés aux fichiers copiés dans le dossier. 0600 indique que le fichier sera accessible en lecture / écriture par la personne connectée au serveur.

      2. Pour que tes films soient read only excepté pour ton user, tu peux laisser le paramètre « read only » mais tu dois rajouter une ligne « write list = user1 » où tu remplaces user1 par ton nom d’utilisateur.

      3. J’aurai pu le mettre à tous mes dossiers. C’était seulement pour l’exemple là, libre à toi de décider de le mettre ou pas 😉

      A+ et bon courage !

      Répondre
  • 22 avril 2019 à 09:56
    Permalien

    Bonjour, j’ai trouvé une petite erreur :
    1
    2

    pi@pimedia:~ $ mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
    pi@pimedia:~ $ sudo nano /etc/samba.smb.conf

    dans la 2eme ligne ca doit etre :

    pi@pimedia:~ $ sudo nano /etc/samba/smb.conf

    sinon samba n’a plus de fichiers config 😉

    Merci pour ce tuto, j’essaye de tout faire marcher, le dlna marche apparement, mais le nas ne marchait pas a cause de cette erreur, j’espere que ca va la resoudre 😉

    Répondre
    • 23 avril 2019 à 09:53
      Permalien

      Merci pour ce commentaire!

      Je vais corriger ça de suite.

      Répondre
  • 17 janvier 2021 à 18:15
    Permalien

    Super tuto merci! Est-ce possible de supprimer une catégorie? (musiques ou images par exemple, pour éviter d’avoir cette catégorie s’afficher sur la tv alors qu’il n’y a rien dedans) le chemin d’accès est long pour accéder à mon dossier film (j’ai images,musiques,vidéos d’afficher sur la tv ensuite je dois aller dans vidéos-dossiers-« mon dossier ») s’il y avait moyen de raccourcir tout ça ce serrait parfait 🙂
    Merci

    Répondre
    • 4 février 2021 à 09:45
      Permalien

      Hello,

      Merci pour ton commentaire!

      Alors pour supprimer / masquer une catégorie :
      Dans la partie « global » de ta configuration Samba, tu peux ajouter la ligne :
      hide files = /ton_dossier/

      Pour avoir un chemin raccourci, ce que je tenterai de faire :
      Créer un symlink vers le dossier : ln -sfn videos/dossiers/mon_dossier (à adapter bien évidemment)
      Ensuite dans ta configuration vidéos, tu rajoutes ces lignes :

      follow symlinks = yes
      wide links = yes

      Je n’ai pas testé par contre, je te laisse me dire si ça fonctionne ou pas 🙂

      Répondre
  • 17 janvier 2021 à 18:55
    Permalien

    J’ai mon repertoire home (pi) qui s’affiche dans le serveur samba, j’aimerai le retirer mais j’ai beau regarder dans le fichier de config /etc/samba/smb.conf je ne trouve pas 🙁

    Répondre
    • 4 février 2021 à 09:46
      Permalien

      Comme ma réponse précédente, tu peux ajouter dans ta section « global » de ta configuration Samba, une ligne :
      hide files = /ton_dossier/

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *