Astuces - systemd
Ce document regroupe les choses qu'on sais faire avec le fameux Systemd... Je ne dirai pas ce que je pense de ce "logiciel" car je risque de déraper...
Désactiver la journalisation dans le shell
Sur un système basique (debootstrap), quand on branche une clé USB, un câble réseau, etc... Ça crache les logs directement dans le shell comme sur un équipement Cisco. Pour désactiver ça, il faut créer le fichier suivant avec ce contenu :
vim /etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
Un simple redémarrage suffit pour prendre en compte le changement. Si vous voulez appliquer le changement immédiatement (vous êtes en plein test et redémarrer n'est pas envisageable), exécutez simplement cette commande (non testé mais ça viens de la même source donc il n'y a pas de raison que cela ne fonctionne pas) :
echo "3 3 3 3" > /proc/sys/kernel/printk
Sources de la section
- https://wiki.archlinux.org/index.php/Silent_boot#sysctl
- https://unix.stackexchange.com/questions/44999/how-can-i-hide-messages-of-udev/45525#45525
Création d'un script de démarrage
Simple
Cette section va expliquer comment faire un service Systemd qui exécute un script au démarrage du système.
INFORMATION
Ce logiciel étant un peu con, on ne peut pas simplement lui demander d'effectuer une commande, il faut obligatoirement passer par un script, même pour une seul et simple commande...Création du script du service
Pour l'exemple, je vais ajouter une règle [Iptables] pour faire du nat.
vim /usr/bin/nat.sh
#!/bin/sh
iptables -F -t nat
iptables -t nat -A POSTROUTING -s 173.16.0.0/24 -o eth0 -j MASQUERADE
Donner les droits d’exécution
chmod +x /usr/bin/nat.sh
Création du service Systemd
vim /etc/systemd/system/nat.service
ExecStart=/root/nat.sh
[Install]
WantedBy=default.target
Recharger la configuration de Systemd
systemctl daemon-reload
Activer le service au démarrage
systemctl enable nat.service
Démarrer le service (ceci a pour effet de lancer le script)
systemctl start nat.service
Désactiver le service au démarrage
systemctl disable nat.service
Source de la section
Invite au démarrage
Cette section va expliquer comment faire un écran posant des questions et exécutant des actions en fonction des réponses au démarrage de la machine (utile si vous faite votre propre distribution Linux). Je m'en suis servis afin de modéliser un système au démarrage d'un PXE squashfs en fonction de l'usage prévu par la personne qui démarre.
Création du script du service
vim /usr/bin/modelisation
#!/bin/bash
# Ce script permet de modéliser une machine démarrant en PXE sur un squashfs afin de gagner du temps lors de phases de tests. Il était prévu de le charger via le réseau mais systemd oblige, je n'ai pas eu le choix de le mettre local (quelle merde ce truck...)
# On passe sur le TTY2
chvt 2
# Définition des variables
noyaux=/boot/
aptupdate="debconf-apt-progress -- apt update"
aptinstall="debconf-apt-progress -- apt install -y"
# Création de fichiers vides visant à berner la détection du noyaux des paquets lors de leur installation (nécessaire pour l'installation de certains paquets qui exigent que le noyau soit dans /boot alors que ça n'a aucune importance)
mkdir $noyaux
touch $noyaux/vmlinuz-2 $noyaux/initrd.img-2
dialog --title "Modélisation système" --yesno "Voulez-vous installer un modèle d'utilisation ?" 5 51
if [ $? -eq 0 ]
then
#On passe à l'invite suivante
true
elif [ $? -eq 1 ]
then
#On repasse sur le TTY1
chvt 1
#On sort du programme
exit 0;
else
#On repasse sur le TTY1
chvt 1
exit 1;
fi
exec 3>&1;
choixmodele=$(dialog --menu "Choisir un modèle à installer :" 20 40 3 1 Serveur\ IPSec 2 Serveur\ IPSec\ avec\ wireshark 3 Système\ de\ base 2>&1 1>&3);
exec 3>&-;
if [ $choixmodele -eq 1 ]
then
echo "wireshark-common wireshark-common/install-setuid boolean true" | debconf-set-selections;
$aptinstall strongswan strongswan-pki openvswitch-switch;
elif [ $choixmodele -eq 2 ]
then
echo "wireshark-common wireshark-common/install-setuid boolean true" | debconf-set-selections;
echo "strongswan-starter strongswan/runlevel_changes select" | debconf-set-selections
$aptupdate
$aptinstall strongswan strongswan-pki openvswitch-switch xorg blackbox wireshark;
elif [ $choixmodele -eq 3 ]
then
# On repasse sur le TTY1
chvt 1
exit 0;
else
# On repasse sur le TTY1
chvt 1
exit 1;
fi
# On repasse sur le TTY1
chvt 1
# On sort avec le code 0 (tout est bon)
exit 0
Création du service Systemd
vim /etc/systemd/system/usage.service
[Unit]
Description=Modélisation d'un squashfs
After=getty@tty2.service
[Service]
Type=oneshot
ExecStart=/usr/bin/modelisation
StandardInput=tty
TTYPath=/dev/tty2
TTYReset=yes
TTYVHangup=yes
[Install]
WantedBy=default.target
Explications : On crée un script oneshot avec pour script de démarrage /usr/bin/modelisation (les accents ne sont pas pris en charge). On demande à Systemd d’exécuter ce script dans le TTY2 (on fait ça car sinon le système crache des logs pendant qu'on répond aux questions) et de nettoyer la console lorsqu'il est terminé.
Activation du service au démarrage
On active le service au démarrage de la machine avec la commande suivante
systemctl enable modelisation.service
Si vous voulez modifier le script vous devrez recharger la configuration de systemd après les changements avec celle-ci
systemctl daemon-reload
Pour supprimer le service au démarrage on utilise cette commande
systemctl disable modelisation.service
Lors de l'execution du script (pendant qu'il pose des questions), un systemctl status modelisation.service affichera
● modelisation.service - Modélisation d'un squashfs Loaded: loaded (/etc/systemd/system/modelisation.service; enabled; vendor preset: enabled) Active: activating (start) since Wed 2017-08-16 15:19:20 CEST; 6s ago Main PID: 387 (modelisation) Tasks: 2 (limit: 4915) CGroup: /system.slice/modelisation.service ├─387 /bin/bash /usr/bin/modelisation └─394 dialog --title Mod lisation syst me --yesno Voulez-vous installer un mod le d'utilisation ? 5 51
Lorsqu'il sera terminé. la commande affichera
● modelisation.service - Modélisation d'un squashfs Loaded: loaded (/etc/systemd/system/modelisation.service; enabled; vendor preset: enabled) Active: inactive (dead) août 16 15:12:32 systemd systemd[1]: Starting Modélisation d'un squashfs... août 16 15:12:34 systemd systemd[1]: Started Modélisation d'un squashfs.
Après un redémarrage, il n'y a plus qu'a répondre à vos propres questions !