logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 09-07-2021 14:26:04

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

[Résolu]poweroff ne termine pas si pas appelé par la console

Re-re-bonjour,

Quand j'appelle poweroff en root dans une console la machine s'éteint as expected.

Quand je mets '/sbin/poweroff' comme chaîne de caractère à exécuter dans un programme écrit en Pascal (ide Lazarus) et compilé avec FreePascal et que je le fais exécuter par root, tout s'exécute (fermeture des programmes, des services, démontage des disques, tout ça toussa) sauf l'extinction finale.

Le même code dans ma vieille Wheezy 32 bits s'exécute parfaitement et totalement depuis des années.

Une idée de ce qui a pu changer au passage en Buster 64 bits ?
Merci,

Dernière modification par jpt (09-07-2021 18:46:56)


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#2 09-07-2021 18:46:11

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Bonsoir,

il fallait rajouter une option, des choses ont changé en 8 ans :

-p, --poweroff
    Power-off the machine, regardless of which one of the three commands is invoked.


source

Ce qui est bizarre, quand même, c'est que la commande en console n'a pas besoin de cette option "-p" pour faire le taf.

Dernière modification par jpt (09-07-2021 18:48:06)


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#3 10-07-2021 11:46:20

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

des choses ont changé en 8 ans


Ce qui a changé à partir de jessie, c'est que systemd a remplacé sysvinit, avec pour conséquence que halt, poweroff et reboot sont devenus des liens symboliques pointant vers systemctl. Auparavant, poweroff était un lien symbolique pointant vers halt, et ce dernier éteignait la machine lorsqu'il était invoqué en tant que poweroff.

jpt a écrit :

Ce qui est bizarre, quand même, c'est que la commande en console n'a pas besoin de cette option "-p" pour faire le taf.


Non, c'est le comportement normal. C'est le comportement lorsque poweroff est exécuté par ton programme qui est bizarre, comme si systemctl considérait qu'il a été invoqué en tant que halt et non poweroff.


Il vaut mieux montrer que raconter.

Hors ligne

#4 10-07-2021 18:59:24

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Bonsoir,

raleur a écrit :

C'est le comportement lorsque poweroff est exécuté par ton programme qui est bizarre, comme si systemctl considérait qu'il a été invoqué en tant que halt et non poweroff.


Alors j'ai fait autrement : dans la chaîne à exécuter je mets /usr/bin/systemctl en lui passant le paramètre poweroff, et ça fonctionne.

Allez, vendu.

Dernière modification par jpt (10-07-2021 19:07:57)


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#5 10-07-2021 19:22:38

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Attention, l'exécutable systemctl est installé par le paquet systemd dans /bin et non dans /usr/bin, conformément au principe selon lequel systemd n'a pas besoin de /usr qui n'est pas forcément monté lorsque systemd démarre.

dpkg -S $(which -a systemctl)


dpkg-query: aucun chemin ne correspond à /usr/bin/systemctl
systemd: /bin/systemctl


On le voit aussi dans /usr/bin à cause de la "fusion d'usr" (/usr merge), appliquée à l'installation de Debian à partir de buster, qui fait de /bin un lien symbolique vers /usr/bin. Mais ce n'est pas forcément le cas partout (versions précédentes ou mises à jour sans installer le paquet usrmerge, autres distributions...). Donc en toute rigueur il faudrait mettre "/bin/systemctl" s'il faut spécifier le chemin complet. C'est d'ailleurs la cible des liens symboliques halt, poweroff et reboot.

Dernière modification par raleur (10-07-2021 20:49:48)


Il vaut mieux montrer que raconter.

Hors ligne

#6 11-07-2021 09:55:05

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Bonjour,

raleur a écrit :

l'exécutable systemctl est installé par le paquet systemd dans /bin et non dans /usr/bin

Ah !…

$ updatedb
$ locate systemctl
/usr/bin/systemctl
/usr/share/bash-completion/completions/systemctl
/usr/share/man/man1/systemctl.1.gz
/usr/share/zsh/vendor-completions/_systemctl
$
$ dpkg -S $(which -a systemctl)
dpkg-query: aucun chemin ne correspond à /usr/bin/systemctl
systemd: /bin/systemctl
 


