banner

Guide de survie du Raspberry Pi

Installation de Linux sur un Raspberry PI4b à 4Go Ma découverte du monde Linux par l'exemple et le guide de survie 🤓
Lundi 13 juillet 2020 à 11:13

Venant tout juste de faire l'acquisition d'un Raspberry PI 4b (4Go), Je souhaite y installer une version Server d'Ubuntu afin de faire tourner, si tout se passe bien, un serveur web (Apache, PHP, MySQL).


Cet article va lister, un peu en vrac mais avec une tentative de structuration, l'ensemble des commandes à connaitre pour installer et utiliser un Ubuntu Server sans aucune connaissance préalable en Linux (un peu comme moi quoi).

Cet article est ma propre synthèse de plusieurs informations glanées ça et là sur la toile.



Préparation et installation


Pour ma découverte et mes tests, j'ai utilisé une machine virtuelle, avec une installation classique d'Ubuntu. Lors de la réception de mon Raspberry PI 4, j'ai utilisé l'outil fourni (Raspberry Pi Imager) pour installer directement la distrib Linux sur ma carte micro SD. Outil très bien fait, et permettant aussi de restaurer sur une carte SD un fichier .img d'une autre carte (clone), très pratique à l'avenir 🙃 !

Cette manipulation ne convient pas trop à mes réglages de base pour un serveur, par exemple le DHCP est activé et l'utilisateur "Ubuntu" déjà créé (avec le mot de passe "ubuntu" par défaut, obligé de le changer à la première connexion).

Rien de bien méchant, mais demandant quelques modifications avant d'attaquer...


Bon à savoir SSH est actif par défaut sur une installation d'Ubuntu Server 🙂.


Sur Mac, dans l'utilitaire de réseau, on peut afficher la liste des appareils sur le réseau et obtenir le nom de notre futur serveur.

Onglet "Netstat", le premier choix "Afficher les informations de routage".



Installation


Raspbian


Petit paragraphe sur Raspbian, le système dédié au Raspberry Pi.

Par défaut l'utilisateur est "pi" avec comme mot de passe "raspberry".

SSH n'est pas activé au démarrage, pour se faire, il faut créer un fichier "ssh" vide et sans extension à la racine de la partition "boot" de la carte micro SD.

Pour paramétrer la chose : sudo raspi-config
Pour activer VNC, allez sur la ligne Interfacing Options et activez-le.


Le dernier firmware du mois de Mai 2020 permet de faire du boot en USB en natif, donc pas besoin de version bêta !


Pour démarrer le Pi depuis un périphérique USB, il va falloir installer la dernière version du firmware. (source : Site officiel RaspBerryPi)

Pour le moment, je n'ai pas encore testé avec un boot en usb d'un Ubuntu Server...



Ubuntu Server


Récupérez Ubuntu pour Raspberry

Téléchargez la bonne version d'ubuntu et suivre le tuto 😎.

Créez un utilisateur avec un mot de passe assez robuste si vous devez avoir accès à votre serveur depuis l'extérieur.



Interface Graphique (optionnel)


Pour ma part, j'ai opté au final pour ne pas installer d'interface graphique, inutile chez moi car ssh et webmin semblent suffire.

De plus, il semblerai que cela rende le Raspberry PI4 assez instable et lent, à moins que cela soit le fait que j'ai effectué des tests avec VNC et que j'ai du ajouter une 2eme interface (xfce4)...


sudo apt update
sudo apt upgrade
au choix :

sudo apt install ubuntu-desktop
sudo apt install xubuntu-desktop
sudo apt install lubuntu-desktop
sudo apt install kubuntu-desktop
xubuntu sounds nice 🙂

Désactiver/Activer l'interface graphique au démarrage


sudo systemctl disable ton-gestionnaire-de-connexion.service


Modifier la configuration réseau


Le changement de l'adresse IP peux être paramétrée via webmin


1 - Le fichier de configuration:
ls /etc/netplan/
-> 50-cloud-init.yaml
2 - Faire une copie de sauvegarde avant de toucher :
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak

3 - Editer le fichier :
sudo nano /etc/netplan/50-cloud-init.yaml

4 - changer le texte à votre convenance (ne pas utiliser de tabulation, seulement des espaces), par exemple pour :

IP address for enp0s3 : 192.168.1.9
Gateway : 192.168.168.1
Netmask : 255.255.255.0
DNS servers : 8.8.8.8 and 8.8.4.4.

on aura :

