Publié le 13 mai 2016 - par

Partage Samba entre 2 Raspberry Pi sous Jessie

partage_samba_client_serveur_250pxSamba a été conçu pour permettre le partage de fichiers entre Windows et Linux.
Mais l’architecture client-serveur n’est pas à usage exclusif de ce mariage mixte. Récemment on m’a demandé s’il était possible de partager un dossier avec Samba entre 2 Raspberry Pi. J’ai répondu oui, mais pour Estelle ça ne semblait pas aussi évident que ça… Je me suis dit que ce partage inter-RasPi pouvait intéresser d’autres RasPiNautes. J’ai branché un Raspberry Pi supplémentaire, mis dedans une carte microSD avec un Raspbian Jessie tout frais, et je vous propose de partager… ce partage 🙂

Partage Samba sous Jessie entre deux Raspberry Pi

Halte aux polémiques

Pour couper court à toutes les polémiques, recommandations et autres remarques, je vous rassure, je suis au courant qu’il existe d’autres moyens. J’utilise d’ailleurs NFS au boulot (ah !). En général ça m’agace sur les forums quand quelqu’un pose une question pour réaliser quelque chose avec, disons, une application xyz. En général les réponses au lieu de l’aider vont dans le sens inverse :

  • « pourquoi tu fais ça avec xyz ? abcd est beaucoup mieux ! »
  • « oula xyz est trop lent, prends plutôt azerty ! »
  • « quoi ça existe encore xyz, je croyais que c’était plus maintenu, tu devrais pas utiliser ça! »
  • « uiop est beaucoup plus simple à utiliser que xyz, pourquoi tu as choisi cette daube ? »
  • etc. etc.

En général ces « encouragements » (qui partent parfois d’un bon sentiment) sont de plus ponctués d’autant de fôtes d’ortograffes qu’il y a de mots dans la phrase. Dites moi si je me trompe ! Mais en tout cas ça ne répond pas à la question de la personne sur l’utilisation de xyz.

Voilà j’ai encore fait mon papy ronchon, mais que voulez-vous, il y a des choses qui m’agacent !

Ici la question qui était posée était : « Peut-on partager un répertoire entre 2 Raspberry Pi avec Samba ? »

L’architecture Client-Serveur

partage_samba_client_serveurA ma droite le serveur (oui, celui qui a le nœud pap). C’est lui qui propose un service. Ici il vient d’amener un verre (c’est une menthe à l’eau – si, si) au client (celui qui a les lunettes de soleil)…

Si on résume : Le serveur propose un service et le client utilise ce service.

2tierIci nous avons deux Raspberry Pi identiques. Sur l’un nous allons installer le serveur Samba. Ce sera le serveur. Il sera chargé d’offrir un service.

L’autre Raspberry Pi va utiliser le service proposé. Ce sera ici notre client.

Faites entrer les participants

Pour monter cette architecture j’ai utilisé un Raspberry Pi installé sur (enfin, derrière) l’écran 7 pouces officiel (vous le reconnaîtrez à son nom : raspi-7p-officiel) et ajouté au réseau un RasPi qui avait servi il y a quelques jour aux tests de la caméra 8 Mpx. Il est d’ailleurs toujours monté sur le « banc test ».

partage_samba_logo_600px

Cliquez pour agrandir

Sur l’image ci-dessus le Raspberry Pi de gauche (raspi-7p-officiel) est le serveur Samba. Son adresse IP est 192.168.1.230. Le client sera monté sur le Raspberry Pi de droite (son nom est plus classique : raspberrypi). L’adresse du client est 192.168.1.106.

Les appellations raspi1 et raspi2 n’ont rien à voir avec le modèle du Raspberry Pi, ce ne sont que des identifiants pour les repérer dans la suite de l’article.

Remarque : Pour les « encore plus ronchon que moi » (il y en a ?) ne vous étonnez pas de trouver un RasPi avec une adresse en 230 et l’autre en 106. Déjà comme on a un masque à 255.255.255.0 (/24) ils sont dans le même réseau. Les Raspberry Pi « fixes » comme celui qui est monté sur l’écran officiel ont un privilège : j’ai programmé le routeur TP-LINK (non, je n’ai pas de Box) pour que le DHCP attribue toujours la même adresse à ces Raspberry Pi (en fonction de leur adresse MAC) et la plage commence à .230. L’autre est relié en Wifi par une clé USB et il a pris normalement une adresse automatique car son adresse MAC n’est pas connue du routeur. Un Raspberry Pi fixe prend toujours la même adresse quand je le connecte au réseau…

