LINUX.ORG.RU

Помогите разобраться с plymouth-quit-wait. 20 секунд хватит всем?

 , ,


0

0

Небольшая предыстория:

$ systemctl status plymouth-quit-wait.service 
plymouth-quit-wait.service - Wait for Plymouth Boot Screen to Quit
   Loaded: loaded (/etc/systemd/system/plymouth-quit-wait.service; enabled)
   Active: failed (Result: timeout) since Tue 2013-07-30 06:43:09 NOVT; 10min ago
 Main PID: 413
   CGroup: name=systemd:/system/plymouth-quit-wait.service

Видно, что фейлится по таймауту. Смотрим .service файл:

$ grep -i timeout /usr/lib/systemd/system/plymouth-quit-wait.service 
TimeoutSec=20

20 секунд. Отлично. Меняем на 120, перезагружаемся, и в итоге:

systemd-analyze blame | grep plymouth-quit-wait.service
         38.312s plymouth-quit-wait.service

Юниты: http://pastebin.com/6KnSb4Jw

В связи с чем есть пару вопросов:

1. Для чего используется этот таймаут? Таким образом какой-то баг пофиксили или что?

2. Почему именно 20 секунд?

Also: https://bugzilla.redhat.com/show_bug.cgi?id=967521



Последнее исправление: cetjs2 (всего исправлений: 1)

Пальцем вы небо, возможно, таймаут нужен для systemd, он же «умный» запускается сервисы (юниты) параллельно, может какой-то не успевает отработать, вот и поставили таймаут, что бы это как-то работало.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

не успевает отработать

Я бы ещё понял, если бы это была задержка перед запуском службы (ну мало ли). Но нет, 20 секунд - это максимальное время, которое отводится на её запуск (и работу по сути).

$ grep -i timeout /etc/systemd/system/plymouth-quit-wait.service 
TimeoutSec=5
$ systemd-analyze blame | grep plymouth-quit-wait
          5.013s plymouth-quit-wait.service
drake
() автор топика

plymouth-quit-wait - сервис, который ждёт завершения Plymouth. Он нужен исключительно для того, чтобы программы, работающие с графикой (в частности, иксы) запускались после plymouth и не конфликтовали за фреймбуфер.
Таймаут здесь служит для того, чтобы система смогла запуститься, если Plymouth сломается/зависнет или по иным причинам не сможет отправить процессу plymouth-quit-wait сигнал о своём завершении (там D-Bus и всё такое).

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Похоже так и есть. Но тогда есть другой вопрос.

Plymouth сломается/зависнет

Что происходит в этом случае? plymouth-quit-wait фейлится, а что дальше? Получается, кто-то должен убить зависший plymouthd?

drake
() автор топика
Ответ на: комментарий от drake

Ну да, по идее, дальше требуется человеческое вмешательство (свитчнуться в консоль, посмотреть логи и починить/снести plymouth).

Кстати, в systemd у всех юнитов есть неявный таймаут в 90 секунд. Здесь просто сделали меньше - видимо, оно часто падает :)

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

дальше требуется человеческое вмешательство

В моём случае оно требуется постоянно. Но всё же меня смущает старт GDM'а даже в случае фейла службы plymouth-quit-wait. Причём всё происходит без ошибок.

у всех, кроме имеющих тип «oneshot», юнитов есть неявный таймаут в 90 секунд

Справедливости ради фикс.

Defaults to 90s, except when Type=oneshot is used in which case the timeout is disabled by default.

drake
() автор топика
Ответ на: комментарий от drake

у всех, кроме имеющих тип «oneshot», юнитов есть неявный таймаут в 90 секунд

Справедливости ради фикс.

Хм, и действительно. Надо читать маны, а не цитировать на память :)

Кстати, насколько понимаю, у Fedora GDM должен быть пропатчен на взаимодействие с Plymouth.. Попробуй включить gdm-plymouth.service вместо gdm.service (если ты ещё не).

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

у Fedora GDM должен быть пропатчен на взаимодействие с Plymouth

Ну да, он собран с флагом "--with-plymouth". gdm.spec:

%configure --with-pam-prefix=%{_sysconfdir} \
           --with-run-dir=/run/gdm \
           --enable-split-authentication \
           --enable-profiling      \
           --enable-console-helper \
           --with-plymouth \
           --with-selinux

Собственно в таком случае сам GDM следит за завершением работы Plymouth. Например, там есть такие строки:

#ifdef WITH_PLYMOUTH
        /* Plymouth is waiting for the go-ahead to exit */
        if (slave->priv->plymouth_is_running) {
                plymouth_quit_with_transition (slave);
        }
#endif
res = g_spawn_command_line_sync ("/bin/plymouth --ping", NULL, NULL, &status, &error);
res = g_spawn_command_line_sync ("/bin/plymouth deactivate", NULL, NULL, NULL, &error);
res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash", NULL, NULL, NULL, &error);

gdm-plymouth.service вместо gdm.service

В Fedora gdm.service не сильно отличается от gdm-plymouth.service из AUR:

$ diff -u /usr/lib/systemd/system/gdm.service plymouth/gdm-plymouth.service
--- /usr/lib/systemd/system/gdm.service	2013-06-22 12:04:03.000000000 +0700
+++ plymouth/gdm-plymouth.service	2013-06-03 20:50:26.000000000 +0700
@@ -1,15 +1,13 @@
 [Unit]
 Description=GNOME Display Manager
-Conflicts=getty@tty1.service plymouth-quit.service
-After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service
+After=systemd-user-sessions.service
+
+Conflicts=plymouth-quit.service
+After=plymouth-quit.service
 
 [Service]
-ExecStart=/usr/sbin/gdm
-Restart=always
-IgnoreSIGPIPE=no
-BusName=org.gnome.DisplayManager
+ExecStart=/usr/bin/gdm -nodaemon
 StandardOutput=syslog
-StandardError=inherit
 
 [Install]
 Alias=display-manager.service

Не думаю, что здесь что-то имеет решающее значение. Кроме того, пользователи Arch'а тоже жаловались на эту проблему.

--

Чтож, похоже всё же это бага в Plymouth/GDM. Причём «фейл» GDM'a не является следствием фейла plymouth-quit-wait.service (они стартуют параллельно). Тем не менее, спасибо за помощь.

p.s. Ещё пару ликов:

1. https://bugs.freedesktop.org/show_bug.cgi?id=66260

2. https://bbs.archlinux.org/viewtopic.php?pid=1207410

drake
() автор топика
Ответ на: комментарий от drake

Всё же попробуй.

Conflicts = plymouth-quit.service

Эта строка запрещает выполнение plymouth-quit{,-wait}.service, перекладывая ответственность за завершение Plymouth на GDM. Собственно, что нам и надо.

Просто у меня было что-то похожее с KDM, когда я «игрался» с настройками.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Дык есть же:

Conflicts=getty@tty1.service plymouth-quit.service

Но в любом случае этот сервис (plymouth-quit.service) отключён. Да и баг этот воспроизводиться так же уверенно, как в момент написания топика, перестал. :(

drake
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.