Created attachment 17955 [details] busybox-reboot.strace.txt Шаги ==== По ssh или в tty: # busybox reboot # busybox poweroff # busybox halt Фактический результат ===================== Ничего не происходит. Команды завершаются успешно и ничего не выводят. strace прикреплён. Ожидаемый результат =================== Перезагрузка, выключение, остановка системы. Воспроизводимость ================= Воспроизводится на виртуальных машинах: [p11+377443] [sisyphus] ALT Server 11.0 beta20250213 x86_64 busybox-1.37.0-alt1.x86_64 [p11] ALT Workstation 11.0 beta20250213 x86_64 busybox-1.36.1-alt1.x86_64
Created attachment 17956 [details] busybox-poweroff.strace.txt
Created attachment 17957 [details] busybox-halt.strace.txt
busybox не заменяет всю систему, это минималистичная утилита для работы в ограниченной среде - initrd, контейнеров или для rescue. Философия busybox предоставлять только минимум необходимого функционала без удобств и 100% совместимости с полной системой - тот функционал который он предоставляет можно использовать если использовать правильно. Данное поведение as intended - поддержки sysv/systemd нет так как есть поддержка bbox init, которая более важна - а если у вас есть полная система, то вам не нужен минималистичный функционал busybox. [Однако, для чего-то может быть полезно сделать совместимость в будущих версиях, добавлю это в todo.] Сейчас можно сделать ребут добавив опцию -f (которая обходит init): busybox reboot -f
Я сначала закодил эту фичу, но теперь решил, что это misuse для busybox и не буду ее добавлять. На всякий случай diff ``` diff --git a/init/halt.c b/init/halt.c index 7aea8cfec..0afefccc0 100644 --- a/init/halt.c +++ b/init/halt.c @@ -38,7 +38,7 @@ //config:config FEATURE_CALL_TELINIT //config: bool "Call telinit on shutdown and reboot" //config: default y -//config: depends on (HALT || POWEROFF || REBOOT) && !INIT +//config: depends on (HALT || POWEROFF || REBOOT) //config: help //config: Call an external program (normally telinit) to facilitate //config: a switch to a proper runlevel. @@ -220,12 +220,8 @@ int halt_main(int argc UNUSED_PARAM, char **argv) } if (rc) { /* talk to init */ - if (!ENABLE_FEATURE_CALL_TELINIT) { - /* bbox init assumed */ - rc = kill(1, signals[which]); - if (init_was_not_there()) - rc = kill(1, signals[which]); - } else { + if (ENABLE_FEATURE_CALL_TELINIT && + !access(CONFIG_TELINIT_PATH, F_OK)) { /* SysV style init assumed */ /* runlevels: * 0 == shutdown @@ -238,6 +234,12 @@ int halt_main(int argc UNUSED_PARAM, char **argv) bb_perror_msg_and_die("can't execute '%s'", CONFIG_TELINIT_PATH); } + if (ENABLE_INIT) { + /* bbox init assumed */ + rc = kill(1, signals[which]); + if (init_was_not_there()) + rc = kill(1, signals[which]); + } } } else { rc = reboot(magic[which]); diff --git a/config b/config index 74f27f192..16c40640a 100644 --- a/config +++ b/config @@ -507,8 +507,8 @@ CONFIG_HALT=y CONFIG_POWEROFF=y CONFIG_REBOOT=y CONFIG_FEATURE_WAIT_FOR_INIT=y -# CONFIG_FEATURE_CALL_TELINIT is not set -CONFIG_TELINIT_PATH="" +CONFIG_FEATURE_CALL_TELINIT=y +CONFIG_TELINIT_PATH="/sbin/telinit" CONFIG_INIT=y CONFIG_LINUXRC=y CONFIG_FEATURE_USE_INITTAB=y ```