Le cahier des charges

Sur le premier Raspberry Pi

  • Créer un répertoire /home/pi/partage_samba.
  • Mettre un « flag » dans le répertoire (un fichier qui servira à vérifier qu’on a bien accès au répertoire à distance)
  • Installer le serveur Samba sur ce Raspberry Pi.
  • Configurer le serveur Samba pour qu’il partage le répertoire partage_samba
    sous le nom de partage commun.

Sur le deuxième Raspberry Pi

  • Tester le bon fonctionnement du serveur Samba avec un client Samba en vérifiant qu’on peut voir le fichier « flag », créer un dossier…

SI ça fonctionne (si ça ne fonctionne pas, inutile de continuer…)

  • Créer un dossier /home/pi/lien_raspi1
  • Modifier fstab pour que le partage commun soit automatiquement
    monté dans /home/pi/lien_raspi1

Remarque : Dans la logique avant de se lancer dans le montage automatique via fstab , il faudrait déjà vérifier que le partage se monte manuellement avec la commande mount… Je vous laisse chercher un peu comment faire…

 On s’y jette ?

Créer le répertoire de partage et mettre un flag

On va commencer par créer le répertoire qui sera partagé :

mkdir /home/pi/partage_samba

Mettez un flag dans ce répertoire pour pouvoir l’identifier à coup sur :

touch /home/pi/partage_samba/raspi1

serveur_250px

Installer le serveur Samba

On peut maintenant installer le serveur sur le premier Raspberry Pi. Pensez avant tout à faire

sudo apt-get update

sudo apt-get upgrade

pour avoir un système à jour puis installez Samba sur le serveur.

apt-get install samba samba-common-bin

Configurer le partage dans le fichier de configuration

Par sécurité, faites une copie de sauvegarde du fichier de configuration par défaut de Samba (on ne sait jamais..) avant de farfouiller dedans :

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.org

Bon, c’est mon habitude de garder les fichiers originaux avec une extension .org mais rien ne vous empêche de les appeler .old, .back ou… tout ce que vous voulez

Ouvrez le fichier smb.conf

sudo nano /etc/samba/smb.conf

Juste parce que je n’aime pas ce nom (qui me rappelle le boulot work…) je modifie WORKGROUP en MAISON (vous faites comme vous voulez).

Ajouter à la fin du fichier /etc/samba/smb.conf

[commun]
comment = Partage Samba inter RasPi
path = /home/pi/partage_samba
writable=yes
valid users = pi
write list = pi
create mode = 0777
directory mode = 0777
share modes = yes

A noter que le partage s’appelle commun. C’est sous ce nom qu’il apparaîtra sur les autres machines. Je ne rentre pas dans le détail de la config, je vous laisse chercher un peu… Si vous avez envie.

Redémarrer le service samba pour que les modifications apportées au fichier smb.conf soient prises en compte.

sudo service smbd restart

Si tout se passe bien (Raspbian ne renvoie pas de message d’insulte) vous pouvez continuer. Sinon…. cherchez l’erreur ! Pas la peine d’aller plus loin si le serveur ne démarre pas.

Passez le dossier partage_samba en 776

chmod 776 /home/pi/partage_samba

Créez un utilisateur Samba sur ce Raspberry Pi. Je n’ai pas été original, j’ai créé pi avec le login raspberry. Vous ferez certainement mieux 🙂

pi@raspi-7p-officiel:~ $ sudo   smbpasswd   -a   pi
New SMB password:
Retype new SMB password:

Redémarrez samba pour prendre les modifications en compte.

sudo service smbd restart

Il ne faut pas oublier que les droits du système l’emportent sur les droits Samba. Si l’utilisateur Samba a le droit d’écrire (dans Samba) mais que les droits système l’interdisent… il ne pourra pas écrire.

Le premier Raspberry Pi est prêt, on va passer au deuxième.

Configurer l’accès au partage depuis le Raspberry Pi distant

client_600pxÇa fait déjà un bon moment que le client attend… Je vous propose qu’on s’occupe de lui maintenant.

Installer le client Samba sur le deuxième Raspberry Pi