Quant à ce lien systemd dans le lien /bin, il pointe vers /lib/systemd/systemd, /lib étant un lien vers /usr/lib.

raleur a écrit :

conformément au principe selon lequel systemd n'a pas besoin de /usr qui n'est pas forcément monté lorsque systemd démarre.

Euh, là je ne comprends pas : si /usr n'est pas encore monté, alors /usr/bin n'est pas disponible et le lien /bin pointant dessus pointe sur rien, du coup -- non ?

Dernière modification par jpt (11-07-2021 10:21:49)


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#7 11-07-2021 10:51:39

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

$ updatedb
$ locate systemctl
/usr/bin/systemctl


locate ne liste pas les chemins contenant des liens symboliques.

jpt a écrit :

Quant à ce lien systemd dans le lien /bin, il pointe vers /lib/systemd/systemd


Que vient faire /bin/systemd ici ? Je n'en ai pas parlé.

jpt a écrit :

si /usr n'est pas encore monté, alors /usr/bin n'est pas disponible et le lien pointant dessus (/bin) pointe sur rien, non ?


Tu as raison dans le cas d'un système qui a fait la fusion de /usr. C'est pourquoi un prérequis à la fusion de /usr en combinaison avec /usr séparé est le montage de /usr par l'initramfs, avant de passer la main à l'init de la racine (qui pointe vers systemd).

Pas d'inquiétude, l'initramfs généré par initramfs-tools le fait déjà (je ne sais plus depuis quelle version exactement) car en pratique c'était devenu un prérequis à l'utilisation d'un /usr séparé de toute façon, pas à cause de systemd mais d'autres paquets qui mettent en place des services ou des règles udev utilisant des ressources (exécutables, bibliothèques...) installées dans /usr et pouvant être activés avant le montage de /usr. En toute rigueur ces paquets devraient s'installer dans /bin, /sbin et /lib* uniquement, et toutes leurs dépendances devraient faire de même, mais en pratique c'est difficile à identifier et ça ferait beaucoup grossir la racine alors qu'un des objectifs d'un /usr séparé est d'avoir une racine de petite taille.

Il y a d'autres effets de bords à la séparation + fusion de /usr. Par exemple un tel système peut ne pas être détecté par os-prober car celui-ci vérifie la présence d'un fichier dans /lib (qui devient un lien symbolique vers /usr/lib) mais ne monte pas /usr.

Pour finir, il y a très peu de cas qui justifient encore l'utilisation d'un /usr séparé.

Dernière modification par raleur (11-07-2021 10:54:19)


Il vaut mieux montrer que raconter.

Hors ligne

#8 11-07-2021 11:18:24

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

raleur a écrit :

locate ne liste pas les chemins contenant des liens symboliques.

Je ne savais pas. Merci.

raleur a écrit :

Que vient faire /bin/systemd ici ? Je n'en ai pas parlé.

Toi non, mais le retour de ta commande

$ dpkg -S $(which -a systemctl)
dpkg-query: aucun chemin ne correspond à /usr/bin/systemctl
systemd: /bin/systemctl

m'a fait aller voir dans (le lien) /bin où j'ai donc trouvé un lien systemd (qui pointe sur /lib/systemd/systemd).

raleur a écrit :

Pas d'inquiétude, l'initramfs généré par initramfs-tools le fait déjà

parle pour toi lol:

$ lsinitramfs /boot/initrd.img-5.7.10 | grep system
usr/lib/modprobe.d/systemd.conf
usr/lib/systemd
usr/lib/systemd/network
usr/lib/systemd/network/99-default.link
usr/lib/systemd/systemd-udevd

et c'est tout.


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#9 11-07-2021 11:55:24

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

lsinitramfs /boot/initrd.img-5.7.10 | grep system


Qu'est-ce que c'est censé montrer ?
En quoi cela contredit-il le fait que l'initramfs monte /usr ?
Quel rapport avec systemd ?

Dernière modification par raleur (11-07-2021 11:56:26)


Il vaut mieux montrer que raconter.

Hors ligne

#10 11-07-2021 12:02:32

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

raleur a écrit :

Qu'est-ce que c'est censé montrer ?

