Summary: | telinit -u works strange and breaks glibc uprades | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Evgenii Terechkov <evg> |
Component: | systemd-sysvinit | Assignee: | Alexey Shabalin <shaba> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | blocker | ||
Priority: | P3 | CC: | aen, aris, arseny, boyarsh, glebfm, icesik, ldv, mike, real.altlinux.org, shaba |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Evgenii Terechkov
2012-08-24 21:28:17 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? Выводит точно то же самое (как и 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)? (В ответ на комментарий №2) > И ещё, как лучше восстановить систему из такого состояния (два пакета > glibc-core)? rpm -e --nodeps glibc-core-2.11.3 У меня после этого проблем не было. (In reply to comment #3) > (В ответ на комментарий №2) > > И ещё, как лучше восстановить систему из такого состояния (два пакета > > glibc-core)? > > rpm -e --nodeps glibc-core-2.11.3 > У меня после этого проблем не было. Зачем --nodeps? (В ответ на комментарий №4) > (In reply to comment #3) > > (В ответ на комментарий №2) > > > И ещё, как лучше восстановить систему из такого состояния (два пакета > > > glibc-core)? > > > > rpm -e --nodeps glibc-core-2.11.3 > > У меня после этого проблем не было. > > Зачем --nodeps? Да, наверное, это было лишнее. (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. Перевешиваю на systemd-sysvinit, поскольку telinit, странное поведение которого осложняет обновление glibc, из этого пакета. Я сравнил наш 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 у нас тоже будет происходить без проблем. (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 не может работать в принципе, то зачем он такой вообще нужен? вот что обнаружилось в dmesg при обновлении: [1541516.951306] telinit[28180] general protection ip:7f3f08a328ae sp:7fff0776e490 error:0 in libpthread-2.11.3.so[7f3f08a2d000+17000] о чём это может говорить? Хм, у меня тоже было: 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] (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 сегфолтится, то, скорее всего, в нем есть ошибка. *** Bug 27679 has been marked as a duplicate of this bug. *** Предположительно ошибка исправлена в апстриме и вошла в v189. http://cgit.freedesktop.org/systemd/systemd/commit/?id=c516c8d17f77a1c761447f4c40c8dfffeda2e06d Но при dist-upgrade glibc-core и systemd обновляются вместе (glibc-core первым), и ошибка конечно проявляется. Как её избежать я не знаю. (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. 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). Сегодня пытался обновлять стартеркит p7 до сизифа. Точнее менять sysvinit на systemd с последующим dist-upgrade. Столкнулся с тем, что "telinit u" (уже из пакета systemd-sysvinit-228-alt2) просто зависает и бессрочно долго висит при вызове из 0ldconfig.filetrigger. В итоге штатно мигрировать/обновиться не получается. Сдаётся, ногу растут примерно отсюда. |