| Summary: | Не работают busybox reboot, poweroff, halt | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Artem Varaksa <varaksaaa> | ||||||||
| Component: | busybox | Assignee: | Vitaly Chikunov <vt> | ||||||||
| Status: | CLOSED WONTFIX | QA Contact: | qa-sisyphus | ||||||||
| Severity: | normal | ||||||||||
| Priority: | P5 | CC: | antohami, vt | ||||||||
| Version: | unstable | ||||||||||
| Hardware: | x86_64 | ||||||||||
| OS: | Linux | ||||||||||
| Attachments: |
|
||||||||||
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
```
|
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