Qu'il n'y a que 5 lignes /usr/lib/... donc /usr/bin n'est pas là.

raleur a écrit :

En quoi cela contredit-il le fait que l'initramfs monte /usr ?

Pas que ça contredise, mais je trouve le retour de lsinitramfs un peu léger concernant /usr.

raleur a écrit :

Quel rapport avec systemd ?

C'est venu à la suite de la discussion.


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#11 11-07-2021 12:32:25

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

Qu'il n'y a que 5 lignes /usr/lib/... donc /usr/bin n'est pas là.


Tu cherches /usr/bin en faisant un grep sur "system" ? Ce n'est pas très cohérent.

De toute façon ce n'est pas de ça que je parle. L'initramfs monte /usr après avoir monté la racine s'il y a une ligne correspondante dans /etc/fstab de la racine, ça n'a rien à voir avec l'organisation du contenu de l'initramfs lui-même.

Dernière modification par raleur (11-07-2021 12:33:33)


Il vaut mieux montrer que raconter.

Hors ligne

#12 11-07-2021 13:32:57

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

raleur a écrit :

Tu cherches /usr/bin en faisant un grep sur "system" ? Ce n'est pas très cohérent.

C'est le retour de

locate systemctl
/usr/bin/systemctl

qui m'a fait penser à chercher les lignes qui embarquaient system*.

raleur a écrit :

L'initramfs monte /usr après avoir monté la racine s'il y a une ligne correspondante dans /etc/fstab de la racine

correspondante à quoi ? Précise un peu, ce n'est pas clair pour moi ce comportement (= cette phrase).

Faut dire aussi que ces choses, on les met en place à l'install de la machine, on tune bien, on tweake à donf', on se prend la tête et une fois que ça roule tip-top on n'y touche plus, on passe en prod' et très vite on oublie tout.
Et pour peu qu'il faille un jour lointain remettre les mains dans le cambouis, il y a toutes les chances du monde pour que plein de trucs aient changé, auquel cas on retourne à l'école informatique niveau maternelle ou à peine supérieur… tongue


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#13 11-07-2021 13:50:54

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

C'est le retour de

locate systemctl


qui m'a fait penser à chercher les lignes qui embarquaient system*.


