Wiki Root66

Le Wiki de Root66, tuto, infos et astuces

Outils pour utilisateurs

Outils du site


installer_un_serveur_avec_raspberry_pi

Ici commence une série de tutoriels dont le but est d'installer un serveur à domicile sur un Raspberry Pi 2. Un serveur à domicile, pourquoi ? Pour héberger ses données à l'abri des curieux non désirés, être maître de ses propres affaires : pour avoir un serveur web, un blog, un cloud, un serveur de fichiers, et tout ce que vous voudrez. Et pi, un Rasberry Pi, ça peut faire aussi de la domotique…

Et pourquoi un Raspberry ? Un Raspberry est un petit ordinateur sur une carte au format carte bancaire. À partir de votre PC, on y installe le système d'exploitation Raspbian, dérivé de Debian, une distribution Linux. Cela peut faire un serveur à très faible consommation, sans ventilateur (ce qui évite les dépôts de poussière) et sans aucun bruit : un Raspberry Pi 2 consomme au repos 1,6 W, et il faudra juste y ajouter un disque dur. L'activité du serveur augmentera un peu la consommation, mais ça sera encore très très économique ! Et puis, comme il est très petit, vous pourrez le remiser où vous voudrez : grenier, sous-sol, placard, tiroir : ça chauffe pas et ça prend pas de place !

Dans ce tutoriel, quasiment l'ensemble des instructions sont réalisées par des commandes dans un terminal ou une console ; cela permet de la souplesse et de la puissance, et n'exige pas un moniteur et une interface graphique ; il se peut que cela vous semble un peu difficile au début, ou trop détaillé, mais c'est fait volontairement, car cela permet de familiariser avec les commandes utilisées ceux qui n'en ont pas une très grande pratique. Et une fois ce tutoriel exécuté, vous saurez manipuler toutes ces commandes et vous pourrez continuer le pilotage de votre Raspberry, et vous lancer sans crainte dans celui d'un système Linux !

Nous allons commencer cette série de billets par installer le Raspberry Pi. D'autres billets suivront, selon les avancées de ce projet.

Ce qu'il vous faut :

  • votre PC : le mien est équipé de Debian Stretch, mais ça peut être n'importe quel système GNU/Linux ; pour les Windoziens, je ne sais pas faire ;
  • un Raspberry Pi 2 complet : carte, boîtier, alimentation, carte microSD classe 10 de 4 à 8 Go et puis, uniquement pour le premier démarrage, un câble HDMI, un moniteur compatible HDMI, un clavier et une souris ; car ensuite, il sera piloté par le réseau à partir de votre PC ;
  • un disque dur USB avec une alimentation indépendante du Raspberry ;
  • un réseau local, donnant accès à Internet pour le PC et le Raspberry.

1 Installation de Raspbian Jessie sur votre Raspberry Pi 2

Téléchargez l'image de Raspbian sur le site original https://www.raspberrypi.org/downloads/raspbian/

Choisissez la dernière version disponible. Dans mon cas, j'ai téléchargé 2016-03-18-raspbian-jessie.zip

1.1 Comment passer des commandes dans un terminal ?

Dans votre propre compte utilisateur, ouvrez un terminal, qui vous permettra d'exécuter toutes les commandes de ce tutoriel. Vous êtes alors en mode utilisateur. Ce terminal affiche donc par défaut l'invite de commande sous la forme :

votre_identifiant_utilisateur@nom_de_votre_machine:~$

Passez en mode administrateur par la commande su (su pour SuperUtilisateur, synonyme de administrateur) :

et entrez le mot de passe administrateur de votre PC, vous obtenez l'invite :

votre_identifiant_utilisateur@nom_de_votre_machine:~#

Pour sortir du mode administrateur, entrez :

# exit

Ou bien, vous pouvez aussi, alors que vous êtes en mode utilisateur, exécuter une commande en mode administrateur en tapant :

$ sudo commande

et en tapant ensuite votre mot de passe utilisateur.

Notez donc que dans toute la suite de ce tutoriel, une commande à passer en mode utilisateur sera écrite :

$ commande

et, à passer en mode administrateur, sera écrite :

# commande

et vous entrerez les commandes dans la même ligne, juste après le « $ » ou le « # ».

Dans le reste de ce tutoriel, les commandes à entrer seront précédées seulement du « # » pour indiquer qu'elles sont en mode administrateur, ou du « $ » en mode utilisateur.

Par exemple, vérifiez la signature du fichier .zip :

# sha1sum /chemin_de_votre_image/image_de_raspbian_jessie.zip

ou bien :

$ sudo sha1sum /chemin_de_votre_image/image_de_raspbian_jessie.zip

et comparez la signature obtenue avec celle donnée sur la même page de ce site de téléchargement : les deux signatures doivent être absolument identiques.

Si vous ne comprenez pas comment fonctionne une commande, utilisez la commande man (pour manuel) (vous pouvez ouvrir plusieurs terminaux à la fois) ; par exemple :

$ man pwd

qui donne le manuel d'utilisation de la commande pwd.

1.2 Copie de l'image de Raspbian dans votre carte microSD

Insérez votre carte microSD dans un lecteur de cartes et connectez-le à votre PC.

