Raspbian Headless

De Wiki LOGre
Aller à la navigation Aller à la recherche
Langue : [[::Raspbian Headless|Français]]

Introduction

Un serveur 'Headless' est un serveur qui n'a ni clavier, ni souris ni écran mais qui va quand même proposer de nombreux services sur un réseau. Raspbian est une distribution à base de Debian conçue pour tourner sur un Raspberry Pi. Cette page vous indique comment installer Rasbian sur le Raspberry Pi et comment ajouter un certain nombre de services, à distance. La partie 'Installation' est spécifique au Raspberry Pi, mais la partie 'Services' pourra également vous être utile pour configurer un serveur basé sur Debian, et possiblement aussi sur Ubuntu.

  • Administration à distance
    • SSH.
  • Web et Bases de Données
    • Apache
    • MariaDB
    • PhpMyAdmin
  • Fichiers
    • FTP
    • Samba
    • NFS
  • Contacts
    • Baïkal
  • Domotique
    • Mosquitto
  • DHCP
    • isc-dhcp-server
  • PXE
    • TFTP-HPA
  • Sonorisation
    • MPD
  • Medias
    • DLNA

Tout n'est pas encore rédigé pour l'instant, et il peut y avoir des erreurs ou des différences suivant les versions utilisées

Contributeurs :

  • Marc BERLIOUX, dernière mise à jour le 06/03/2020.
  • Edgar Bonet

Le système étant installé sur une carte SD, déplacer les données de '/var' vers '/home' (ou autre) peut parfois s'avérer intéressant pour  :

  • Avoir plus de stockage
  • Faciliter les sauvegardes
  • Faciliter les migrations
  • Limiter les écritures sur la carte SD

Pour ce faire, des sections "Déplacement" sont présentes pour certains services. Elles sont indiquées comme optionnelles. Si vous ne souhaitez pas vous éloigner du Filesystem Hierarchy Standard, n'en tenez pas compte.

Prérequis

  • un PC avec accès à Internet et lecteur de cartes micro-SD ;
  • un Raspberry Pi avec alim adaptée ;
  • une carte micro-SD : 4 GB minimum pour installer tous les services, 2 GB peuvent suffire pour un serveur minimal avec très peu de services ;
  • un câble réseau ;
  • un réseau filaire avec DHCP et accès Internet (box, routeur...) ; une connexion directe au PC est possible si celui-ci est configuré pour partager sa connexion Internet avec le Pi.

Installation

La plupart des actions à effectuer se font en ligne de commande. On suppose que votre PC est sous Linux. Si vous utilisez un autre OS, il faudra adapter les commandes.

Préparation de la carte mémoire

Télécharger la dernière image Raspbian Lite :

wget -nc --trust-server-names https://downloads.raspberrypi.org/raspbian_lite_latest

Ceci va récupérer un fichier nommé <date>-raspbian-<version>-lite.zip, avec la date et le nom de la dernière version. L'exemple utilisé dans la suite sera « 2019-04-08-raspbian-stretch-lite.zip ».
Si vous voulez une version plus ancienne, toutes les images « Lite » sont ici : http://downloads.raspberrypi.org/raspbian_lite/images/
Décompresser l'image :

unzip 2019-04-08-raspbian-stretch-lite.zip

Il en résultera un fichier nommé « 2019-04-08-raspbian-stretch-lite.img ».
Insérez la carte micro-SD dans le lecteur de votre ordinateur, repérez son nom de périphérique avec :

lsblk -e 7

Attention : dans la suite nous utilisons « sdf » comme exemple de nom de périphérique, mais pour la commande dd qui suit il est essentiel d'utiliser le nom qui correspond à la carte insérée, sous peine de perte massive de données.
Si des partitions de la carte ont été montées automatiquement, il faut d'abord les démonter. Par exemple, pour une seule partition :

sudo umount /dev/sdf1

Il faut ensuite copier l'image sur la carte :

sudo dd if=2019-04-08-raspbian-stretch-lite.img of=/dev/sdf bs=4M conv=fsync

