Ubuntu : Installation et dépannage de Samba

Suite à l’installation d’Ubuntu 20.04, sans utiliser la mise à jour afin de repartir d’une situation propre, ce qu’il est bon de faire de temps en temps (par exemple à chaque version LTS), j’ai du reconfigurer le service de partage de fichiers SAMBA, et j’ai rencontré quelques difficultés.

J’ai par la même occasion appris pas mal de choses, et c’est l’objet de cet article, afin d’en garder une trace et de partager cette expérience.

En fait tout est parti du besoin de partager un répertoire entre une machine virtuelle (voir l’article KVM pour remplacer Virtualbox) et la machine hôte, soit mon PC. Pour ce faire, le plus simple est d’installer Samba, puisque qu’une VM peut aussi bien tourner sous Linux que sur Windows.

On peut choisir de partager le dossier en mode graphique, ou en mode commande. J’ai d’abord choisit le mode commande, et tout à fonctionné immédiatement. Et puis pour bien comprendre comment tout cela marchait, j’ai voulu essayer le mode graphique, et c’est là que « j’ai tout cassé »… 😉 Revoyons tout cela depuis le début.

Partage dans Paramètres d’Ubuntu

J’avais d’abord regardé du côté des paramètres système et de l’option « Partage » en me disant que c’était peut-être encore le plus simple :

Mais après quelques recherches, il ne s’agit ici que de partage « multimédia », supportant le protocole DLNA, soit les vidéos, la musique et les images principalement, plus le partage de l’écran.

Ce n’est donc pas la bonne piste, et on en revient à Samba, le partage de fichiers compatible Windows, utilisant le protocole SMB de Microsoft.

Installer Samba en mode commande

À priori, tout est très simple, et parfaitement expliqué sur ce tutoriel proposé par Ubuntu. Il suffit de le suivre pas à pas, et le partage a fonctionné immédiatement. En résumé, on installe samba :

sudo apt update
sudo apt install samba

Puis on déclare le dossier que l’on souhaite partager dans le fichier de configuration de samba en l’éditant avec vi ou gedit :

sudo vi /etc/samba/smb.conf

Puis en y ajoutant ceci à la fin (dans mon cas) :

[Public]
comment = Samba on PASCAL-SH87R
path = /home/pascal/Public
read only = no
browsable = yes

Puis on définit un mot de passe Samba pour le compte utilisateur souhaité (Samba n’utilise pas les mots de passe du système Linux).

sudo smbpasswd -a pascal

Ce compte doit par contre exister sur le système, sinon il ne sera pas sauvegardé (erreur « Failed to add entry for user xxx »).

Il faut ensuite redémarrer le service, et ajouter la règle au pare-feu :

sudo systemctl restart smbd
sudo ufw allow samba

Concernant le pare-feu, la commande ci-dessus ajoute les règles suivantes :

137,138/udp (Samba) ALLOW IN Anywhere
139,445/tcp (Samba) ALLOW IN Anywhere

Et voilà, le partage doit à présent fonctionner, je peux lancer ma VM, aller dans « Autres emplacements » du gestionnaire de fichiers, et y trouver la machine hôte (mon PC), et accéder au répertoire Public.

Comme il arrive que le « browsing réseau » ne fonctionne pas toujours très bien (héritage de MS et d’un mécanisme d’annonce peu fiable), je peux aussi y accéder en entrant directement l’adresse IP de la machine hôte. Sur le PC, il faut d’abord repérer l’adresse correspondant à l’interface de KVM, à savoir virbr0 :

$ ip addr show | grep virbr0
3: virbr0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Il s’agit donc ici de l’adresse 192.168.122.1 : dans la VM on entre donc cette adresse si on ne voit pas le PC dans le voisinage réseau :

Accès en utilisant l’adresse IP de la machine hôte

Installer Samba en mode graphique

Tout fonctionnait avec l’installation manuelle, j’ai tout de même voulu tout recommencer en mode graphique. J’ai donc désinstallé samba :