Effacez toutes les partitions sur cette carte : faites très attention à bien identifier la carte, et à ne pas la confondre avec un de vos disques durs de votre PC !

  • soit en utilisant l'outil graphique gparted (c'est le plus simple) ;
  • soit par l'utilitaire fdisk :

# fdisk /dev/sdX

X étant le numéro de votre carte SD. Dans ce cas, effacez toutes les partitions une par une par la commande d, enregistrez les changements par la commande w, vérifiez le résultat par la commande p, puis quittez fdisk.

Décompressez le fichier téléchargé .zip, cela donne un fichier image .img

Installez cette image de Raspbian sur la carte SD (cela prend quelques minutes) :

# dd if=/le_chemin_complet/image_de_raspbian.img of=/dev/sdX

qui retourne (pour la Raspbian Jessie 2016-03-18) :

7878656+0 enregistrements lus 7878656+0 enregistrements écrits 4033871872 bytes (4,0 GB, 3,8 GiB) copied, 3481,03 s, 1,2 MB/s

(durée : environ 1 heure)

Vérifiez que l'image est bien installée avec l'outil fdisk :

# fdisk /dev/sdX

puis, par la commande p, vous devez voir 2 partitions sdX (X étant le numéro de votre carte), avec ce type d'affichage :

Périphérique Amorçage Début Fin Secteurs Taille Id Type

/dev/sdX 18192 131071 122880 60M c W95 FAT32 (LBA)

/dev/sdX2 131072 7878655 7747584 3,7G 83 Linux

sdX1 est la partition de boot contenant des fichiers de démarrage ;

sdX2 est la partition système de Raspbian.

Retirez la carte microSD de votre PC et insérez-la dans votre Raspberry Pi 2.

Branchez votre Raspberry :

  • câble HDMI connecté sur un moniteur ;
  • clavier et souris USB connectés ;
  • câble réseau Ethernet connecté ;
  • et enfin le câble d'alimentation.

Votre Rasperry PI 2 va démarrer et afficher directement, après un peu de temps, l'interface graphique sur l'écran. Notez que si vous sortez de cette interface par le menu Shutdown - Logout, vous arrivez dans le gestionnaire de session LXDE, et vous pourrez y revenir par l'identifiant « pi » et le mot de passe « raspberry » ( attention, le clavier est configuré par défaut en qwerty ! ).

2 Premières configurations

Vous pourrez faire toutes les opérations de configuration dans cette interface graphique avec l'outil Préférences - Raspberry Pi Configuration ; par la suite, comme vous destinez votre Raspberry au métier de serveur, vous pourrez le configurer dans un terminal, en ligne de commande, par le réseau, et c'est ce que vous utiliserez tout le temps. Vous pourrez alors le remiser dans un petit coin, raccordé uniquement par ses 2 câbles d'alimentation et de réseau, sans clavier ni souris ni moniteur. L'interface graphique ne sera pas utilisée, le Raspberry ne consommera ni puissance ni mémoire inutiles, et vous le commanderez avec une connexion sécurisée SSH par le réseau.