network:
ethernets:
eth0:
addresses: [192.168.1.9/24]
gateway4: 192.168.1.1
dhcp4: no
nameservers:
addresses: [8.8.8.8,8.8.4.4]
optional: true
version: 2


5 - On enregistre (CTRL+X, Y, ENTER)

6 - On applique les réglages :
sudo netplan apply
(bien sûr en ssh on perd la connexion...)


Si un problème survient :
sudo netplan --debug apply

7 - vérifier :
ip addr

Mises à jour d'Ubuntu



sudo apt update # Fetches the list of available updates
sudo apt upgrade # Installs some updates; does not remove packages
sudo apt full-upgrade # Installs updates; may also remove some packages, if needed
sudo apt autoremove # Removes any old packages that are no longer needed


Webmin control Panel


Webmin est une interface web pour administrer totalement Ubuntu Server !
(Préférez Firefox à Safari)


sudo apt update
sudo apt install software-properties-common apt-transport-https wget
wget -q http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://download.webmin.com/download/repository sarge contrib"
sudo apt install webmin
sudo ufw allow 10000/tcp

Lancer l'interface en allant à : https://your_server_ip_or_hostname:10000/



SSH


Pour le contrôle distant du serveur, activé lors de l'installation d'Ubuntu 😎.



Partager un dossier


Même si SSH peux suffire, il peut être utile d'activer sur un serveur un ou plusieurs points de partages.

Ce n'est pas encore à l'ordre du jour pour moi, mais je développerai cette partie très prochainement !



Sauvegardes


Prévoir une solution complète de sauvegarde ( y compris les bases MySQL )