sudo apt remove samba
sudo apt purge samba

J’ai même été supprimer (renommer en fait) le fichier /etc/samba/smb.conf car il était toujours présent. Et puis je suis allé dans Nautilus, click droit sur le dossier Public, onglet Partage réseau local, et j’ai coché la case « Partager ».

Ubuntu vous informe alors que le service de partage n’est pas installé, et vous propose de le faire pour vous. Je choisis d’installer le service :

Il s’agit bien de samba, je confirme une dernière fois, et l’installation démarre, jusque là tout va bien et l’on se dit que tout va pouvoir être fait sans entrer une seule ligne de commande :

Sauf que cette fenêtre ne va jamais se fermer, l’installation ne se termine pas proprement, et je dois fermer la fenêtre manuellement. C’est peut-être du au « apt purge » que j’ai fait précédemment, je n’en sais rien. Toujours est-il qu’à ce stade, le service samba n’est pas installé correctement, et que même avec une désinstallation puis réinstallation en mode commande, le service ne démarre plus, ce que je vérifie avec la commande sudo systemctl status smbd :

smbd.service: Failed with result ‘exit-code’ – Failed to start Samba SMB Daemon.

J’ai beau recommencer, redémarrer le PC, rechercher cette erreur sur internet, impossible de résoudre le problème, ce qui commence à m’inquiéter. Je remarque tout de même que le fichier /etc/samba/smb.conf n’existe pas, je renomme alors celui que j’avais sauvegardé, en retirant ce que j’y avais ajouté (sinon il y en a un de fourni dans /usr/share/samba).

Première commande utile de trouvée sur le net: testparm vous permet de tester la validité de votre fichier /etc/samba/smb.conf :

pascal$ testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Cette commande est bien pratique, elle vous confirme que le service (smbd) va correctement charger le fichier. Cela élimine déjà une cause possible d’erreur au démarrage du service, sans pour autant vous garantir que le service va se charger et fonctionner.

Et comme c’est ce qui arrive, la prochaine étape est d’augmenter le niveau de log et d’observer ce qui s’affiche au démarrage du service. J’édite le fichier /etc/var/smb.conf et j’y ajoute la ligne « log level = 3 » :

#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
   log file = /var/log/samba/log.%m
   log level = 3

J’ouvre alors deux terminaux, et dans le premier je tape tail -f /var/log/samba/log.smbd pour surveiller le fichier de log en temps réel. Dans le second, je relance le service avec un sudo systemctl restart smbd. Et là je vois enfin un message intéressant :

[2020/06/07 18:41:29.682187, 0] ../../source3/smbd/server.c:1775(main)
smbd version 4.11.6-Ubuntu started.
Copyright Andrew Tridgell and the Samba Team 1992-2019
[2020/06/07 18:41:29.682527, 1] ../../lib/util/util.c:356(directory_create_or_exist)
directory_create_or_exist: mkdir failed on directory /var/lib/samba/private/msg.sock: Aucun fichier ou dossier de ce type

Le service échoue à créer le répertoire private qui après vérification n’existe effectivement pas sous /var/lib/samba. Re-recherche sur internet, et ne trouvant pas grand chose, je décide de créer le répertoire private à la main : sudo mkdir /var/lib/samba/private). Je croise les doigts et redémarre le service et Ouf ! le service démarre enfin :

Le service est enfin démarré et fonctionnel !

Voilà, tout cela m’a permis d’en savoir un peu plus sur le service samba, et surtout comment investiguer un problème. 😎 J’ai aussi noté que la configuration du pare-feu est une chose que j’oubliais assez facilement quand j’installais samba : je vais essayer de m’en souvenir dorénavant.

J’ai re-testé le mode graphique dans une VM, l’installation de samba a échoué avec un message d’erreur à propos de dépendances non satisfaites, alors que la commande apt a parfaitement fonctionné…

Conclusion : rien ne vaut la bonne vieille ligne de commande ! 😉

Laisser un commentaire

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