Re: systemd в jessie умирает с SIGFPE

2015-09-17 Пенетрантность Alexander Gerasiov
Hello Eugene,

On Sat, 12 Sep 2015 18:09:07 +0300
Eugene Berdnikov  wrote:

>  Как видно из /etc/inittab, для halt/reboot выполняются скрипт
>  /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ
>  остановки системы. После отработки "rc 0/6" init должен сделать вызов
>  reboot(2) с нужными аргументами. Собственно, если компьютер под
> рукой, то можно просто нажать кнопку. Если же он далеко, и никаких
> инженеров дежурной смены рядом нет (а у меня так почти везде), то
> можно извернуться и вызвать сискол perl'ом -- нужен лишь
> смонтированный на чтение /usr. Мне доводилось так ребутать машины,
> этот способ вполне рабочий.
echo b > /proc/sysrq-trigger



-- 
Best regards,
 Alexander Gerasiov

 Contacts:
 e-mail: g...@cs.msu.su  Homepage: http://gerasiov.net  Skype: gerasiov
 PGP fingerprint: 04B5 9D90 DF7C C2AB CD49  BAEA CA87 E9E8 2AAC 33F1



Re: systemd в jessie умирает с SIGFPE

2015-09-13 Пенетрантность Pavel Volkov

 Как видно из /etc/inittab, для halt/reboot выполняются скрипт
 /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ
 остановки системы. 


При чём тут inittab? В дефолтном jessie нет этого файла.
Вызов /sbin/reboot эквивалентен "systemctl reboot", который стартует 
спец-юнит reboot.target.




Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Руслан Коротаев
В сообщении от [Сб 2015-09-12 16:37 +0300]
Yuriy M. Kaminskiy  пишет:

> Я только что нарвался на неприятный баг: на попытке перезапустить (не
> полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
> делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
> systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
> подбирает zombie, систему можно перезапустить только вручную (убив
> процессы и перемонтировав fs в read-only; ну, или через
> alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д.
> 
> Я нашёл идентичный баг в багтрекире - 
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012
> но он помечен как fixed и archived. Хотя, очевидно, в jessie он
> присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)?

Для повышение надежности системы, в systemd есть функциональность
сторожевых таймеров (watchdog [1]). В случае возникновения проблем,
systemd пытается привести систему в рабочее состояние, путем перезапуска
отдельных сервисов или системы целиком. Здесь об этом подробнее [2].

[1] https://ru.wikipedia.org/wiki/Сторожевой_таймер
[2] http://0pointer.de/blog/projects/watchdog.html

-- 
http://google.com/+РусланКоротаев



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Yuriy M. Kaminskiy
yum...@gmail.com (Yuriy M. Kaminskiy) writes:

> Eugene Berdnikov  writes:
>
>> On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote:
>>> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote:
>>> > Я только что нарвался на неприятный баг: на попытке перезапустить (не
>>> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
>>> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
>>> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
>>> 
>>>  Ядро линукса не блокирует передачу таких сигналов процессу с pid=1.
>>
>>  Оговорился. Наоборот, блокирует. :)
>
> Каких "таких"? SIGFPE? И что бы оно должно было делать по делению на
> ноль? По факту, systemd этот сигнал получает, и реагирует зависанием
> (зовёт freeze(), внутри которого он закрывает все дескрипторы и
> крутится в for(;;) pause();, см. TFS).
>
> [...] kernel: [X.X] traps: systemd[1] trap
>  divide error ip:f772106f sp:ffabdaf4 error:0 in systemd[f765d000+13]
> [...] systemd[1]: Caught , dumped core as pid 4661.
> [...] systemd[1]: Freezing execution.
>
> (корку я посмотрел, backtrace идентичен #774012).
>
> Ожидаемая реакция systemd на SIGINT/SIGTERM и так далее прописана в
> man systemd (SIGTERM эквивалентен systemctl daemon-reexec, SIGINT
> эквивалентен systemctl reboot); в состоянии "намеренного зависания
> внутри обработчика SIGFPE" systemd ни на какие сигналы не реагирует.

... в любом случае, вопрос не в деталях этого бага (всё необходимое есть
в #774012, баг признан, локализован и исправлен в upstream), а в том что:

Есть баг с Severity: important, в критичном компоненте системы, который:

1) был отправлен (не мной) *до* релиза jessie;
2) отмечен как исправленный (и даже ушёл в архив) в трекере;
3) *не был* тем не менее исправлен в jessie, исправленная версия
отсутствует в jessie-backports, и так далее;
4) судя по всему, срабатывает случайно, никаких путей обхода или
очевидных "а вы не делайте так" нет.

WTF?



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Yuriy M. Kaminskiy
Eugene Berdnikov  writes:

> On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote:
>> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote:
>> > Я только что нарвался на неприятный баг: на попытке перезапустить (не
>> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
>> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
>> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
>> 
>>  Ядро линукса не блокирует передачу таких сигналов процессу с pid=1.
>
>  Оговорился. Наоборот, блокирует. :)

