Il se peut que, dans ce tutoriel, l'ensemble des instructions vous semblent un peu lourdes ou trop détaillées, mais c'est fait volontairement, dans le but 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 ces commandes importantes sous 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 ;
  • un disque dur USB avec une alimentation indépendante du Raspberry ;
  • un réseau local, c'est à dire un 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

Dans votre propre compte utilisateur, ouvrez un terminal, qui vous permettra d'exécuter les commandes de ce tutoriel. Ce terminal affiche 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
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 exécuter une commande avec l'invite se terminant par « $ », en tapant « sudo » devant chaque commande.

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.

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 Rasbian 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 avoir 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/sdX1 8192 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 (outil Preferences - Raspberry Pi Configuration) dans cette interface graphique, mais si vous destinez votre Raspberry au métier de serveur, il vaudra mieux le configurer dans une console, en ligne de commande, car c'est ce que vous utiliserez tout le temps par la suite. En effet, 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.

Pour 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 $ ).

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 ( 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, 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 http://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 la carte SD et ses deux partitions et celles du disque dur, si ce disque en a déjà.

3.1 Partitionnement du disque dur

Voyez aussi http://www.framboise314.fr/donnez-de-lespace-a-votre-framboise314-un-disque-dur-pour-le-raspberry-pi/ qui explique 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.

  • Partitionnement avec fdisk et votre Raspberry :

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

  1. sda1 : partition de 20 Go en ext4 pour votre système, ce qui sera amplement suffisant, et permettra de la sauvegarder facilement ;
  2. sda2 : partition swap de 1Go ;
  3. sda3 : partition de 5 Go en ext4 pour la partition /home, pour les isoler les données du système.

Formatez les nouvelles partitions par les commandes :

  1. pour la partition système sda1 en ext4 : $ sudo mkfs.ext4 /dev/sda1
  2. pour la partition swap : $ sudo mkswap /dev/sda2
  3. 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, 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 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 ( 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

$ 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 est 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 :
$ 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 à partir de « auto lo » ( on suppose ici que l'adresse du réseau est 192.168.1.0, la passerelle 192.168.1.1 et celle 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 par une connexion filaire avec le protocole sécurisé SSH, de préférence à 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é :
$ 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, j'ai mis « monPC » ), dans votre compte habituel ( ici, j'ai mis « moi » ), lancez une connexion SSH sur le compte pi du Raspberry :
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 de 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 »
« 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 :
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 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 utile pour le contrôle de 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é.

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 :

  1. 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 ;
  2. 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 ;
  3. 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 ;
  4. 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 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 réseau : 192.168.1.0
adresse passerelle : 192.168.1.1
adresse IP : 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é :

  1. le changement de l'utilisateur principal pi, pour des raisons de sécurité, puisque pi est l'utilisateur par défaut dans tout Raspberry ;
  2. 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
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 :
$ 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 : seulement, et seulement si la connexion est réussie, on peut maintenant 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 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 le 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 mieux...

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 :
$ 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 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

et 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 vous utilisez SysVinit ou systemd, La liste des services s'affiche respectivement par :
$ ls /etc/init.d/
ou
$ systemctl

Pour connaître l'état du 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. En effet, 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.

Ce serveur sera commandé 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.

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 dans 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 trouvera 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 des 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 environ 2 fois plus rapide.