Ceci va créer deux partitions sur la carte, la partition 'boot' et la partition '/' en ext4. La carte n'est pas à ce stade complètement utilisée.
Le premier service à mettre en marche sur un serveur Headless est bien sûr l'administration à distance au moyen de SSH.
Le serveur SSH est par défaut installé mais pas activé. Pour l'activer, montez la partition de boot de carte SD et créez un fichier 'ssh' à la racine de cette partition :

sudo partprobe /dev/sdf
mkdir raspbian_boot
sudo mount /dev/sdf1 raspbian_boot
sudo touch raspbian_boot/ssh
sudo umount raspbian_boot
rmdir raspbian_boot

Premier démarrage

Mettez la carte dans le Pi, branchez le réseau et alimentez le. Au premier démarrage, le Pi va étendre la partition Ext4 au maximum de la capacité de la carte. Attendez quelques minutes puis découvrez son adresse IP sur votre réseau.
Si c'est votre PC qui fait office de serveur DHCP (cas d'une connexion directe) :

ip neighbor

Si non, il faudra sonder toutes les adresses du réseau local (ici 192.168.1.0/24) avec :

nmap -sn 192.168.1.0/24

ou avec une application comme "Network-Discovery" pour Android si votre smartphone est connecté au réseau en WiFi.
Connectez vous avec (remplacez <address_IP> par l'adresse supposée du Pi) :

ssh -l pi <address_IP>

Le nom d'utilisateur est « pi » et le mot de passe par défaut est « raspberry »
La sécurité veut qu'on change le mot de passe par défaut, n'oublions pas que l'utilisateur pi a tous les droits... Ceci peut être fait avec la commande :

passwd

À partir de là, on a un système prêt à être administré à distance, sur lequel on va pouvoir installer les autres services.

Services

Web

Apache

Installation

Installation du serveur :

sudo apt install apache2

Installation de la documentation :

sudo apt install apache2-doc

Vérification des modules activés :

sudo apachectl -M

À partir de là, vous avez déjà un serveur web fonctionnel accessible à l'adresse http://<address_IP>

HTTPS - SSL

Si vous souhaitez utiliser https au lieu de http, il faut d'abord installer le paquet 'ssl-cert' pour pouvoir avoir un certificat auto-signé (snakeoil..) qui servira au moins pendant les tests, en attendant d'en avoir un certifié par une autorité de certification officielle si besoin, :

sudo apt install ssl-cert

puis activer des modules, :

  • activation du module ssl :
sudo a2enmod ssl
  • activation du module rewrite :
sudo a2enmod rewrite

enfin activer le site en https, :

sudo a2ensite default-ssl.conf

et redémarrer le serveur :

sudo systemctl restart apache2

Vous pouvez maintenant accéder à votre site en HTTPS à l'adresse https://<address_IP>, à condition d'accepter que le certificat ne soit pas garanti par une autorité de certification officielle.

Déplacement (optionnel)

Pour les raisons invoquées plus haut on va déplacer les données de '/var/www' vers '/home/www'.

  • arrêter le serveur :
sudo systemctl stop apache2
  • copier dans /home le dossier /var/www :
sudo rsync -av /var/www /home

remplacer /var/www par /home/www dans les fichiers de configuration, :

sudo vi /etc/apache2/apache2.conf
sudo vi /etc/apache2/sites-available/000-default.conf
sudo vi /etc/apache2/sites-available/default-ssl.conf

et redémarrer le serveur :

sudo systemctl start apache2

MariaDB

Installation

sudo apt install mariadb-server

Déplacement (optionnel)

Pour les raisons invoquées plus haut on va déplacer les données de MariaDB de /var/lib/mysql vers /home/mysql :

  • arrêter le serveur :
sudo systemctl stop mariadb
  • copier le dossier datadir :
sudo rsync -av /var/lib/mysql /home
  • editer le fichier de config du serveur :
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf

dans la section [mysqld], remplacer :

datadir = /var/lib/mysql

par :

datadir = /home/mysql

Depuis un certain temps, systemd a tendance à vouloir protéger le /home d'une utilisation par MariaDB.
Il faut donc contourner cette restriction :

  • editer le fichier mysql.service de systemd :
sudo vi /etc/systemd/system/mysql.service

dans la section [Service], remplacer :

ProtectHome=true

par :

ProtectHome=false
  • Redémarrer le serveur
sudo systemctl daemon-reload
sudo systemctl start mariadb

PhpMyAdmin

Installation

sudo apt install phpmyadmin

utilisateur : phpmyadmin
password : celui qui a été choisi pendant l'installation


Fichiers

VSFTPD

VSFTPD est un serveur FTP simple mais qui a fait ses preuves.

Installation

sudo apt install vsftpd

À peine installé, VSFTPD peut déjà être testé. À ce stade, il permet déjà de télécharger un fichier depuis un dossier utilisateur. Il suffit pour ça de se connecter depuis une machine distante avec les identifiants du compte auquel on souhaite accéder (remplacer <adresse_IP> par l'adresse IP du Raspberry Pi) :

ftp <adresse_IP>

Tapez le nom de l'utilisateur distant (pi), validez puis tapez le mot de passe (raspberry) et validez. On peut ensuite lister les fichiers du compte utilisateur auquel on s'est connecté avec la commande ls ou ls -al et récupérer un fichier avec la commande get. Exemple : on télécharge le fichier caché '.profile' distant et on l'enregistre localement en 'raspbian_profile.txt' :

get .profile raspbian_profile.txt

Tapez bye ou quit pour quitter.

On peut également tester le serveur avec un navigateur sur l'URL ftp://<adresse_IP> pour se connecter de façon 'anonyme' ou avec l'URL ftp://utilisateur@<adresse_IP> pour accéder à un compte particulier.

Le téléchargement de fichier d'un compte utilisateur fonctionne donc 'out-of-the-box', mais pour pouvoir 'uploader' un fichier ou accéder de façon anonyme au serveur, il faut modifier les réglages.

Configuration

Le fichier de configuration unique est /etc/vsftpd.conf. Chaque modification du fichier de configuration ne sera active qu'une fois le serveur FTP redémarré par :

sudo systemctl restart vsftpd

Pour ajouter la possibilité d'uploader des fichiers vers les comptes utilisateurs, il suffit de changer(décommenter) la ligne '#write_enable=YES' en 'write_enable=YES'.

Pour permettre les connexions anonymes, changez l'option 'anonymous_enable=NO' en 'anonymous_enable=YES'.

Déplacement (optionnel)

Par défaut, sous Raspbian, la racine du serveur FTP anonyme est '/srv/ftp'. Pour les mêmes raisons que précédemment, on peut vouloir que cet emplacement soit dans '/home/ftp'. Pour ce faire, il faut :

  • créer le dossier
sudo mkdir /home/ftp
  • l'attribuer au groupe ftp
sudo chown -R root:ftp /home/ftp
  • ajouter la ligne anon_root=/home/ftp au fichier de configuration /etc/vsftpd.conf
  • et bien sûr redémarrer VSFTPD

NFS

NFS est un système de partage de fichiers pour les machines Linux (Unix), un peu comme Samba pour Windows ou AFP/AFS pour Mac.

Installation

sudo apt install nfs-kernel-server -y

On va tout de suite créer un dossier dédié dans /home

sudo mkdir /home/nfs
sudo chmod -R 777 /home/nfs

Configuration

Le fichier de config est /etc/exports

sudo vi /etc/exports

La syntaxe du fichier de config est assez simple. Chaque ligne représente un dossier partagé et ses droits d'accès. Les droits peuvent être restreints à une machine, un réseau, et être autorisés en lecture ou en écriture. Le format : /dossier @IP(Options). Exemples :

/home/nfs 192.168.1.0/24(rw,no_root_squash,no_subtree_check,sync)

Dans l'exemple ci-dessus on partage en lecture écriture le dossier /home/nfs à toutes les machines du réseau 192.168.1.0, netmask 255.255.255.0.

On relance le service une fois les modifications apportées au fichier de configuration :

sudo service nfs-kernel-server restart

Pour plus d'information sur la configuration des partages NFS :

man exports

Utilisation

Pour profiter de ce partage, on va le 'monter' depuis une machine Linux distante. Il faut pour cela avoir installé, sur la machine Linux cliente, le paquet, :

sudo apt install nfs-common

créé un point de montage, :

mkdir mntnfs

et enfin on monte le dossier par, :

sudo mount 192.168.1.101:/home/nfs mntnfs/

si notre Raspberry Pi a comme adresse 192.168.1.101, bien sûr..

Réseau

DHCP

Un serveur DHCP est celui qui fournit les adresses IP aux autres machines du réseau. Il peut fournir aussi d'autres informations, comme l'adresse de la passerelle vers l'Internet, les adresses des serveurs de noms DNS, etc...

Adresse IP fixe

Par défaut, le Raspberry Pi est configuré pour obtenir une adresse IP automatiquement depuis un serveur DHCP. S'il devient celui qui fournit les adresses sur le réseau, il ne lui sera plus possible d'en obtenir une lui-même. Il faut donc lui attribuer tout de suite une adresse IP fixe. Pour cela, modifier le fichier /etc/network/interfaces

sudo nano /etc/network/interfaces

On ajoutera des lignes qui ressemblent à celles-ci :

auto eth0
iface eth0 inet static
      address 192.168.1.253
      netmask 255.255.255.0
      broadcast 192.168.1.255
      network 192.168.1.0

Dans l'exemple ci-dessus, on a attribué à l'interface Ethernet du Raspberry Pi l'adresse fixe : 192.168.1.253 sur le réseau 192.168.1.0.

Après avoir bien vérifié ce fichier, pour tester la modification et prendre en compte cette nouvelle adresse, le mieux est de rebooter, :

sudo reboot

et ensuite, attendre un peu et se reconnecter au Raspberry Pi par ssh sur cette adresse :

ssh -l pi 192.168.1.253

Si vous arrivez à vous connecter, c'est que le Pi a bien pris en compte son adresse fixe.

Installation

L'installation du serveur est très simple, il faut juste installer un paquet :

sudo apt install isc-dhcp-server

Configuration

Le serveur DHCP installé inclut plusieurs fichiers de configurations

  • /etc/default/isc-dhcp-server
  • /etc/dhcp/dhcpd.conf
  • /etc/dhcp/dhcpd6.conf

On ne va pour l'instant utiliser que de l'IPv4, donc on va ignorer le troisième.

Commençons par éditer le fichier par défaut :

sudo nano /etc/default/isc-dhcp-server

on le modifiera pour avoir la ligne :

INTERFACESv4="eth0"

Puis on va modifier le fichier du serveur DHCP pour l'IPv4

sudo nano /etc/dhcp/dhcpd.conf

Pour une configuration simple, ce fichier comporte 3 types d'éléments de configuration :

  • ceux communs à tous les clients
  • ceux concernant un sous-réseau particulier (subnet)
  • ceux concernant une machine particulière (host)

Les éléments de configuration générale, ou ceux communs à tous les clients sont mis en vrac au début du fichier. Ceux concernant un sous-réseau seront dans une section 'subnet'. Ceux concernant une machine particulière seront dans une section 'host'. Voici un exemple de fichier de configuration /etc/dhcp/dhcpd.conf :

default-lease-time 43200;
max-lease-time 86400;
ddns-update-style none;
authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.199;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.253;
  option domain-name-servers 212.27.40.240, 212.27.40.241;
}

host serveur1 {
  hardware ethernet 00:11:22:33:44:55;
  fixed-address 192.168.1.200;
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.253;
  option domain-name-servers 212.27.40.240, 212.27.40.241;
}