Bug 27666 - telinit -u works strange and breaks glibc uprades
Summary: telinit -u works strange and breaks glibc uprades
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: systemd-sysvinit (show other bugs)
Version: unstable
Hardware: all Linux
: P3 blocker
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL:
Keywords:
: 27679 (view as bug list)
Depends on:
Blocks:
 
Reported: 2012-08-24 21:28 MSK by Evgenii Terechkov
Modified: 2016-03-01 19:37 MSK (History)
10 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Evgenii Terechkov 2012-08-24 21:28:17 MSK
Текущий Сизиф, systemd. По apt-get dist-upgrade получил:

Preparing...                        ################################################################################################### [100%]
 1: glibc-preinstall                ################################################################################################### [  3%]
 2: glibc-core                      ################################################################################################### [  6%]
error: execution of %post scriptlet from glibc-core-2.16-alt1 failed, exit status 1
 3: i586-glibc-core                 ################################################################################################### [ 10%]
 4: libgcc1                         ################################################################################################### [ 13%]
 5: glibc-pthread                   ################################################################################################### [ 17%]
 6: libstdc++6                      ################################################################################################### [ 20%]
 7: libpoppler27                    ################################################################################################### [ 24%]
 8: glibc-gconv-modules             ################################################################################################### [ 27%]
 9: i586-libgcc1                    ################################################################################################### [ 31%]
10: i586-glibc-pthread              ################################################################################################### [ 34%]
11: iconv                           ################################################################################################### [ 37%]
12: libpoppler8-glib                ################################################################################################### [ 41%]
13: glibc-locales                   ################################################################################################### [ 44%]
14: glibc-timezones                 ################################################################################################### [ 48%]
15: glibc-utils                     ################################################################################################### [ 51%]
16: glibc-nss                       ################################################################################################### [ 55%]
17: libquadmath0                    ################################################################################################### [ 58%]
18: gcc-common                      ################################################################################################### [ 62%]
19: glibc-devel                     ################################################################################################### [ 65%]
20: i586-glibc-gconv-modules        ################################################################################################### [ 68%]
21: i586-libstdc++6                 ################################################################################################### [ 72%]
22: libgfortran3                    ################################################################################################### [ 75%]
23: libgomp1                        ################################################################################################### [ 79%]
24: libpoppler-gir                  ################################################################################################### [ 82%]
25: poppler                         ################################################################################################### [ 86%]
26: libpoppler26                    ################################################################################################### [ 89%]
27: gcc-c++-common                  ################################################################################################### [ 93%]
28: jpackage-utils                  ################################################################################################### [ 96%]
E: Some errors occurred while running transaction
E: Handler silently failed

