« Astuces - systemd » : différence entre les versions
(Aération du code + corrections typographiques + déplacement de la section "Désactiver la journalisation dans le shell" dans la page "Paramètres linux".) |
(Ajout de la section "Systèmes de fichiers" + remplacement des balises "source" obsolètes + correction d'une faute) |
||
Ligne 14 : | Ligne 14 : | ||
vim /etc/systemd/system/network-online.target.wants/networking.service | vim /etc/systemd/system/network-online.target.wants/networking.service | ||
Changez la valeur < | Changez la valeur <code>TimeoutStartSec=5min</code> en : | ||
TimeoutStartSec=5 | TimeoutStartSec=5 | ||
Ligne 25 : | Ligne 25 : | ||
==Temps d'attente générique== | ==Temps d'attente générique== | ||
Il est possible d’interagir avec le temps d'attente de démarrage et d'arrêt par défaut d'un service (au cas où celui-ci n'est pas renseigné dans son fichier) en spécifiant les valeurs suivantes dans la configuration globale < | Il est possible d’interagir avec le temps d'attente de démarrage et d'arrêt par défaut d'un service (au cas où celui-ci n'est pas renseigné dans son fichier) en spécifiant les valeurs suivantes dans la configuration globale <code>/etc/systemd/system.conf</code> : | ||
DefaultTimeoutStartSec=5s | DefaultTimeoutStartSec=5s | ||
Ligne 35 : | Ligne 35 : | ||
==Gestionnaire utilisateur== | ==Gestionnaire utilisateur== | ||
Un service mystérieux ralenti considérablement l'extinction de certain ''Debian Stretch'' avec comme message '''a job is running for user manager debian'''. Encore un truck à la con. Il convient d'installer (pour je ne sais quelle raison) le service < | Un service mystérieux ralenti considérablement l'extinction de certain ''Debian Stretch'' avec comme message '''a job is running for user manager debian'''. Encore un truck à la con. Il convient d'installer (pour je ne sais quelle raison) le service <code>watchdog</code> pour régler ça (pourquoi c'est pas installé de base si ça permet de régler le problème ?). | ||
apt install watchdog | apt install watchdog | ||
Ligne 56 : | Ligne 56 : | ||
vim /usr/bin/nat.sh | vim /usr/bin/nat.sh | ||
< | <syntaxhighlight lang="bash"> | ||
#!/bin/sh | #!/bin/sh | ||
iptables -F -t nat | iptables -F -t nat | ||
iptables -t nat -A POSTROUTING -s 173.16.0.0/24 -o eth0 -j MASQUERADE | iptables -t nat -A POSTROUTING -s 173.16.0.0/24 -o eth0 -j MASQUERADE | ||
</ | </syntaxhighlight> | ||
Donner les droits d’exécution | Donner les droits d’exécution | ||
Ligne 70 : | Ligne 70 : | ||
vim /etc/systemd/system/nat.service | vim /etc/systemd/system/nat.service | ||
< | <syntaxhighlight lang="ini"> | ||
[Service] | [Service] | ||
ExecStart=/usr/bin/nat.sh | ExecStart=/usr/bin/nat.sh | ||
Ligne 76 : | Ligne 76 : | ||
[Install] | [Install] | ||
WantedBy=default.target | WantedBy=default.target | ||
</ | </syntaxhighlight> | ||
Recharger la configuration de ''Systemd'' | Recharger la configuration de ''Systemd'' | ||
Ligne 105 : | Ligne 105 : | ||
vim /usr/bin/modelisation | vim /usr/bin/modelisation | ||
< | <syntaxhighlight lang="bash"> | ||
#!/bin/bash | #!/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...) | # 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...) | ||
Ligne 170 : | Ligne 170 : | ||
# On sort avec le code 0 (tout est bon) | # On sort avec le code 0 (tout est bon) | ||
exit 0 | exit 0 | ||
</ | </syntaxhighlight> | ||
===Création du service Systemd=== | ===Création du service Systemd=== | ||
Ligne 176 : | Ligne 176 : | ||
vim /etc/systemd/system/usage.service | vim /etc/systemd/system/usage.service | ||
< | <syntaxhighlight lang="ini"> | ||
[Unit] | [Unit] | ||
Description=Modélisation d'un squashfs | Description=Modélisation d'un squashfs | ||
Ligne 191 : | Ligne 191 : | ||
[Install] | [Install] | ||
WantedBy=default.target | WantedBy=default.target | ||
</ | </syntaxhighlight> | ||
Explications : On crée un script [https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= oneshot] avec pour script de démarrage ''/usr/bin/ | Explications : On crée un script [https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= oneshot] avec pour script de démarrage ''/usr/bin/modélisation'' (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 entrées de journal pendant que l'on répond aux questions) et de nettoyer la console lorsqu'il est terminé. | ||
===Activation du service au démarrage=== | ===Activation du service au démarrage=== | ||
Ligne 208 : | Ligne 208 : | ||
systemctl disable modelisation.service | systemctl disable modelisation.service | ||
Lors de l'execution du script (pendant qu'il pose des questions), un < | Lors de l'execution du script (pendant qu'il pose des questions), un <code>systemctl status modelisation.service</code> affichera | ||
● modelisation.service - Modélisation d'un squashfs | ● modelisation.service - Modélisation d'un squashfs | ||
Ligne 234 : | Ligne 234 : | ||
* http://www.linuxjournal.com/article/2807 | * http://www.linuxjournal.com/article/2807 | ||
* https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable#704616 | * https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable#704616 | ||
=Systèmes de fichiers= | |||
==Montages automatiques== | |||
''Systemd'' Gère certains montages lui même sans passer par le fichier <code>/etc/fstab</code> (géré lui même par [https://www.freedesktop.org/software/systemd/man/latest/systemd-remount-fs.service.html systemd-remount-fs.service]). C'est le cas notamment de <code>/tmp</code> monté en ''tmpfs'' sur les systèmes récents. Trois méthodes sont décrites pour désactiver ou modifier ces montages lorsque cela est possible : | |||
# désactiver l'unité de point de montage associée (<code>unité.mount</code>). Pour <code>/tmp</code>, il est possible de faire <code>systemctl mask tmp.mount</code> | |||
# monter un système de fichiers différent au dessus du point de montage en utilisant <code>/etc/fstab</code> | |||
# ajouter une entrée dans <code>/etc/fstab</code> pour modifier les propriétés du montage actuel | |||
Concernant le point numéro un, de plus amples informations sur les trois niveaux de désactivation d'un service ''Systemd'' sont consultables [https://0pointer.de/blog/projects/three-levels-of-off.html ici]. | |||
===Sources de la section=== | |||
* https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems/ | |||
* https://systemd.io/API_FILE_SYSTEMS/ |
Dernière version du 4 janvier 2025 à 15:59
Redémarrer dans l'UEFI
Il est possible de redémarrer la machine directement dans le menu de configuration de l'UEFI via la commande suivante :
systemctl reboot --firmware-setup
Source de la section
Modification d'un service
Temps d'attente spécifique
Un truck ultra pète couille avec Systemd c'est le temps définit à l'attente de finalisation d'une tâche. Un exemple que vous avez sûrement déjà rencontré : Avec Ubuntu (vu dernièrement avec la 16.04) si vous allumez la machine sans connecter le câble réseau vous avez l'obligation d'attendre au démarrage 5min03 avant de pouvoir utiliser la machine !!! Mais pourquoi avoir développé ça bon sang ? Ils ne testent pas leur système ? Ils ne se rendent pas compte que c'est inutilisable ? On va régler ça avec la bidouille suivante qui consiste à passer de 5min d'attente à 5 secondes, c'est déjà plus supportable.
vim /etc/systemd/system/network-online.target.wants/networking.service
Changez la valeur TimeoutStartSec=5min
en :
TimeoutStartSec=5
Note: l'unité par défaut est la seconde.
Rechargez la configuration de Systemd (ou redémarrez le système)
systemctl daemon-reload
Temps d'attente générique
Il est possible d’interagir avec le temps d'attente de démarrage et d'arrêt par défaut d'un service (au cas où celui-ci n'est pas renseigné dans son fichier) en spécifiant les valeurs suivantes dans la configuration globale /etc/systemd/system.conf
:
DefaultTimeoutStartSec=5s DefaultTimeoutStopSec=5s
Rechargez la configuration de Systemd
systemctl daemon-reload
Gestionnaire utilisateur
Un service mystérieux ralenti considérablement l'extinction de certain Debian Stretch avec comme message a job is running for user manager debian. Encore un truck à la con. Il convient d'installer (pour je ne sais quelle raison) le service watchdog
pour régler ça (pourquoi c'est pas installé de base si ça permet de régler le problème ?).
apt install watchdog systemctl enable watchdog systemctl start watchdog
Sources de la section
- https://ubuntuforums.org/printthread.php?t=2323253&pp=10&page=1
- https://unix.stackexchange.com/questions/230986/a-stop-job-is-running-on-shutdown#284488
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
[Service]
ExecStart=/usr/bin/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/modélisation (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 entrées de journal pendant que l'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.
Sources de la section
- https://mespotesgeek.fr/fr/execution-dun-script-interactif-au-boot-avec-systemd/
- http://www.linuxjournal.com/article/2807
- https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable#704616
Systèmes de fichiers
Montages automatiques
Systemd Gère certains montages lui même sans passer par le fichier /etc/fstab
(géré lui même par systemd-remount-fs.service). C'est le cas notamment de /tmp
monté en tmpfs sur les systèmes récents. Trois méthodes sont décrites pour désactiver ou modifier ces montages lorsque cela est possible :
- désactiver l'unité de point de montage associée (
unité.mount
). Pour/tmp
, il est possible de fairesystemctl mask tmp.mount
- monter un système de fichiers différent au dessus du point de montage en utilisant
/etc/fstab
- ajouter une entrée dans
/etc/fstab
pour modifier les propriétés du montage actuel
Concernant le point numéro un, de plus amples informations sur les trois niveaux de désactivation d'un service Systemd sont consultables ici.