Vous pouvez aussi accéder à l'une des quatre consoles de Linux : tapez CTRL-ALT-F1 (ou F2 à F4), la console s'affiche et vous êtes directement dans le compte utilisateur pi (avec l'invite $). Ces 4 consoles permettent de faire exactement la même chose qu'un terminal et de la même manière, avec les mêmes commandes.

Vérifiez que vous êtes bien dans le répertoire /home/pi par la commande :

$ pwd

qui retourne :

/home/pi

IMPORTANT : avec le Raspberry, on ne peut pas avoir accès à une console en mode administrateur ( invite # ). Dans une console, l'invite sera donc toujours $, et il faudra taper sudo devant chaque commande nécessitant un accès au système en mode administrateur ( sinon, ce n'est pas nécessaire ).

Configurez le Raspberry en entrant :

$ sudo raspi-config

et procédez aux premières configurations du système : la navigation dans cet outil se fait avec les touches Tabulation et Flèches, le cochage par Espace et la sélection par Entrée :

  • Expand Filesystem : si vous avez une carte SD de taille supérieure à 4 Go, cela permet d'étendre la partition sdX2 à toute la place disponible (ATTENTION, si vous la sélectionnez, cela se fait tout de suite sans confirmation ! Sinon, cela pourra être fait plus tard ) ;
  • Change User Password : remplacez IMPÉRATIVEMENT le mot de passe par défaut « raspberry » par un vrai mot de passe vraiment solide, pour ce serveur qui sera directement exposé sur Internet ;
  • Boot Options : sélectionnez B1 Console pour une utilisation en serveur ;
  • Internationalisation Options - Change Locale : cochez, en plus de en_GB.UTF-8 UTF8, fr_FR.UTF-8 UTF8; puis celle-ci par défaut ;
  • Internationalisation Options - Change Timezone : sélectionnez Europe puis Paris ;
  • Internationalisation Options - Change Keyboard Layout : sélectionnez Generic 105-key (Intl) PC, puis Other, French, French pour un clavier standard Azerty, puis The default pour la touche AltGr et No Compose key pour la touche éponyme, et enfin No pour Control-Alt-Backspace (attention, il faut qu'un clavier soit connecté pour configurer le clavier !) ;
  • Advanced Options - Hostname : tapez le nom de votre serveur, par exemple « framboise » ;
  • Advanced Options - Memory Split : ne changez rien, ou mettez seulement 16 Mo ; minimal : 4 Mo ;
  • Advanced Options - SSH : validez la connexion SSH pour dialoguer avec votre Raspberry en toute sécurité.

Puis sortez de l'outil de configuration.

Redémarrez votre Raspberry :

$ sudo reboot

Votre Raspberry démarre et affiche la console tty1 ; reconnectez-vous sur l'utilisateur pi avec le nouveau mot de passe que vous avez défini.

3 Installation du disque dur externe

Votre Raspberry peut parfaitement fonctionner avec la carte SD telle qu'elle est. Cependant, cette carte va être soumise à de très fréquents accès en écriture, soit pour les mises à jour du système, soit pour les données que vous y mettrez. Pour une carte SD, le nombre d'écritures sur un secteur donné est limité, beaucoup plus que pour un disque dur. La carte risque alors de « vieillir » plus vite et de tomber en panne plus tôt. L'idée est donc de transférer le système et les données sur un disque dur USB externe, qui sera connecté sur l'un des ports USB du Raspberry et qui donnera à la fois plus de fiabilité et plus de place ; vous pourrez même y ajouter une partition d'échange. La carte SD ne servira alors plus qu'à démarrer, grâce uniquement à sa partition /dev/mmcblk0p1 de 56 Mo.

Voyez aussi le très bon article https://www.framboise314.fr/booter-le-raspberry-pi-sur-un-disque-dur-usb/ qui explique clairement comment fonctionne le démarrage du Raspberry sur la carte SD et comment il va pouvoir démarrer sur le disque dur.

ATTENTION : votre disque dur doit avoir sa propre alimentation car le Rasberry ne peut pas lui fournir assez de courant par le port USB. Donc utilisez un disque avec une alimentation dédiée, ou utilisez un hub USB, ou encore utilisez un dock pour disque dur.

L'état actuel du système est donné par la commande :

$ sudo fdisk -l

qui affiche tous les disques ou cartes SD et leurs partitions, montés ou non montés ( même les ram disks ).

Le seul disque actuellement présent est donc la carte SD, identifiée par /dev/mmcblk0, qui a 2 partitions :

  • /dev/mmcblk0p1 de 60 Mo ;
  • /dev/mmcblk0p2 de 3,7 Go.

Entrez la commande :

$ sudo tail -f /var/log/messages

qui affiche les événements sur le système au moment où ils se produisent.

Connectez votre disque dur externe sur un port USB du Raspberry ; le disque est alors reconnu sous le nom sda et la console affiche :

\[sda] Attached SCSI disk

Arrêtez la commande tail en tapant : CTRL-C

Entrez la commande :

$ sudo fdisk -l

qui affiche les paramètres de la carte SD avec ses deux partitions et ceux du disque dur avec ses partitions, si ce disque en a déjà.

3.1 Partitionnement du disque dur

Ordinairement, on utilise sur un disque dur une table de partitions de type MSDOS, qui a des limitations notoires, par exemple de ne pouvoir avoir que 3 partitions primaires, et une partition étendue, dans laquelle on crée des partitions logiques. Il existe maintenant d'autres tables de partitionnement, dont la table GPT, qui remplace avantageusement MSDOS, car elle permet de gérer de plus gros disques est plus souple et plus sûr du fait de la redondances de certaines informations (voir https://fr.wikipedia.org/wiki/GUID_Partition_Table).

Voyez aussi https://www.framboise314.fr/donnez-de-lespace-a-votre-framboise314-un-disque-dur-pour-le-raspberry-pi/ qui donne beaucoup de détails.

Vous pouvez procéder soit avec l'utilitaire fdisk et le Raspberry, soit avec l'outil graphique gparted en connectant ce disque à votre PC. Les partitions à créer s'appelleront sdX1, sdX2 et sdX3, X étant la lettre de votre disque dur. FAITES TRÈS ATTENTION à ne pas confondre ce disque avec les autres disques de votre PC, car vous risquez de détruire votre système ou vos données ; normalement, il est attribué au dernier disque connecté la lettre suivante, dans l'ordre : sda, puis sdb, puis sdc, etc.

Note : Certains anciennes versions de fdisk ne gèrent pas GPT. À la place, on peut utiliser de nouveaux outils comme gdisk, parted ou son interface graphique gparted.

  • Partitionnement avec fdisk et votre Raspberry :

Supprimez d'abord toutes les anciennes partitions, et créez 3 partitions :

- sda1 : partition de 20 Go en ext4 pour votre système, ce qui sera amplement suffisant, et permettra de la sauvegarder facilement ;

- sda2 : partition swap de 1Go ;

- sda3 : partition de 5 Go en ext4 pour la partition /home, pour isoler les données du système.

Formatez les nouvelles partitions par les commandes :

- pour la partition système sda1 en ext4 : $ sudo mkfs.ext4 /dev/sda1

- pour la partition swap : $ sudo mkswap /dev/sda2

- pour la partition home sda3 en ext4 : $ sudo mkfs.ext4 /dev/sda3

  • Partitionnement avec gparted et votre PC : connectez le disque à votre PC et créez les partitions comme ci-dessus.

Il restera probablement beaucoup de place sur ce disque, où vous pourrez ajouter d'autres partitions pour les données de tous les serveurs (web, fichiers, mail, cloud, etc.) que vous voudrez créer. Si besoin, vous créerez une quatrième partition (primaire), qui sera alors une partition étendue, à l'intérieur de laquelle vous pourrez créer des partitions logiques (le formatage d'un disque avec une table de partition au format DOS n'autorise à créer que 4 partitions primaires).

3.2 Copie du système Raspbian sur le disque dur

Avec le disque dur connecté sur le port USB du Raspberry, copiez la partition système de la carte SD dans la partition sda1 du disque dur avec la commande dd (cela prend quelques minutes) :

$ sudo dd if=/dev/mmcblk0p2 of=/dev/sda1

Vous obtenez un résultat du genre suivant :

7747584+0 enregistrements lus

7747584+0 enregistrements écrits

3966763008 octets (4,0 GB) copiés, 523,857 s, 7,6 MB/s

Vérifiez le contenu de la copie : créez un répertoire (dans la racine /) et montez-y la partition sda1 du disque:

$ sudo mkdir /partition_dd_externe_sda1

$ sudo mount -t ext4 /dev/sda1 /partition_dd_externe_sda1

La commande :

$ df

montre que la racine du système (/) est sur /dev/root (dans la partition mmcblk0p2 de la carte SD) et que la partition sda1 du disque est montée sur le répertoire /partition_dd_externe_sda1

$ ls -l /

affiche l'arborescence de la racine / sur la partition mmcblk0p2.

$ ls -l /partition_dd_externe_sda1

affiche l'arborescence de la copie de la racine sur sda1.

Les deux arborescences sont normalement les mêmes, donc on peut supposer que la copie s'est globalement bien passée (pour autant que cette vérification soit suffisamment pertinente).

$ df

montre aussi que la racine / (sur /dev/root) et le répertoire /partition_dd_externe_sda1 (sur /dev/sda1) ont le même nombre de blocs, donc que la copie est correcte.

3.3 Configuration du démarrage sur le disque dur

Il reste maintenant à configurer le système pour démarrer sur sda1, monter la partition sda1 sur la racine / du système de fichiers et monter la partition sda3 sur le répertoire /home :

  • Démarrage sur sda1 : modifiez le fichier de démarrage cmdline.txt avec le petit éditeur de texte nano :

$ sudo nano /boot/cmdline.txt

et remplacez la partie root=/dev/mmcblk0p2 par root=/dev/sda1

  • Montage automatique des partitions sda1 et sda3 :

$ sudo nano /partition_dd_externe_sda1/etc/fstab

et commentez-y la ligne suivante, avec un caractère # en début de ligne :

/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

puis ajoutez les lignes:

/dev/sda1 / ext4 defaults,noatime 0 1

/dev/sda3 /home ext4 defaults 0 2

Avant de redémarrer, il est judicieux de clarifier l'installation, car il y a actuellement un répertoire /home/pi sur sda1, qui deviendra inutile quand sda3 sera monté sur /home, et dans lequel il devra y avoir le répertoire pi.

Renommez le répertoire /home de sda1 :

$ sudo mv /home /home_origin

Copiez le contenu de /home_origin dans sda3 (création du répertoire de montage, montage de sda3, copie des fichiers, rétablissement des utilisateur/groupe ) :

$ sudo mkdir /partition_dd_externe_sda3

$ sudo mount -t ext4 /dev/sda3 /partition_dd_externe_sda3

$ sudo cp -R /home_origin/pi /partition_dd_externe_sda3/

$ sudo chown -R pi:pi /partition_dd_externe_sda3/pi

Maintenant, redémarrez :

$ sudo reboot

  • Expansion du système de fichiers de sda1

Il y a une dernière chose à faire : l'installation de Raspbian sur la carte SD n'avait copié qu'environ 3,7 Go sur la carte. Maintenant que la partition sda1 fait 20 Go, le système de fichiers n'occupe qu'environ 1/5 de la partition ; il faut donc l'étendre à toute la partition, par :

$ sudo resize2fs /dev/sda1

Vérifiez cela par :

$ df

La ligne /dev/root affiche maintenant environ 2 millions de blocs de 1 ko, ce qui fait environ 20 Go, et le système n'utilise que 18 % de la partition.

4 Configuration réseau

Comme vous allez créer un serveur, vous devez lui attribuer une adresse IP fixe à l'intérieur de votre réseau local (derrière votre box Internet ou votre routeur). Configurez la connexion réseau en éditant le fichier /etc/network/interfaces comme dans l'exemple qui suit, et en commentant toutes les autres lignes (avec un caractère # en début de ligne) à partir de « auto lo » ; on va supposer ici que l'adresse IP du réseau est 192.168.1.0, la passerelle 192.168.1.1 et l'adresse du Raspberry 192.168.1.5) :

$ sudo nano /etc/network/interfaces

auto lo

iface lo inet loopback

iface eth0 inet static

address 192.168.1.5

gateway 192.168.1.1

netmask 255.255.255.0

Branchez un câble Ethernet entre le Raspberry et votre routeur (connecteurs de type RJ45) ; la connexion réseau est reconnue automatiquement.

Pour vérifier la connexion avec le routeur :

$ ping 192.168.1.1

Pour vérifier la connexion avec un site web, par exemple celui du site de nouvelles Da Linux French Page :

$ ping linuxfr.org

5 Installation de la connexion sécurisée SSH

(voir aussi https://doc.ubuntu-fr.org/ssh)

Une fois que votre Raspberry sera installé dans un petit coin, vous devrez le commander à distance ; le mieux est de le faire par une connexion filaire avec le protocole sécurisé SSH, plutôt qu'une connexion Wifi, qui est moins sûre.

5.1 Configuration de la connexion

Dans la console de votre Raspberry :

$ sudo raspi-config

- Advanced Options - SSH : validez la connexion SSH, pour dialoguer avec votre Raspberry en toute sécurité

puis vérifiez que le serveur openssh-server est installé dans votre Raspberry :

$ ssh -V

qui répond:

OpenSSH_6.7p1 Raspbian…

sinon, installez-le par: $ sudo apt-get install openssh-server

Dans un terminal de votre PC (côté client), installez le paquet openssh-client :

# apt-get install openssh-client

ou

$ sudo apt-get install openssh-client

5.2 Première connexion SSH

À partir de votre PC (ici, je l'ai nommé « monPC » ), dans votre compte habituel (ici, je l'ai appelé « moi »), lancez une connexion SSH sur le compte pi du Raspberry (l'adresse IP du Raspberry étant 192.168.1.5) :

moi@monPC:~$ ssh pi@192.168.1.5

À la question « Are you sure to want to continue connecting », répondez « yes », puis entrez le mot de passe du compte utilisateur pi; vous êtes alors connecté sur 192.168.1.5, avec l'invite :

pi@192.168.1.5 ~ $

Si la commande ssh retourne un message du genre :

« Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the ECDSA key sent by the remote host is

SHA256:dkkm42MO4W+aLaU2q7EX8pNjd+hJUKk4lBYK9QWjZ0o.

Please contact your system administrator.

Add correct host key in /home/moi/.ssh/known_hosts to get rid of this message.

Offending ECDSA key in /home/moi/.ssh/known_hosts:8

remove with:

ssh-keygen -f “/home/moi/.ssh/known_hosts” -R 192.168.1.5

ECDSA host key for 192.168.1.5 has changed and you have requested strict checking.

Host key verification failed. »

Alors entrez donc la commande indiquée :

moi@monPC:~$ ssh-keygen -f “/home/moi/.ssh/known_hosts” -R 192.168.1.5

(avec le nom de votre compte, pas « moi », évidemment) ; cela retourne :

« Host 192.168.1.5 found: line 9

/home/moi/.ssh/known_hosts updated.

Original contents retained as /home/moi/.ssh/known_hosts.old »

Puis tentez une autre commande de connexion :

$ ssh pi@192.168.1.5

qui retourne :

« The authenticity of host '192.168.1.5 (192.168.1.5)' can't be established.

ECDSA key fingerprint is SHA256:dkkm42MO4W+aLaU2q7EX8pNjd+hJUKk4lBYK9QWjZ0o.

Are you sure you want to continue connecting (yes/no)? »

Répondez « yes », qui vous répond :

« Warning: Permanently added '192.168.1.5' (ECDSA) to the list of known hosts.

pi@192.168.1.5's password: »

Et entrez à nouveau le mot de passe de l'utilisateur pi de framboise.

La connexion sur 192.168.1.5 est maintenant active; vous pouvez le vérifier par :

pi@192.168.1.5 ~ $ ls

qui affiche la liste des répertoires de pi.

La déconnexion se fait par la commande : $ exit

Vous pouvez alors vous reconnecter avec la commande : $ ssh pi@192.168.1.5

Pour pouvoir vous connecter avec le nom du serveur « framboise », il faut modifier le fichier /etc/hosts :

$ sudo nano /etc/hosts

et commentez la ligne :

127.0.0.1 framboise

puis ajoutez la ligne :

192.168.1.5 framboise

Redémarrez votre Raspberry :

$ sudo reboot

Puis reconnectez-vous sur framboise :

$ ssh pi@192.168.1.5

ou

$ ssh pi@framboise

(vous devrez peut-être entrer à nouveau la commande ssh-keygen, comme indiqué dans le message plus haut)

5.3 Sécurité SSH côté serveur

Le port SSH par défaut est 22 ; il est recommandé de le changer pour diminuer la visibilité de la connexion, par exemple par le port 5544 :

Vérifiez que le port 5544 n'est pas utilisé : $ sudo netstat -l | grep 5544

S'il est déjà utilisé, il y aura une réponse, alors changez de numéro du port, sinon c'est qu'il ne l'est pas ; alors modifiez le fichier sshd_config :

$ sudo nano /etc/ssh/sshd_config

en commentant la ligne (par un caractère # en début de ligne :

# Port 22

et en ajoutant la ligne :

Port 5544

Ajoutez-y aussi, dans la section Authentication, les 3 lignes :

AllowUsers pi

PermitRootLogin no

PermitEmptyPasswords no

et commentez la ligne :

# PermitRootLogin without-password

Puis relancez le serveur SSH par :

$ sudo service ssh restart

enfin, relancez la connexion SSH à partir du client (votre PC) :

$ ssh -p 5544 pi@framboise

Vous obtenez probablement le message titré « WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! », alors comme indiqué dans le message, entrez la commande (qui inclut l'option du nouveau port 5544 ) : $ ssh-keygen -f “/home/moi/.ssh/known_hosts” -R 192.168.1.5:5544

Relancez la connexion ssh, puis entrez le mot de passe de pi.

Pour info, voici quelques commandes utiles pour le contrôle de la connexion ssh :

$ sudo systemctl status ssh

$ sudo systemctl show ssh.service

$ sudo service ssh restart

$ sudo service ssh stop

$ sudo service ssh start

NB : les commandes utilisant systemctl ou service sont des commandes de systemd, le système d'initialisation de Debian/Raspbian ; le précédent système SysVinit, utilisant des commandes commençant par /etc/init.d/, est encore utilisé dans d'autres distributions GNU/Linux, mais elles sont toujours utilisables même si votre système d'initialisation est systemd. On peut donc remplacer les commandes de systemd par les commandes de SysVinit : par exemple, /etc/init.d/ssh restart est équivalent à service ssh restart.

6 Mise à jour de la distribution

La distribution Raspbian doit être mise à jour régulièrement, pour profiter des corrections de bogues et de sécurité.

À partir de votre PC, avec votre connexion SSH, mettez à jour la liste locale des paquets du dépôt Raspbian :

$ sudo apt-get update

Mettez à jour les paquets présents sur votre Raspberry et qui bénéficient d'une nouvelle révision sur le dépôt Raspbian :

$ sudo apt-get upgrade

La mise à jour prend quelques minutes… On peut la rendre automatique en mettant ces deux commandes dans une crontab, voir la commande man crontab, ou bien des tutoriels sur le web.

7 Petit bilan de cette installation

Au début de ce tutoriel, après avoir branché votre Raspberry, vous avez travaillé dessus comme avec un ordinateur normal : avec un écran, un clavier et une souris, quand l'interface graphique apparaissait sur l'écran. Puis, très rapidement, vous avez travaillé dans une console, uniquement avec le clavier et l'écran, en entrant des commandes en ligne de commande, en commençant par la configuration. Si vous êtes arrivé ici, c'est que vous avez assimilé les manipulations de ce tutoriel, donc que vous pourrez continuer à travailler en ligne de commande. Félicitations, vous avez fait de grands progrès vers la fonction d'administrateur système !

Pourquoi opérer sans interface graphique ? Pour au moins quatre raisons :

  • l'interface graphique de Raspbian contient très peu d'outils graphiques permettant d'administrer un serveur, car la complexité de l'administration exigerait de très nombreux outils, très lourds à gérer et à utiliser ;
  • l'administration, faite à travers un terminal, permet une très grande souplesse de configuration, par de simples modifications de fichiers de texte, comme on l'a vu dans ce tutoriel ;
  • cela permet de faire toute l'administration à distance, en mettant son serveur n'importe où, et en lui fournissant seulement un câble d'alimentation et un câble Ethernet, et d'une manière totalement sécurisée grâce à SSH ;
  • il existe aussi des outils graphiques d'administration qui permettent de gérer les tâches les plus complexes (bases de données, blog et autres applications), qui fonctionnent dans une interface Web, donc à distance, à partir de n’importe quel PC.

Votre Raspberry est maintenant prêt pour installer votre serveur. Vous pouvez donc le mettre à distance là où vous voulez chez vous, en le connectant à une alimentation 220 V et à votre routeur par un câble Ethernet. Ceci fait, connectez-vous sur l'utilisateur par défaut pi.

Pour continuer cette série de tutoriels, allez sur la page de Wiki suivante :

Installation d'un serveur Apache de base avec hôtes virtuels localisés dans home sous Raspberry Pi 2

Pour mémoire, je rappelle que l'on a configuré le Raspberry comme suit (mais cela peut être différent chez vous) :

  • mot de passe de l'utilisateur pi : « raspberry », ou de préférence votre propre mot de passe
  • nom de l'hôte : framboise
  • adresse du réseau local : 192.168.1.0
  • adresse passerelle : 192.168.1.1
  • adresse IP du Raspberry : 192.168.1.5
  • port SSH : 5544

7 ANNEXE : Quelques tâches optionnelles

Il y a deux points qui sont intéressants à faire, relatifs à des aspects de sécurité et d'efficacité :

  • le changement de l'utilisateur principal pi, pour des raisons de sécurité, puisque pi est l'utilisateur par défaut dans tout Raspberry ;
  • la simplification du système, par suppression de diverses choses inutiles, et par suppression des paquets liés à tout ce qui ne fonctionne qu'avec l'interface graphique.

Notez que je ne propose pas de faire cela dès maintenant, pour ne pas perdre de temps, mais de le faire quand vous le choisirez, de préférence dès que votre serveur fonctionnera parfaitement.

7 .1 Changement de l'utilisateur par défaut (pi)

Comme tous les Raspberry ont l'utilisateur pi par défaut, ce qui est très connu et donc identifiable par des intrus, il est astucieux de le remplacer par un utilisateur de votre choix.

Créez d'abord un nouvel utilisateur et son groupe, que l'on nommera ici « login_rpi », avec l'UID et le GID 1005 (supérieur ou égal à 1000, qui est celui de pi) :

$ sudo useradd \–home-dir /home/login_rpi \–create-home \–skel /etc/skel \–user-group –uid 1005 login_rpi

$ sudo passwd login_rpi

Vérifiez que votre nouvel utilisateur est bien créé :

$ id login_rpi

qui répond :

uid=1005(login_rpi) gid=1005(login_rpi) groups=1005(login_rpi)

Autorisez la connexion à cet utilisateur (fichier /etc/ssh/sshd_config) :

$ sudo nano /etc/ssh/sshd_config

et ajoutez-y la ligne :

AllowUsers login_rpi

Le nouvel utilisateur login_rpi doit avoir les droits administrateur pour la commande sudo, donc modifiez le fichier /etc/sudoers (attention, il s'agit-là du fichier qui donne les droits d'administation du système à chaque utilisateur mentionné ici, donc ne mettez pas n'importe quoi !)

$ sudo visudo

et ajoutez la ligne :

login_rpi ALL=(ALL) NOPASSWD: ALL

Redémarrez le Raspberry par la commande :

$ sudo reboot

puis reconnectez-vous depuis votre PC par ssh sur login_rpi :

$ ssh -p 5544 login_rpi@framboise

et entrez le mot de passe de login_rpi

enfin vérifiez que l'accès administrateur fonctionne en affichant /etc/sudoers :

$ sudo visudo

Invalidation de l'utilisateur par défaut : NE LE FAITES QUE SEULEMENT, ET SEULEMENT SI LA CONNEXION EST RÉUSSIE, SINON VOU N'AUREZ PLUS D'AUTRE CONNEXION POSSIBLE, ET VOUS DEVREZ TOUT RÉINSTALLER… Vous pouvez alors supprimer l'utilisateur pi. Personnellement, je préfère le conserver, car il contient une structure de répertoires que l'on pourrait vouloir utiliser plus tard ; dans ce cas, il faut alors en faire ABSOLUMENT un utilisateur sans droits administrateur :

Depuis votre PC, connectez-vous sur pi :

$ ssh -p 5544 pi@framboise

et entrez le mot de passe de pi

puis changez son mot de passe pour qu'il soit différent de celui de login_rpi par la commande :

$ passwd

et remplacez-le, par un autre mot de passe que le mot de passe par défaut raspberry, c'est indispensable…

enfin invalidez son accès administrateur, en modifiant à nouveau /etc/sudoers :

$ sudo visudo

et commentez la ligne :

pi ALL=(ALL) NOPASSWD: ALL

puis retirez l'utilisateur pi du groupe sudo :

$ sudo deluser pi sudo

Vous pouvez toujours vérifier que pi n'a plus de droits administrateur en redémarrant, en vous reconnectant sur pi et en essayant d'afficher /etc/sudoers (comme ci-dessus par visudo) : ça ne doit PAS marcher !

7.2 Simplification du système Raspbian

Connectez-vous sur votre utilisateur, que je nomme ici « login_rpi ».

7.2.1 Suppression des utilisateurs et groupes inutiles

Si vous avez changé l'utilisateur pi pour un autre, comme cela est conseillé, vous pouvez supprimer l'utilisateur pi et son groupe :

$ sudo userdel –remove pi

$ sudo groupdel pi

Vous pouvez aussi supprimer d'autres utilisateurs et groupes inutiles :

$ sudo userdel games

$ sudo userdel lp

$ sudo groupdel fax

et ainsi de suite pour les groupes voice, cdrom, floppy, tape, audio, video, lpadmin.

7.2.2 Suppression des modules du noyau

Les modules son occupent de la place mémoire inutilement ; la commande lsmod affiche les modules présents ; dans le fichier /etc/modules :

$ sudo nano /etc/modules

commentez la ligne du module son :

#snd-bcm2835

Sur ma version de Raspbian, les modules listés par lsmod ne sont pas indiqués dans le fichier /etc/modules ; si vous savez quel fichier gère le chargement de ces modules, faites-moi signe !

7.2.3 Suppression des services inutiles

Suivant que votre système utilise SysVinit ou systemd, la liste des services s'affiche respectivement par :

$ ls /etc/init.d/

ou

$ systemctl

Pour connaître l'état d'un service :

$ sudo /etc/init.d/nom_service status

ou

$ sudo service nom_service status

idem pour les commandes stop et start.

Pour désactiver un service sans supprimer son script de lancement (dans /etc/init.d/) :

$ /etc/init.d/nom_service stop

ou

$ sudo service nom_service stop

puis :

$ sudo update-rc.d -f nom_service remove

Procédez ainsi avec les services plymouth, plymouth-log et triggerhappy.

7.2.4 Suppression des paquets inutiles

Je rappelle que je ne propose pas de faire cette opération dès maintenant, mais de le faire quand vous le choisirez, de préférence dès que votre serveur fonctionnera parfaitement.

Ce serveur sera géré exclusivement en ligne de commande par SSH, on n'aura donc jamais besoin d'une bonne partie de ce qui fait un PC de bureau : l'interface graphique et toutes les applications graphiques, son, vidéo, bureautique, etc. Il est donc intéressant de supprimer tous les paquets qui ne sont plus utiles, ce qui fera gagner de la place sur le disque et dans la mémoire RAM, et aussi rendre les mises à jour plus rapides. Cependant, en cas de problème, il vous serait peut être nécessaire, ou simplement utile, de pouvoir travailler directement sur votre Raspberry, connecté à un moniteur, un clavier et une souris. Si vous estimez que cela ne vous arrivera pas, continuez cette section, sinon reprenez-la plus tard.

Voir aussi les très bons conseils sur https://linuxfr.org/news/votre-blogue-a-la-maison-sur-raspberry-pi, que je reprends ici.

Pour ma Raspbian, l'occupation de la partition racine avant le nettoyage donne :

$ df

Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur

/dev/root 20599824 3533008 16174372 18% /

Ensuite, pour choisir les paquets d'application graphiques à supprimer, affichez la liste de tous les paquets installés :

$ dpkg –get-selections | less

et choisissez les paquets que vous voulez supprimer ; il est évident qu'il ne faut pas supprimer d'autres paquets que ceux d’applications graphiques, de son et d'impression, alors faites attention !

La commande sudo apt-get purge supprime les paquets ainsi que leurs fichiers de configuration (voir la commande man apt-get).

Dans mon cas, j'ai supprimé les applications graphiques données par ces 3 commandes :

Pour les applications graphiques :

$ sudo apt-get purge adwaita-icon-theme alacarte bluej bluez bluez-firmware claws-mail claws-mail-i18n dillo ed epiphany-browser epiphany-browser-data galculator gconf-service gconf2 gconf2-common gksu gnome-icon-theme gnome-icon-theme-symbolic gnome-menus gnome-themes-standard:armhf gnome-themes-standard-data gtk2-engines:armhf gtk2-engines-clearlookspix:armhf gtk2-engines-pixbuf:armhf hicolor-icon-theme leafpad libreoffice libreoffice-avmedia-backend-gstreamer libreoffice-base libreoffice-base-core libreoffice-base-drivers libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-gtk libreoffice-impress libreoffice-java-common libreoffice-math libreoffice-report-builder-bin libreoffice-sdbc-hsqldb libreoffice-style-galaxy libreoffice-writer lxappearance lxde lxde-common lxde-core lxde-icon-theme lxinput lxkeymap lxmenu-data lxpanel lxpanel-data lxrandr lxsession lxtask lxterminal netsurf-common netsurf-gtk omxplayer openbox pcmanfm penguinspuzzle pinentry-gtk2 pipanel squeak-plugins-scratch squeak-vm xarchiver xfce-keyboard-shortcuts xpdf wireless-tools wolfram-engine wpasupplicant zenity zenity-common

Pour le son :

$ sudo apt-get purge alsa-base alsa-utils esound-common gstreamer0.10-alsa:armhf gstreamer0.10-plugins-base:armhf gstreamer1.0-alsa:armhf gstreamer1.0-libav:armhf gstreamer1.0-omx gstreamer1.0-plugins-bad:armhf gstreamer1.0-plugins-base:armhf gstreamer1.0-plugins-good:armhf gstreamer1.0-x:armhf pimixer sonic-pi supercollider supercollider-common supercollider-ide supercollider-language supercollider-server supercollider-supernova

Pour l'impression : $ sudo apt-get purge cups-bsd cups-client cups-common

En faisant une recherche plus approfondie, on trouverait probablement d'autres paquets inutiles… Notez qu'il est toujours utile de conserver la liste des paquets supprimés dans un simple fichier texte.

Supprimez ensuite les paquets orphelins, c'est à dire les paquets qui n'étaient des dépendances que de paquets qui ont été supprimés, donc qui ne pourront plus servir ; pour cela, installez le paquet deborphan :

$ sudo apt-get install deborphan

La commande :

$ sudo deborphan

permet de lister les paquets orphelins.

Pour les supprimer, entrez

$ sudo orphaner

et sélectionnez les paquets par la barre Espace et les flèches Haut et Bas, puis sélectionnez « Accepter » par la touche Tabulation.

Il faudra relancer cette commande plusieurs fois jusqu'à ce qu'elle n'affiche plus aucun paquet à supprimer. La raison est qu'il y a souvent plusieurs niveaux de dépendance pour un paquet donné, et à chaque fois que l'on supprime un paquet, d'autres paquets peuvent être devenus orphelins.

Terminez enfin par :

$ sudo apt-get purge

qui supprime tous les fichiers de configuration des paquets supprimés.

Résultat après le nettoyage :

$ df

Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur

/dev/root 20578812 1745616 17937612 9% /

On a donc libéré environ 1,8 Go sur 3,5 à l'origine dans cette partition. Évidemment, avec les disques actuels de plus de 1000 Go, cela est négligeable. Par contre, la suppression de tous ces paquets rendra chaque mise à jour du système beaucoup plus rapide, car on ne mettra plus à jour des paquets qui ont été supprimés ; en pratique cela sera environ 2 fois plus rapide.

CONCLUSION

Voilà, vous avez terminé l'installation complète de votre Raspberry. L'étape suivante est l'installation du serveur Apache :

Installation d'un serveur Apache de base avec hôtes virtuels et localisation dans home sous Raspberry Pi 2

Rendez vous sur la page http://root66.net/wiki/doku.php/

Ce document a été créé par Jean-Luc Duflot (jielbil@jld78.fr)

installer_un_serveur_avec_raspberry_pi.txt · Dernière modification : 2021/10/18 16:09 de 127.0.0.1