Pour cet article, je vais reprendre la création d’une image à partir de zéro et essayer d’automatiser certaines étapes car je me rends compte, avec l’expérience, que c’est une opération qui se renouvelle plus que je ne l’imaginais. Les changements de versions majeures de Raspbian, les évolutions suite aux nouvelles versions des Raspberry ou le passage de 32 à 64 bits sont des étapes où il n’est pas toujours possible de modifier l’image existante. Il faut repartir tout au début et ce n’est pas facile (pour moi !) de retrouver tous les éléments utilisés au fil du temps.
Pour commencer, il faut télécharger la version de Pi OS (nouveau nom de Raspbian) qui va servir de base à notre image, c’est ici que cela se passe en général : Versions de Pi Os
mais comme je veux partir sur une version 64 bits qui est encore en beta, je vais aller là :
Versions beta 64 bits de Pi Os
Après le téléchargement, on copie le fichier téléchargé sur une carte SD pas trop grosse, 16Go de préférence, car sinon les opérations de copie seront plus longues. J’utilise Raspberry Pi Imager qui est déjà sur toutes les images « bureautique ». On peut le télécharger pour PC ou Mac à partir de cette page : Pi Imager
ou l’installer sur un Pi avec interface graphique avec cette commande :
|
1 |
sudo apt install rpi-imager |
On installe la nouvelle carte SD dans un Pi qui dispose d’une connexion réseau et d’un écran/clavier pour le premier démarrage. Une phase d’initialisation débute pour le paramétrage et les premières mises à jour.
Après avoir re booté en validant le Restart proposé (image 14), il faut activer SSH (Choix Préférences + Configuration du Raspberry Pi + onglet Interfaces : image 15) pour permettre la connexion distante et la copie des fichiers nécessaires à la poursuite de l’initialisation. Avec la commande ifconfig lancée dans une fenêtre Terminal, on récupère les adresses IP pour la connexion et, depuis un PC (ou un autre raspberry) on copie avec FileZilla les fichiers du répertoire /image/init dans /home/pi/domoticz/scripts/image/init de la machine à initialiser. Depuis l’image H, tous les fichiers nécessaires sont inclus dans ce répertoire. Après la copie, il faut mettre les fichiers .sh en mode exécutable avec la commande sudo chmod +x *.sh (en étant positionné sur le répertoire /init de la nouvelle machine).
Il faut d’abord rajouter les repository (ou dépôts) nécessaires pour les logiciels qui ne sont pas présents sur le dépôt de base. Cela permet d’avoir accès à des versions plus récentes avec le dépôt « backports » ou à des logiciels non présent sur le dépôt général. On va donc lancer le shell pi_ajout_depots.sh ci-dessous.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
#!/bin/bash # ## pi_ajout_depots.sh ## Script permettant l'ajout de dépôts/repository afin d'installer des logiciels supplémentaires ## 19/12/2020 : version initiale ## 01/11/2021 : Modification liée à la gestion des clefs (keyring) # # Variable interne de ce script (ne pas modifier) DATE_FORMAT=`date +%u` # Message demandant une validation avant le lancement de l'ajout des dépôts/repository read -p 'Vous allez ajouter des dépots sur ce Raspberry - Taper Oui ou Non - Ctrl+c pour arrêter ' -t 30 valid if [ -z $valid ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'ajout de dépots/repository" elif [ $valid != "Oui" ] then echo -e "\nLa réponse n'est pas Oui mais $valid , il n'y aura pas d'ajout de dépots/repository" elif [ $valid = "Oui" ] then echo -e "\nLa réponse est $valid les dépôts/repository vont être ajoutés" echo "# Début du Script d'ajout des dépôts/repository pour l'initialisation d'un Raspberry #" `date` # Mise à jour initiale d'apt sudo apt-get update # Copie du fichier 50multimedia pour prioriser les depots officiels sudo cp /home/pi/domoticz/scripts/image/init/50multimedia /etc/apt/preferences.d/ # Commandes pour les clefs du depots multimedia sudo apt-get update -o Acquire::AllowInsecureRepositories=true sudo apt-get install deb-multimedia-keyring sudo apt-get install debian-archive-keyring # Ajout du dépôt deb-multimedia pour Raspbian s'il n'existe pas déjà if [ -e /etc/apt/sources.list.d/multimedia.list ] then echo -e "Le dépôt deb-multimedia est déjà installé" else echo "deb http://www.deb-multimedia.org stable main contrib non-free" | sudo tee /etc/apt/sources.list.d/multimedia.list echo -e "Le dépôt deb-multimedia a été installé" fi # Ajout du dépôt Stretch main pour Raspbian s'il n'existe pas déjà if [ -e /etc/apt/sources.list.d/stretch.list ] then echo -e "Le dépôt stretch est déjà installé" else echo "deb http://ftp.debian.org/debian stretch main contrib non-free" | sudo tee /etc/apt/sources.list.d/stretch.list echo -e "Le dépôt stretch a été installé" fi # Ajout du dépôt backports pour Raspbian Buster s'il n'existe pas déjà if [ -e /etc/apt/sources.list.d/backports.list ] then echo -e "Le dépôt backports est déjà installé" else echo "deb http://ftp.debian.org/debian buster-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list echo -e "Le dépôt backports a été installé" fi # Ajout du dépôt Sury pour php s'il n'existe pas déjà if [ -e /etc/apt/sources.list.d/php.list ] then echo -e "Le dépôt sury pour php est déjà installé" else wget https://packages.sury.org/php/apt.gpg sudo apt-key add apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main contrib non-free" | sudo tee /etc/apt/sources.list.d/php.list echo -e "Le dépôt Sury pour php a été installé" fi # Ajout du dépôt pour Grafana 7.3 s'il n'existe pas déjà if [ -e /etc/apt/sources.list.d/grafana.list ] then echo -e "Le dépôt grafana est déjà installé" else wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main contrib non-free" | sudo tee -a /etc/apt/sources.list.d/grafana.list echo -e "Le dépôt grafana a été installé" fi # Actualisation d'apt sudo apt-get update echo "# Fin du Script d'ajout des dépôts/repository #" `date` fi |
Il faut ensuite installer les logiciels additionnels dans l’ordre ci-dessous, l’ordre est important car il y a des dépendances entre les logiciels. Le principe, c’est de lancer le shell et de répondre aux questions, en donnant le nom du fichier de paramètres à utiliser. Lors des phases d’installation, il est parfois nécessaire de répondre à quelques questions pour le paramétrage de certains logiciels (Pi-Hole par exemple). Certaines erreurs apparaissent car la configuration n’est pas complète (nginx par exemple), ce n’est qu’a la fin de l’installation que la configuration est correcte :
- liste_domotique_1.txt avec le shell pi_init.sh
- liste_domotique_backports.txt avec le shell pi_init_backports.sh
- liste_domotique_2.txt avec le shell pi_init.sh
- liste_bureautique-1.txt avec le shell pi_init.sh
- liste_bureautique_backports.txt avec le shell pi_init_backports.sh
- liste_bureautique-2.txt avec le shell pi_init.sh
- puis lancer le shell pi_init_hors_depots.sh
Les shells pi_init.sh et pi_init_backports.sh permettent l’installation en fonction des listes à utiliser (avec ou sans backports) et le shell pi_init_hors_depots.sh installe les logiciels qui ne sont pas dans les dépôts.
Voici les shells et les listes :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/bin/bash # # pi_init.sh # Script d'initialisation d'un Raspberry Bureautique # Installation des logiciels de base # # 16/12/2020 : version initiale # # Variable interne de ce script (ne pas modifier) DATE_FORMAT=`date +%u` # Message demandant une validation avant le lancement des installations read -p 'Vous allez installer des logiciels sur ce Raspberry - Taper Oui ou Non - Ctrl+c pour arrêter ' -t 30 valid if [ -z $valid ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'installation" elif [ $valid != "Oui" ] then echo -e "\nLa réponse n'est pas Oui mais $valid , il n'y aura pas d'installation" elif [ $valid = "Oui" ] then echo -e "\nLa réponse est $valid l'installation va être faite" # Choix du fichier de paramètres read -p 'Indiquer le nom du fichier qui contient la liste des logiciels à installer (format : liste_Nom.txt) ' -t 30 liste if [ -z $liste ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'installation" elif [ ! -f $liste ] then echo -e "\n$liste n'existe pas dans le répertoire /init ou n'est pas un fichier valide, il n'y aura pas d'installation" else echo -e "\nLe fichier $liste va être utilisé pour l'initialisation" dos2unix $liste echo "# Début du Script d'Initialisation d'un Raspberry Bureautique à partir d'une liste de logiciels #" `date` sudo apt-get update # Mise à jour initiale cat $liste | xargs sudo apt-get -y install echo "# Fin du Script d'Initialisation #" `date` fi fi |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#!/bin/bash # # pi_init_backports.sh # Script d'initialisation d'un Raspberry Bureautique pour les versions dans le dépôt backports # Ajout du dépôt à /etc/apt/sources.list.d : deb http://deb.debian.org/debian buster-backports main contrib non-free # Pour vérifier les versions : apt show package-name -a # Installation des logiciels de base # # 16/12/2020 : version initiale # # Variable interne de ce script (ne pas modifier) DATE_FORMAT=`date +%u` # Message demandant une validation avant le lancement des installations read -p 'Vous allez installer des logiciels sur ce Raspberry - Taper Oui ou Non - Ctrl+c pour arrêter ' -t 30 valid if [ -z $valid ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'installation" elif [ $valid != "Oui" ] then echo -e "\nLa réponse n'est pas Oui mais $valid , il n'y aura pas d'installation" elif [ $valid = "Oui" ] then echo -e "\nLa réponse est $valid l'installation va être faite" # Choix du fichier de paramètres read -p 'Indiquer le nom du fichier qui contient la liste des logiciels à installer (format : liste_Nom.txt) ' -t 30 liste if [ -z $liste ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'installation" elif [ ! -f $liste ] then echo -e "\n$liste n'existe pas dans le répertoire /init ou n'est pas un fichier valide, il n'y aura pas d'installation" else echo -e "\nLe fichier $liste va être utilisé pour l'initialisation" dos2unix $liste echo "# Début du Script d'Initialisation d'un Raspberry Bureautique à partir d'une liste de logiciels #" `date` sudo apt-get update # Mise à jour initiale cat $liste | xargs sudo apt-get -y -t buster-backports install echo "# Fin du Script d'Initialisation #" `date` fi fi |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
apt-transport-https asterisk autofs certbot debian-archive-keyring dns-root-data dnsutils dos2unix fail2ban grafana idn2 incron libcanberra-gtk-module libgtksourceview2.0-0 libgtksourceview2.0-common lighttpd lua-socket lua5.3 mailutils mariadb-client mariadb-server monit mosquitto msmtp mutt netcat nmap nodejs numlockx openvpn p7zip-full python-cairo python-chardet python-dbus python-enchant python-gobject-2 python-gtk2 python-numpy samba software-properties-common speedtest-cli sqlite3 tcpdump |
|
1 2 3 4 |
php-twig zabbix-agent zabbix-frontend-php zabbix-server-mysql |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
nginx php-bz2 php-curl php-fpm php-gd php-imagick php-mysql php-pear php-tcpdf php-twig php-twig-doc php-zip php7.4 php7.4-cgi php7.4-cli php7.4-common php7.4-curl php7.4-fpm php7.4-gd php7.4-gmp php7.4-imap php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-soap php7.4-sqlite3 php7.4-xml php7.4-xmlrpc php7.4-zip phpmyadmin |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
arduino calibre filezilla firefox-esr gdebi gimp homebank inkscape keepass2 keepassxc kid3 putty rpi-imager sound-juicer synaptic thunderbird wireshark xpad zenmap |
|
1 2 |
libreoffice terminator |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#!/bin/bash # # pi_init_hors_depots.sh # Script d'initialisation d'un Raspberry Bureautique # Installation des logiciels ne se trouvant pas sur un dépôt # # 02/01/2021 : version initiale # # Variable interne de ce script (ne pas modifier) DATE_FORMAT=`date +%u` # Message demandant une validation avant le lancement des installations read -p 'Vous allez installer des logiciels sur ce Raspberry sans utiliser un dépôt - Taper Oui ou Non - Ctrl+c pour arrêter ' -t 30 valid if [ -z $valid ] then echo -e "\nLa réponse doit être saisie dans un délai de 30 secondes, il n'y aura pas d'installation" elif [ $valid != "Oui" ] then echo -e "\nLa réponse n'est pas Oui mais $valid , il n'y aura pas d'installation" elif [ $valid = "Oui" ] then echo -e "\nLa réponse est $valid l'installation va être faite" echo "# Début du Script d'Initialisation d'un Raspberry Bureautique pour les logiciels sans dépôt #" `date` # Installation de rpi-clone echo "# Installation de rpi-clone #" cd /home/pi sudo git clone https://github.com/billw2/rpi-clone.git cd rpi-clone sudo cp rpi-clone rpi-clone-setup /usr/local/sbin # Installation de pishrink echo "# Installation de pishrink #" sudo wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh sudo chmod +x pishrink.sh sudo mv pishrink.sh /usr/local/bin # Installation de domoticz echo "# Installation de domoticz #" sudo curl -sSL install.domoticz.com | sudo bash # Installation de wordpress echo "# Installation de wordpress #" cd /var/www/html sudo wget http://wordpress.org/latest.tar.gz sudo tar xzf latest.tar.gz sudo rm -rf latest.tar.gz sudo chown -R www-data /var/www/html/wordpress # Installation de cherrytree echo "# Installation de cherrytree #" sudo wget http://ftp.br.debian.org/debian/pool/main/p/pygtksourceview/python-gtksourceview2_2.10.1-3_arm64.deb sudo dpkg -i python-gtksourceview2_2.10.1-3_arm64.deb sudo wget http://www.giuspen.com/software/cherrytree_0.39.4-0_all.deb sudo dpkg -i cherrytree_0.39.4-0_all.deb # Installation d'ancestris echo "# Installation d'ancestris #" sudo wget -O ancestris_10-20200208-0-0ubuntu1_all.deb https://fr.ancestris.org/compteur_dl.php?/dl/pub/ancestris/releases/ancestris_10-20200208-0-0ubuntu1_all.deb sudo dpkg -i ancestris_10-20200208-0-0ubuntu1_all.deb sudo rm ancestris_10-20200208-0-0ubuntu1_all.deb # Installation de pi-hole echo "# Installation de pi_Hole #" sudo curl -sSL -k https://install.pi-hole.net | sudo bash echo "# Fin du Script d'Initialisation #" `date` fi |
|
1 2 3 |
audacity handbrake qmmp |
La commande : apt-cache policy nomdulogiciel permet de vérifier les versions disponibles sur les différents dépôts installés.
Autres commandes qui peuvent être utiles dans la phase d’initialisation :
- sudo dpkg –configure -a
- sudo apt –autoremove
- sudo apt clean
- sudo dpkg –force-all –purge nomdulogiciel
- sudo apt -f install
- dpkg –audit
Pour la version Bureautique, il est indispensable d’utiliser un Pi4 avec 4 ou 8Go de mémoire, la mémoire limité à 1Go sur les Pi3 n’est pas suffisante pour la bureautique. La méthode de boot sur disque externe étant différente entre les Pi 1/2/3 et le Pi 4, il ne sera peut-être pas possible de conserver une image commune pour les Pi 3 et 4. Je ferai peut-être une image Domotique 64bits pour les Pi 3 et une image Domotique/Bureautique 64 bits pour les Pi 4. Dans tous les cas, cette image 64 bits ne fonctionnera pas sur les Pi 1/2.
Pour la bureautique, dans mon utilisation l’accès à des disques en NFS est indispensable, voici le fichier fstab que j’utilise pour l’accès vers le Synology :
|
1 2 3 |
192.168.1.NN:/volume1/Data/Data_Pi4B /mnt/data_pi4b nfs rsize=8192,wsize=8192,timeo=14,defaults,user,x-systemd.automount 192.168.1.NN:/volume1/Data/Dropbox /mnt/dropbox nfs rsize=8192,wsize=8192,timeo=14,defaults,user,x-systemd.automount 192.168.1.NN:/volume1/homes/admin/Drive /mnt/drive nfs rsize=8192,wsize=8192,timeo=14,defaults,user,x-systemd.automount |
La version 64 bits de Pi OS (nouveau nom de Raspbian) est toujours en version beta aussi je ne diffuse pas cette image – sauf pour ceux qui disposent d’un Pi4 avec + de 2Go et qui souhaitent tester – mais tout est prêt pour une mise à disposition rapide lorsque la version stable sera disponible. Je compléterai mes tests avec la version stable. L’avantage de cette méthode, c’est qu’il sera plus simple de rajouter des composants dans l’image et qu’il sera plus difficile d’en oublier :-).
La liste des logiciels principaux inclus dans cette image sera mise à jour dans cet article : Qui se cache dans les images ?
