Каких "таких"? SIGFPE? И что бы оно должно было делать по делению на
ноль? По факту, systemd этот сигнал получает, и реагирует зависанием
(зовёт freeze(), внутри которого он закрывает все дескрипторы и
крутиться в for(;;) pause();, см. TFS).

[...] kernel: [X.X] traps: systemd[1] trap
 divide error ip:f772106f sp:ffabdaf4 error:0 in systemd[f765d000+13]
[...] systemd[1]: Caught , dumped core as pid 4661.
[...] systemd[1]: Freezing execution.

(корку я посмотрел, backtrace идентичен #774012).

Ожидаемая реакция systemd на SIGINT/SIGTERM и так далее прописана в man systemd
(SIGTERM эквивалентен systemctl daemon-reexec, SIGINT эквивалентен systemctl 
reboot); в
состоянии "намеренного зависания внутри обработчика SIGFPE" systemd ни на какие 
сигналы
не реагирует.



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Yuriy M. Kaminskiy
Руслан Коротаев  writes:

> В сообщении от [Сб 2015-09-12 16:37 +0300]
> Yuriy M. Kaminskiy  пишет:
>
>> Я только что нарвался на неприятный баг: на попытке перезапустить (не
>> полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
>> делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
>> systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
>> подбирает zombie, систему можно перезапустить только вручную (убив
>> процессы и перемонтировав fs в read-only; ну, или через
>> alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д.
>> 
>> Я нашёл идентичный баг в багтрекире - 
>> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012
>> но он помечен как fixed и archived. Хотя, очевидно, в jessie он
>> присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)?
>
> Для повышение надежности системы, в systemd есть функциональность
> сторожевых таймеров (watchdog [1]). В случае возникновения проблем,
> systemd пытается привести систему в рабочее состояние, путем перезапуска
> отдельных сервисов или системы целиком. Здесь об этом подробнее [2].
>
> [1] https://ru.wikipedia.org/wiki/Сторожевой_таймер
> [2] http://0pointer.de/blog/projects/watchdog.html

Проблема только в том, что в данном случае помер/завис сам
systemd (pid=1). Перезапускать его некому.



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Eugene Berdnikov
On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote:
> Я только что нарвался на неприятный баг: на попытке перезапустить (не
> полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
> делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
> systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не

 Ядро линукса не блокирует передачу таких сигналов процессу с pid=1.

> подбирает zombie, систему можно перезапустить только вручную (убив
> процессы и перемонтировав fs в read-only; ну, или через
> alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д.

 Как видно из /etc/inittab, для halt/reboot выполняются скрипт
 /etc/init.d/rc с аргументом 0 или 6. Это и есть штатный способ
 остановки системы. После отработки "rc 0/6" init должен сделать вызов
 reboot(2) с нужными аргументами. Собственно, если компьютер под рукой,
 то можно просто нажать кнопку. Если же он далеко, и никаких инженеров
 дежурной смены рядом нет (а у меня так почти везде), то можно извернуться
 и вызвать сискол perl'ом -- нужен лишь смонтированный на чтение /usr.
 Мне доводилось так ребутать машины, этот способ вполне рабочий.
-- 
 Eugene Berdnikov



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Eugene Berdnikov
On Sat, Sep 12, 2015 at 06:09:07PM +0300, Eugene Berdnikov wrote:
> On Sat, Sep 12, 2015 at 04:37:59PM +0300, Yuriy M. Kaminskiy wrote:
> > Я только что нарвался на неприятный баг: на попытке перезапустить (не
> > полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
> > делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
> > systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
> 
>  Ядро линукса не блокирует передачу таких сигналов процессу с pid=1.

 Оговорился. Наоборот, блокирует. :)
-- 
 Eugene Berdnikov



systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Yuriy M. Kaminskiy
Я только что нарвался на неприятный баг: на попытке перезапустить (не
полностью стартовавший) сервис, systemd помер с SIGFPE на целочисленном
делении на 0 (точнее, намерено завис в обработчике сигнала). При этом
systemd не реагирует ни на что [systemctl, kill -INT 1, и т.д.], не
подбирает zombie, систему можно перезапустить только вручную (убив
процессы и перемонтировав fs в read-only; ну, или через
alt-sysrq-e-u-s-b; halt/reboot, естественно, не работают), и.т.д.

Я нашёл идентичный баг в багтрекире - 
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=774012
но он помечен как fixed и archived. Хотя, очевидно, в jessie он
присутствует и *не* исправлен. Что с этим можно сделать (и можно ли)?



Re: systemd в jessie умирает с SIGFPE

2015-09-12 Пенетрантность Дмитрий Фёдоров
12 сентября 2015 г., 19:37 пользователь Yuriy M. Kaminskiy написал:
> systemd помер

Туда ему дорога.