Décidément, ta logique m'échappe. Pourquoi chercher "system" dans l'initramfs qui ne contient pas systemd (les fichiers trouvés appartiennent à udev qui est bien embarqué dans l'initramfs, lui) ? Pour rappel, systemd est le système d'init, ce qui est démarré après l'initramfs. Et surtout, pourquoi déduire l'absence de /usr/bin du résultat de cette recherche ?

jpt a écrit :

correspondante à quoi ?


A /usr. Je me demande si ça marche aussi si quelqu'un est assez pervers pour définir le montage de /usr dans une unité native systemd.mount au lieu de fstab.


Il vaut mieux montrer que raconter.

Hors ligne

#14 11-07-2021 13:59:00

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

raleur a écrit :

les fichiers trouvés appartiennent à udev qui est bien embarqué dans l'initramfs, lui

Comment tu sais ça, toi ? Pour info,

$ lsinitramfs /boot/initrd.img-5.7.10 | grep udev
etc/udev
etc/udev/udev.conf
scripts/init-bottom/udev
scripts/init-top/udev
usr/bin/udevadm
usr/lib/systemd/systemd-udevd
usr/lib/udev
usr/lib/udev/ata_id
usr/lib/udev/rules.d
usr/lib/udev/rules.d/50-firmware.rules
usr/lib/udev/rules.d/50-udev-default.rules
usr/lib/udev/rules.d/55-dm.rules
usr/lib/udev/rules.d/60-block.rules
usr/lib/udev/rules.d/60-persistent-storage-dm.rules
usr/lib/udev/rules.d/60-persistent-storage.rules
usr/lib/udev/rules.d/60-vboxdrv.rules
usr/lib/udev/rules.d/71-seat.rules
usr/lib/udev/rules.d/73-special-net-names.rules
usr/lib/udev/rules.d/73-usb-net-by-mac.rules
usr/lib/udev/rules.d/75-net-description.rules
usr/lib/udev/rules.d/80-drivers.rules
usr/lib/udev/rules.d/80-net-setup-link.rules
usr/lib/udev/rules.d/95-dm-notify.rules
usr/lib/udev/scsi_id
usr/lib/x86_64-linux-gnu/libudev.so.1
usr/lib/x86_64-linux-gnu/libudev.so.1.6.13
 



raleur a écrit :

pourquoi déduire l'absence de /usr/bin du résultat de cette recherche ?

Parce que je n'ai rien vu concernant ce dossier. Mais probablement que quelque chose m'échappe, là.


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#15 11-07-2021 15:14:19

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

raleur a écrit :

les fichiers trouvés appartiennent à udev


Comment tu sais ça, toi ?


J'ai demandé à un ami : dpkg -S.
Attention : il faut retirer usr au début du chemin car l'initramfs réplique l'organisation du système donc bin, lib*, sbin y sont aussi des liens symboliques vers usr.

Correction : /lib/modprobe.d/systemd.conf n'appartient pas à udev mais bien à systemd. C'est pour une autre raison qu'il est inclus dans l'initramfs : son emplacement /lib/modprobe.d qui en fait un fichier de configuration utilisé par modprobe qui est inclus dans l'initramfs.

jpt a écrit :

raleur a écrit :

pourquoi déduire l'absence de /usr/bin du résultat de cette recherche ?


Parce que je n'ai rien vu concernant ce dossier. Mais probablement que quelque chose m'échappe, là.


Ce qui t'échappe peut-être, c'est que ton grep n'affiche que les fichiers ou chemins contenant "system" donc tout ce que ça t'apprend c'est qu'il n'y a pas de fichier dont le chemin contient à la fois "system" et "usr/bin", ce qui n'avance pas beaucoup. Si tu fais un grep sur "usr/bin" à la place tu auras plein de résultats.


Il vaut mieux montrer que raconter.

Hors ligne

#16 12-07-2021 07:34:24

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Yep !

raleur a écrit :

il n'y a pas de fichier dont le chemin contient à la fois "system" et "usr/bin"

je pensais y trouver au moins ça :

jpt a écrit :

$ locate systemctl
/usr/bin/systemctl


Bon, je propose qu'on ne passe pas la semaine là-dessus, j'ai corrigé mon source Pascal, l'ai recompilé, ai testé le binaire et tout va bien, je vais pouvoir avancer : j'ai plein de progs 32 bits à recompiler en 64, en espérant ne pas tomber à chaque fois dans une chausse-trape de changement de version et de comportement !

Bonne semaine, et encore merci pour tout (tes précisions, ta patience, etc.)


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#17 12-07-2021 19:14:53

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

jpt a écrit :

je pensais y trouver au moins ça :
    /usr/bin/systemctl


systemctl est le programme de contrôle de systemd. Or je répète que systemd n'est pas inclus dans l'initramfs, donc systemctl n'a rien à y faire.


Il vaut mieux montrer que raconter.

Hors ligne

#18 13-07-2021 09:34:05

jpt
Banni(e)
Distrib. : Debian 10.8
Noyau : Linux 5.7.10 (backports)
(G)UI : LXDE
Inscription : 12-09-2020

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

raleur a écrit :

Or je répète que systemd n'est pas inclus dans l'initramfs, donc systemctl n'a rien à y faire.

Tu as raison :

$ lsinitramfs initrd.img-5.7.10 | grep systemctl
$



raleur a écrit :

Or je répète que systemd n'est pas inclus dans l'initramfs, donc systemctl n'a rien à y faire.

Mais on y trouve au moins un petit bout :

$ lsinitramfs initrd.img-5.7.10 | grep systemd
usr/lib/modprobe.d/systemd.conf
usr/lib/systemd
usr/lib/systemd/network
usr/lib/systemd/network/99-default.link
usr/lib/systemd/systemd-udevd
$


AMD Ryzen3 3200G sur Gigabyte B450M & Make Love Not War

Hors ligne

#19 13-07-2021 12:51:50

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu]poweroff ne termine pas si pas appelé par la console

Comme je l'ai déjà expliqué, ces trois fichiers sont inclus soit parce que le premier est utilisé par modprobe et les deux autres appartiennent à udev.

Il vaut mieux montrer que raconter.

Hors ligne

Pied de page des forums