Il existe un outil dans Webmin pour sauvegarder les fichiers de configuration, avec une ou plusieurs planifications, et la possibilité de restaurer cela. Je dois à ce niveau effectuer des tests tant que je n'ai rien d'important sur le serveur (quand j'aurai reçu mes deux cartes micro SD par exemple).



Monter un disque dur



sudo fdisk -l (affiche la liste des volumes disponibles)

sudo mkdir -p /media/nom_du_disque (si le dossier/point de montage n'existe pas)

sudo mount /dev/sdb /media/nom_du_disque (si le volume nom_du_disque a bien l'id "sdb")

On peut ajouter automatiquement cela au fichier /etc/fstab



Web Packages


(source : phoenixnap.com)



1- Vérifiez les mises à jour : sudo apt-get update
2 - Installer Apache : sudo apt-get install apache2
3 - Vérifiez en tapant l'url : http://local.server.ip (ou genre)
4 - Pour vérifier votre adresse ip : ip addr
5- Paramétrez le Firewall :
sudo ufw app list
sudo ufw allow 'Apache'
vérifiez en tapant : sudo ufw status
pareil pour ssh : sudo ufw allow 'OpenSSH'
6 - Commandes utiles pour Apache :


Stop Apache: sudo systemctl stop apache2.service
Start Apache: sudo systemctl start apache2.service
Restart Apache: sudo systemctl restart apache2.service
Reload Apache: sudo systemctl reload apache2.service


Editez le fichier /etc/apache2/apache2.conf et modifiez la règle sur les dossiers :
sudo nano /etc/apache2/apache2.conf
Recherchez:



Options Indexes FollowSymLinks
AllowOverride None
Require all granted



Et changez pour :


Options Indexes FollowSymLinks
AllowOverride All
Require all granted


7 - Installer MySQL : sudo apt install mysql-server

(source : linuxconfig).


7bis - Installer mysql client : sudo apt install mysql-client
Pour vérifier quelle version de MySQL tourne : mysql -V
Redémarrer MySQL : sudo systemctl restart mysql
Lancer automatiquement MySQL au démarrage du poste : sudo systemctl enable mysql
8 - Augmenter le niveau de sécurité de MySQL : sudo mysql_secure_installation
9 - Installer PHP : sudo apt install php libapache2-mod-php php-opcache php-cli php-gd php-curl php-mysql
10 - Redémarrer Apache :
sudo systemctl restart apache2.service
11 - PhpMyAdmin :
sudo apt install phpmyadmin

Droits sur le dossier web



Ajouter l'utilisateur principal au groupe www-data afin d'éviter des soucis (via webmin).

Changer l'utilisateur groupe sur le dossier www :

sudo chown -R www-data /var/www/html

sudo chgrp -R www-data /var/www/html

sudo chmod 770 /var/www/html




Hôtes virtuels


C'est une partie assez personnelle ici, je verrais à la rendre plus générique...


J'ai un nom de domaine et j'utilise beaucoup de sous-domaines en fonction de mes divers projets.

Mes deux noms principaux sont www (mon site web) et dev (mes projets en cours de développement).
Mais j'en ai plein d'autres (stats, recettes, randos, etc.) !


Mon autre souci principal (mais je ne suis pas le seul heureusement), c'est que je n'ai pas d'IP fixe chez moi, donc je vais devoir passer par un ddns...



Sources :

linuxize.com


Générateur de fichiers VirtualHost


Configurer le VirtualHost



Exemple


Création de my.wapp.fr pour pointer sur le PI4 directement.

Le fichier host standard en http est le suivant :


#
# VirtualHost my.wapp.fr
# Mon site principal
#

ServerName my.wapp.fr
ServerAlias my
ServerAdmin admin@wapp.fr
DocumentRoot /var/www/www
#RedirectMatch permanent ^/(.*)$ https://my.wapp.fr/$1


Options -Indexes +FollowSymLinks
AllowOverride All

ErrorLog ${APACHE_LOG_DIR}/my.wapp.fr-error.log
CustomLog ${APACHE_LOG_DIR}/my.wapp.fr-access.log combined


Pour l'éditer et/ou le créer, on tape :
sudo nano /etc/apache2/sites-available/my.wapp.fr.conf
La redirection vers le site ssl se fera lorsque le ssl sera actif, il suffira juste de décommenter la ligne 😊


On procède de même pour chaque sous-domaines.


Une fois fait, pour chaque sous domaine on va activer le virtualhost. Cela consiste en gros à faire un alias de chaque fichier conf dans le dossier /etc/apache2/sites-enbaled/
On tape pour notre exemple la commande suivante :
sudo a2ensite my.wapp.fr
On teste la configuration :
sudo apachectl configtest
On relance Apache :
sudo systemctl restart apache2

Certificat SSL avec Let's Encrypt


(source : Certbot)

1 - Vérifier les mises à jour et les packages nécessaires :

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo apt-get update

2 - Installer le certbot :
sudo apt-get install certbot python3-certbot-apache
3 - Démarrer l'assistant automatisé :
sudo certbot --apache
Et tout est bon normalement !
Vous pouvez aussi vérifier le renouvellement du certificat en tapant :
sudo certbot renew --dry-run
Pour renouveler automatiquement tous les certificats :
sudo certbot renew

DNS Dynamique


Comme je n'ai pas d'IP fixe chez moi, j'ai créé chez noIP un dns pointant sur mon ip.

Chez mon fournisseur de nom de domaine, j'ai ajouté mon sous-domaine "my", en supprimant toutes les infos de dns et en ajoutant seulement un CNAME pointant sur le nom choisi chez noIP.

Cela me permet de ne plus toucher les configurations chez mon fournisseur, et en mettant un daemon soit sur ma box, soit sur mon pi de ne plus m'occuper de rien !

A surveiller car chez noIP, le service doit être renouvelé tous les mois...


Installer noip DUC client pour linux (vous devez avoir installé "make" et "gcc" avant)


sudo su -
cd /usr/local/bin
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xzf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make
make install

-> remplir l'assistant


Bon, dans mon cas, et pour le moment, j'ai évité d'installer make et install sur le PI, en favorisant l'installation du client sur mon mac, situé au même endroit que mon PI, plus simple pour le moment 🤓



PROXY (optionnel)



sudo apt install squid
(source : squid)



Arborescence physique du serveur


l'idée ici est d'optimiser au maximum le stockage et l'espace "disque" (pour rappel, par défaut nous serons sur une carte SD)...

Cela soulève le délicat souci lors d'une mise à jour, de vérifier TOUS les sites internes utilisant une autre version...

Tous ces dossiers doivent être protégés par htaccess ET un fichier index.html ou index.php


www/html/.system/ : les différentes versions de CodeIgniter
www/html/.assets/ : tous les modules additionnels, comme Bootstrap, FontAwesome, jQuery, etc.
www/html/.mes_sous_domaines : Tous les sous domaines secondaires et les archives
.archives/ : les anciens sites et projets
randos/ : le sous-domaine "randos"
recettes/ : le sous-domaine "recettes"
stats : le sous-domaine "stats" pour les stats du site www (à voir car je m'en tape un peu).
techbase/ : le sous-domaine "techbase"
recettes/ : le sous-domaine "recettes"
www/html/www/ : le domaine principal
www/html/dev/ : le sous-domaine "dev" contenant mes projets en cours.

Tags:

Linux Raspberry Unix Pi4 
Réagissez !
Les champs marqués d'un * sont obligatoires.
Votre commentaire ne sera visible qu'après validation par un administrateur.