~#rpm -q --scripts glibc-core
preinstall program: /sbin/glibc_preinstall
postinstall program: /sbin/glibc_post_upgrade
preinstall program: /sbin/glibc_preinstall
postinstall program: /sbin/glibc_post_upgrade
~#/sbin/glibc_post_upgrade
Failed to issue method call: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
~#rpm -qf /sbin/glibc_post_upgrade
glibc-core-2.11.3-alt8
glibc-core-2.16-alt1
Comment 1 Dmitry V. Levin 2012-08-24 21:40:47 MSK
(In reply to comment #0)
> Текущий Сизиф, systemd. По apt-get dist-upgrade получил:
> error: execution of %post scriptlet from glibc-core-2.16-alt1 failed, exit
> status 1

glibc-core тут оказался крайним.
На самом деле у вас в системе есть telinit, но "telinit u", видимо, не работает.
(между прочим, что у вас выводит и с каким кодом завершается "telinit u"?)

С другой стороны, если ваша система на systemd, то зачем вам пакет sysvinit?
Comment 2 Evgenii Terechkov 2012-08-24 23:12:50 MSK
Выводит точно то же самое (как и systemctl daemon-reexec):

~#telinit u
Failed to issue method call: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
~#echo $?
0

Как я понимаю, этот самый 0 и указывает на некорректную работу, как минимум, systemd-sysvinit/systemd. Стоит перевесить или я ошибаюсь?

systemd-sysvinit больше для того, чтобы не менять сложившиеся привычки.

И ещё, как лучше восстановить систему из такого состояния (два пакета glibc-core)?
Comment 3 AEN 2012-08-25 00:31:17 MSK
(В ответ на комментарий №2)
> И ещё, как лучше восстановить систему из такого состояния (два пакета
> glibc-core)?

rpm -e --nodeps glibc-core-2.11.3
У меня после этого проблем не было.
Comment 4 Dmitry V. Levin 2012-08-25 00:33:40 MSK
(In reply to comment #3)
> (В ответ на комментарий №2)
> > И ещё, как лучше восстановить систему из такого состояния (два пакета
> > glibc-core)?
> 
> rpm -e --nodeps glibc-core-2.11.3
> У меня после этого проблем не было.

Зачем --nodeps?
Comment 5 AEN 2012-08-25 00:36:58 MSK
(В ответ на комментарий №4)
> (In reply to comment #3)
> > (В ответ на комментарий №2)
> > > И ещё, как лучше восстановить систему из такого состояния (два пакета
> > > glibc-core)?
> > 
> > rpm -e --nodeps glibc-core-2.11.3
> > У меня после этого проблем не было.
> 
> Зачем --nodeps?

Да, наверное, это было лишнее.
Comment 6 Dmitry V. Levin 2012-08-25 00:39:12 MSK
(In reply to comment #2)
> Выводит точно то же самое (как и systemctl daemon-reexec):
> 
> ~#telinit u
> Failed to issue method call: Did not receive a reply. Possible causes include:
> the remote application did not send a reply, the message bus security policy
> blocked the reply, the reply timeout expired, or the network connection was
> broken.
> ~#echo $?
> 0
> 
> Как я понимаю, этот самый 0 и указывает на некорректную работу

Этот 0 как раз указывает на корректное завершение, несмотря на ругань, смысл которой неплохо было бы понять.
А вот во время обновления glibc вместо 0 код завершения был 1.
Похоже на какие-то особенности поведения systemd.
Comment 7 Dmitry V. Levin 2012-08-25 01:16:53 MSK
Перевешиваю на systemd-sysvinit, поскольку telinit, странное поведение которого осложняет обновление glibc, из этого пакета.
Comment 8 Alexey Shabalin 2012-08-26 17:24:34 MSK
Я сравнил наш glibc_post_upgrade.c и из fedora.
у нас используется проверка:
       /* Check if telinit is available and the init fifo as well.  */
        if (access (telinit_path, X_OK) || access ("/dev/initctl", F_OK))
                return 0;

Такая проверка использовалась в fedora-8.
Сейчас там:
  /* Check if telinit is available and either SysVInit fifo,
     or upstart telinit.  */
  if (access ("/sbin/telinit", X_OK)
      || ((!!access ("/dev/initctl", F_OK))
          ^ !access ("/sbin/initctl", X_OK)))
    _exit (0);

Я думаю, если внести такие изменения в glibc_post_upgrade.c, то обновление glibc у нас тоже будет происходить без проблем.
Comment 9 Dmitry V. Levin 2012-08-26 18:33:51 MSK
(In reply to comment #8)
> Я сравнил наш glibc_post_upgrade.c и из fedora.
> у нас используется проверка:
>        /* Check if telinit is available and the init fifo as well.  */
>         if (access (telinit_path, X_OK) || access ("/dev/initctl", F_OK))
>                 return 0;
> 
> Такая проверка использовалась в fedora-8.
> Сейчас там:
>   /* Check if telinit is available and either SysVInit fifo,
>      or upstart telinit.  */
>   if (access ("/sbin/telinit", X_OK)
>       || ((!!access ("/dev/initctl", F_OK))
>           ^ !access ("/sbin/initctl", X_OK)))
>     _exit (0);
> 
> Я думаю, если внести такие изменения в glibc_post_upgrade.c, то обновление
> glibc у нас тоже будет происходить без проблем.

Другими словами, в федоре с мая 2008 года glibc_post_upgrade вообще не делает "telinit u".  Думаю, что это ошибка.  Если "telinit u" в systemd не может работать в принципе, то зачем он такой вообще нужен?
Comment 10 Alexey Shabalin 2012-08-28 17:47:42 MSK
вот что обнаружилось в dmesg при обновлении:
[1541516.951306] telinit[28180] general protection ip:7f3f08a328ae sp:7fff0776e490 error:0 in libpthread-2.11.3.so[7f3f08a2d000+17000]

о чём это может говорить?
Comment 11 Evgenii Terechkov 2012-08-28 18:18:30 MSK
Хм, у меня тоже было:

syslog/messages.1.bz2:Aug 25 01:12:21 thinkpad kernel: [524336.362363] telinit[8450] general protection ip:7f31d4e9d8ae sp:7fff552ae960 error:0 in libpthread-2.11.3.so[7f31d4e98000+17000]
Comment 12 Dmitry V. Levin 2012-08-28 19:19:14 MSK
(In reply to comment #10)
> вот что обнаружилось в dmesg при обновлении:
> [1541516.951306] telinit[28180] general protection ip:7f3f08a328ae
> sp:7fff0776e490 error:0 in libpthread-2.11.3.so[7f3f08a2d000+17000]
> 
> о чём это может говорить?

Если telinit сегфолтится, то, скорее всего, в нем есть ошибка.
Comment 13 Dmitry V. Levin 2012-08-29 20:10:48 MSK
*** Bug 27679 has been marked as a duplicate of this bug. ***
Comment 14 Alexey Shabalin 2012-08-30 15:51:58 MSK
Предположительно ошибка исправлена в апстриме и вошла в v189.
http://cgit.freedesktop.org/systemd/systemd/commit/?id=c516c8d17f77a1c761447f4c40c8dfffeda2e06d

Но при dist-upgrade glibc-core и systemd обновляются вместе (glibc-core первым), и ошибка конечно проявляется. Как её избежать я не знаю.
Comment 15 Dmitry V. Levin 2012-08-31 03:43:42 MSK
(In reply to comment #14)
> Предположительно ошибка исправлена в апстриме и вошла в v189.
> http://cgit.freedesktop.org/systemd/systemd/commit/?id=c516c8d17f77a1c761447f4c40c8dfffeda2e06d

Скоро можно будет проверить.

> Но при dist-upgrade glibc-core и systemd обновляются вместе (glibc-core
> первым), и ошибка конечно проявляется. Как её избежать я не знаю.

Вопрос решается переносом запуска "telinit u" из glibc-core %post в 0ldconfig.filetrigger.  Тем самым, кстати, автоматически решится вопрос перезапуска init'а при обновлении любой из библиотек, которые он использует, а не только тех, что упакованы в glibc-core.
Comment 16 Repository Robot 2012-08-31 04:38:07 MSK
glibc-6:2.16-alt2 -> sisyphus:

* Wed Aug 29 2012 Dmitry V. Levin <ldv@altlinux> 6:2.16-alt2
- locales/ru_RU: fixed abday (sw#10873) and abmon.
- ru.po: reintroduced fixes from 2.11.3-alt8.
- sys/cdefs.h: fixed support of old compilers (sw#13741, sw#14530).
- glibc_post_upgrade: moved telinit support to 0ldconfig.filetrigger
  (closes: #27666).
Comment 17 Evgenii Terechkov 2016-03-01 19:37:50 MSK
Сегодня пытался обновлять стартеркит p7 до сизифа. Точнее менять sysvinit на systemd с последующим dist-upgrade. Столкнулся с тем, что "telinit u" (уже из пакета systemd-sysvinit-228-alt2) просто зависает и бессрочно долго висит при вызове из 0ldconfig.filetrigger. В итоге штатно мигрировать/обновиться не получается.

Сдаётся, ногу растут примерно отсюда.