Bug 27666 - telinit -u works strange and breaks glibc uprades
: telinit -u works strange and breaks glibc uprades
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/systemd-sysvinit)
: unstable
: all Linux
: P3 blocker
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2012-08-24 21:28 by
Modified: 2016-03-01 19:37 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2012-08-24 21:28:17
Текущий Сизиф, 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 From 2012-08-24 21:40:47 -------
(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 From 2012-08-24 23:12:50 -------
Выводит точно то же самое (как и 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 From 2012-08-25 00:31:17 -------
(В ответ на комментарий №2)
> И ещё, как лучше восстановить систему из такого состояния (два пакета
> glibc-core)?

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

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

Да, наверное, это было лишнее.
------- Comment #6 From 2012-08-25 00:39:12 -------
(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 From 2012-08-25 01:16:53 -------
Перевешиваю на systemd-sysvinit, поскольку telinit, странное поведение которого
осложняет обновление glibc, из этого пакета.
------- Comment #8 From 2012-08-26 17:24:34 -------
Я сравнил наш 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 From 2012-08-26 18:33:51 -------
(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 From 2012-08-28 17:47:42 -------
вот что обнаружилось в dmesg при обновлении:
[1541516.951306] telinit[28180] general protection ip:7f3f08a328ae
sp:7fff0776e490 error:0 in libpthread-2.11.3.so[7f3f08a2d000+17000]

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

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 From 2012-08-28 19:19:14 -------
(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 From 2012-08-29 20:10:48 -------
*** Bug 27679 has been marked as a duplicate of this bug. ***
------- Comment #14 From 2012-08-30 15:51:58 -------
Предположительно ошибка исправлена в апстриме и вошла в v189.
http://cgit.freedesktop.org/systemd/systemd/commit/?id=c516c8d17f77a1c761447f4c40c8dfffeda2e06d

Но при dist-upgrade glibc-core и systemd обновляются вместе (glibc-core
первым), и ошибка конечно проявляется. Как её избежать я не знаю.
------- Comment #15 From 2012-08-31 03:43:42 -------
(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 From 2012-08-31 04:38:07 -------
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 From 2016-03-01 19:37:50 -------
Сегодня пытался обновлять стартеркит p7 до сизифа. Точнее менять sysvinit на
systemd с последующим dist-upgrade. Столкнулся с тем, что "telinit u" (уже из
пакета systemd-sysvinit-228-alt2) просто зависает и бессрочно долго висит при
вызове из 0ldconfig.filetrigger. В итоге штатно мигрировать/обновиться не
получается.

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