Pour que le serveur… serve à quelque chose, comme dans la vraie vie, il lui faut un client. Pour Samba, le client de base s’appelle smbclient (vous voyez qu’il n’y a pas que moi pour ne pas se fouler quand il faut trouver un nom 😉 ). On va donc commencer par installer ce client sur le RasPi 2.

pi@raspberrypi:~ $ sudo apt-get install smbclient
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Paquets suggérés :
heimdal-clients
Les NOUVEAUX paquets suivants seront installés :  smbclient
0 mis à jour, 1 nouvellement installés, 0 à enlever et 3 non mis à jour.
Il est nécessaire de prendre 304 ko dans les archives.
Après cette opération, 753 ko d'espace disque supplémentaires seront utilisés.
Réception de : 1 http://mirrordirector.raspbian.org/raspbian/ jessie/main smbclient armhf 2:4.2.10+dfsg-0+deb8u2 [304 kB]
304 ko réceptionnés en 6s (49,0 ko/s)
Sélection du paquet smbclient précédemment désélectionné.
(Lecture de la base de données... 127021 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../smbclient_2%3a4.2.10+dfsg-0+deb8u2_armhf.deb ...
Dépaquetage de smbclient (2:4.2.10+dfsg-0+deb8u2) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ...
Paramétrage de smbclient (2:4.2.10+dfsg-0+deb8u2) ...

Connexion au partage avec smbclient

Le partage qui existe sur le RasPi 1 s’appelle commun : on va exécuter smbclient en lui indiquant l’adresse du raspberry Pi serveur Samba ainsi que le nom du partage :

pi@raspberrypi:/etc/samba $ smbclient //192.168.1.230/commun

comme vous vous connectez avec le nom de pi (tiens c’est le même que celui de l’utilisateur Samba que j’ai créé tout à l’heure 🙂 le serveur Samba ne vous demande que le mot de passe de cet utilisateur pour autoriser la connexion (tapez raspberry)

Enter pi's password:
Domain=[MAISON] OS=[Windows 6.1] Server=[Samba 4.2.10-Debian]
smb: \>

On voit que le domaine est bien MAISON (c’est mieux que WORKGROUP, non ?). Le prompt
smb : \>
vous indique que la connexion a été autorisée. Vous allez pouvoir entrer des commandes.

smb: \> ls
.                                   D        0  Wed May 11 19:26:55 2016
..                                  D        0  Wed May 11 19:22:55 2016
raspi1                              N        0  Wed May 11 19:26:55 2016

15273212 blocks of size 1024. 10503608 blocks available

Le ls nous prouve que nous sommes bien connectés au RasPi 1 puisqu’on retrouve notre fichier « flag » appelé raspi1. Pour tester si on a le droit d’écrire, nous allons ajouter un dossier toto (oui, je sais… mais c’est une habitude).

smb: \> mkdir toto
smb: \> ls
.                                   D        0  Wed May 11 19:52:05 2016
..                                  D        0  Wed May 11 19:22:55 2016
raspi1                              N        0  Wed May 11 19:26:55 2016
toto                                D        0  Wed May 11 19:52:05 2016

15273212 blocks of size 1024. 10503604 blocks available
smb: \> cd toto
smb: \toto\>

Tout va bien, le partage est opérationnel  et on peut travailler dedans depuis le deuxième Raspberry Pi. Sortez du client Samba :

smb: \> exit
pi@raspberrypi:~/ $

Montage automatique d’un partage Samba

Pour monter le répertoire partagé « à la mano » la commande (que vous pouvez tester 🙂 )  serait :

 

sudo mount -t cifs -o username=pi,password=raspberry //192.168.1.230/commun /home/pi/lien_raspi1

 

L’inconvénient de cette méthode c’est que lors du redémarrage du RasPi2, le montage est perdu car il est simplement stocké en mémoire.

Nous allons donc informer le système qu’il doit systématiquement monter le dossier partagé sur RasPi1 à chaque démarrage. Ça se passe dans /etc/fstab.

Le fichier fstab (file systems table) est la table des différents systèmes de fichiers sur un ordinateur sous Unix/Linux : il contient une liste des disques utilisés au démarrage et des partitions de ces disques. Pour chaque partition, il indique comment elle sera utilisée et intégrée à l’arborescence du système de fichiers global (c’est-à-dire le point de montage). Il se trouve généralement à /etc/fstab.
Dans les versions récentes d’Unix/Linux, des outils d’administration peuvent automatiquement générer un fichier fstab complet lors de l’installation du système d’exploitation ou proposer une interface graphique pour modifier ce fichier. (Wikipedia)

Merci Kikipedia, on va s’en occuper !

Comme vous l’avez vu avec la commande mount, si vous ne saisissez pas le nom d’utilisateur et son mot de passe, vous ne pouvez pas vous connecter au partage Samba. En mode manuel pas de problème, soit vous saisissez le login/password manuellement, soit vous l’intégrez à la commande mount.

Maintenant imaginons un Raspberry Pi « headless » (pas de clavier, pas d’écran… je ne parle même pas de la souris, accessoire bien inutile en ligne de commande 🙂 ). Alors, hein avec un RasPi headless c’est comment-y que vous saisissez le login/mot de passe ?

Heureusement Tux le manchot a pensé à tout. Il suffit de créer un fichier .smbcredentials et de mettre dedans le login et le mot de passe… Fastoche !

Remarque : Le point devant le nom du fichier signifie que c’est un fichier caché

Sur le Raspi2 créez un fichier /home/pi/.smbcredentials (oui avec nano mais je ne vais pas tout vous re-expliquer à chaque fois, bossez un peu, aussi 🙂 ). Dans le fichier ajoutez ces deux lignes:

username=pi
password=raspberry

Puis donnez au fichier les droits 600. (Si ça ne vous inspire pas je vous conseille un peu de lecture)

Ajout d’un montage dans fstab

Toujours sur le Raspi2 ajouter la ligne suivante à /etc/fstab :

//192.168.1.230/commun  /home/pi/lien_raspi1 cifs  credentials=/home/pi/.smbcredentials,x-systemd.automount,defaults 0 0

Pour tester qu’il n’y a pas d’erreur dans la ligne que vous avez rajoutée à fstab la commande mount -a monte les systèmes de fichiers présents dans fstab :

pi@raspberrypi:~ $ sudo mount -a

Si vous ne vous faites pas insulter par Jessie c’est que ça s’est bien passé. Sinon… cherchez l’erreur que VOUS avez pu faire et ne m’envoyez pas de message incendiaire pour m’insulter et me dire que le tuto « y marche pas » 😉

On va vérifier que maintenant le RasPi2 a bien une liaison avec le serveur (oui je sais il s’en passe des choses parfois étrange dans les bars…)

pi@raspberrypi:~ $ cd lien_raspi1
pi@raspberrypi:~/lien_raspi1 $ ls -al
total 4
drwxrwxr--  3 pi pi    0 mai   11 19:52 .
drwxr-xr-x 21 pi pi 4096 mai   11 21:19 ..
-rw-r--r--  1 pi pi    0 mai   11 19:26 raspi1
drwxrwxrwx  3 pi pi    0 mai   11 21:20 toto
pi@raspberrypi:~/lien_raspi1 $

On retrouve notre fichier raspi1 qui se trouve sur le RasPi1… donc on a bien monté le partage sur /home/pi/lien_raspi1 🙂

Vérification finale

Je vous laisse décortiquer la ligne ajoutée dans fstab. Vous trouverez des liens dans la rubrique Sources.

Allez, on reboote ! Et là, misère de misère, le montage ne se fait pas ! Le répertoire /home/pi/lien_raspi1 reste désespérément vide 🙁

Explication : le RasPi2 était relié au routeur en WiFi et le réseau n’était pas encore en place quand le système voulait monter le partage dans /home/pi/lien_raspi1. Pas de message mais… pas de montage non plus ! dmesg par contre donnait des indications claires sur le problème qui provoquait la « panne » (vous voyez qu’en cherchant un peu on arrive à mettre hors de cause les farfadets, gnomes et autres trolls qui sont censés hanter Linux) :

[    9.652749] FS-Cache: Netfs 'cifs' registered for caching
[    9.653772] Key type cifs.spnego registered
[    9.653866] Key type cifs.idmap registered
[    9.679094] CIFS VFS: Error connecting to socket. Aborting operation.
[    9.680424] CIFS VFS: cifs_mount failed w/return code = -101
[    9.818847] CIFS VFS: Error connecting to socket. Aborting operation.
[    9.824717] CIFS VFS: cifs_mount failed w/return code = -101
[   10.118682] systemd-journald[133]: Received request to flush runtime journal from PID 1
[   10.419502] Adding 102396k swap on /var/swap.  Priority:-1 extents:3 across:1773568k SSFS
[   10.526376] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[   10.526719] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.685480] wlan0: authenticate with c0:4a:00:5a:ca:03
[   10.758366] wlan0: send auth to c0:4a:00:5a:ca:03 (try 1/3)
[   10.760181] wlan0: authenticated
[   10.762347] wlan0: associate with c0:4a:00:5a:ca:03 (try 1/3)
[   10.765989] wlan0: RX AssocResp from c0:4a:00:5a:ca:03 (capab=0x431 status=0 aid=6)
[   10.774647] wlan0: associated
[   10.774937] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready

On voit que quand wlan0 est prêt (dernière ligne) il y a belle lurette que l’erreur CIFS est passée et que notre montage n’a pas été fait ! Ce qui se traduit lorsque vous allez dans le répertoire lien_raspi1 par un répertoire désespérément vide. 🙁

En mettant x-systemd.automount dans les options de la ligne ajoutée à fstab, on indique au système qu’il peut démarrer et que le montage du dossier partagé n’interviendra que lorsque vous y accéderez…

Démarrage normal… accédez au répertoire /home/pi/lien_raspi1 et vous y retrouvez tout ce qu’on s’attend à y trouver :

pi@raspberrypi:~/lien_raspi1 $ ls
raspi1    toto

C’est à dire notre « flag » raspi1 et le répertoire toto créé un peu plus tôt (nan, pas le chien de Mickey !)

Amusez vous, créez des fichiers, supprimez les, créez un répertoire et des fichiers dans ce répertoire etc… tout ça doit fonctionner sans problème.

Bon, et on en fait quoi ?

Alors là… C’est vous qui voyez ! Vous avez un répertoire partagé entre deux machines (mais ce n’est pas limitatif). Chaque RasPi peut écrire dans ce répertoire ou y récupérer des infos. Voilà un bon moyen pour échanger des images, des mesures, tout ce que vous voudrez…

partage_600px

Conclusion

Nous sommes arrivés au bout de cette aventure. Samba est capable de bien d’autres choses et de nombreux tutoriels proposent des solutions (même framboise314). Celui de Pi Home Server dans les sources ci-dessous est très bien fait.

Une fois que vous avez un système qui fonctionne, faites une copie de sauvegarde de votre carte microSD et… amusez vous. Vous ne pouvez rien casser, si vous plantez le RasPi vous refaites la carte à partir de votre image sauvegardée et hop, ça repart !

Plus vous ferez de manips, d’erreurs, d’essais… Plus vous avancerez et plus vous progresserez dans l’utilisation de Linux. Juste un truc de professionnel à ne pas oublier : RTFM 😉

Je n’ai pas la prétention d’avoir réalisé LE partage Samba parfait. Il y a certainement des imperfections que les commentaires ci-dessous vous permettront de rectifier ! Mais bon, ne venez pas me dire qu’avec NFS ç’aurait été plus rapide, plus facile, plus mieux bien…

ohnonnn

Sources

Raspberry Pi : installer Samba

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

9 réflexions au sujet de « Partage Samba entre 2 Raspberry Pi sous Jessie »

  1. JPL

    Merci François pour ce tuto clair, détaillé et plein d’humour comme toujours. C’est pour ça qu’on aime ton blog. 🙂
    Non seulement, je ne te dirais pas que tel outil est mieux, mais je te dirais que j’ai justement besoin d’un outil de ce style, donc cet article tombe à pic.
    Merci.

    Répondre
  2. CrazyCat

    Si je peux me permettre un petit ajout concernant le partage samba: il faut toujours (côté client) monter la racine du répertoire partagé, et pas un sous-répertoire, sans quoi vous ne pouvez que lister les fichiers contenus mais pas les lire. Je me suis fait surprendre une fois comme ça, il m’a fallu du temps pour comprendre le souci 🙂

    Répondre
    1. CrazyCat

      Non non, j’ai eu le gag en me trompant sur le répertoire à monter d’un NAS autorisé pour tout le monde. Si je monte //IP.du.nas/share/subdir/ sur /media/nas/, je ne peux que faire du ls dans /media/nas/, n’importe quelle autre commande qui va réellement attaquer le fichier échoue.
      Si je monte //IP.du.nas/share/, je peux faire ce que je veux dans /media/nas/subdir/.

      Vérifié deux fois à l’insu de mon plein gré 🙂

      Répondre
  3. Ping : Veille technologique Raspberry | Pearltrees

Laisser un commentaire

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

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.