Bug 18907 - %post/%postun scripts could break package installation or upgrade
Summary: %post/%postun scripts could break package installation or upgrade
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: phpMyAdmin (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: drool
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-02-19 21:48 MSK by Nikolay A. Fetisov
Modified: 2009-03-16 00:53 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nikolay A. Fetisov 2009-02-19 21:48:29 MSK
В 3.1.1-alt1 в пакетах phpMyAdmin-apache{,2} в %post/%postun используются вызовы init-скриптов для перезапуска Apache вида 
%_initdir/httpd reload

В случае, если Apache не запущен, вызов '/etc/rc.d/init.d/httpd reload' завершается с ошибкой. Завершившийся с ошибкой %post при установке пакета приводит к ошибке apt вида: 

81: phpMyAdmin-apache2                      ################################################################################################### [ 93%]
Reloading httpd2 service: error: execution of %post scriptlet from phpMyAdmin-apache2-3.1.1-alt1 failed, exit status 1

В случае обновления пакета подобная ошибка оставит в системе пакет предыдущей версии.

Кроме того, из общих соображений непосредственный запуск init-скриптов (без обёртки service) не рекомендуется. 

Т.е., как минимум, требуется замена вызовов:
в post/postun phpMyAdmin-apache на 
 %post_apacheconf    ||:
 %postun_apacheconf  ||:
в post/postun phpMyAdmin-apache2 - на 
 %post_apache2conf   ||:
 %postun_apache2conf ||:


Правда, даже в этом случае остаётся возможность аварийно завершить в процессе установки пакета работающий Apache: если в системе имеется запущенный и работающий Apache, и к моменту установки/обновления пакета по каким-либо причинам конфигурация Apache стала содержать ошибку (например, как результат установки какого-либо третьего пакета, или из-за ошибки администратора), то condreload завершит выполнение работающего сервера Apache. Для нагруженных веб-серверов это недопустимо, желательно дополнительно перед вызовом condreload проверять текущую конфигурацию на наличие ошибок, и в случае обнаружения таковых - оставлять перезагрузку Apache администратору, с выводом соответствующего сообщения.
Comment 1 Vladimir V. Kamarzin 2009-02-20 08:24:24 MSK
Ну уж, пакет не обязан следить за ошибками администратора.
Comment 2 Mikhail Gusarov 2009-02-20 10:24:25 MSK
Конфигурация, при которой apache не сможет рестартовать - это не ошибка администратора, а нормальная ситуация.
Comment 3 Nikolay A. Fetisov 2009-02-20 11:07:25 MSK
... причиной которой может послужить и деятельность веб-программистов, и добавление / обновление других пакетов с веб-приложениями, и многое другое.

Пакет за ошибками администратора следить, конечно, не обязан, но если есть возможность ввести дополнительные проверки и смягчить возможные последствия чужих ошибок - то пренебрегать этим не стоит.

И лучше, если не отработает в автоматическом режиме добавление phpMyAdmin в конфигурацию Apache, чем когда при обновлении пакета (когда, вообще говоря, и reload-то не нужен) рухнет высоконагруженный сайт.
Comment 4 Dmitriy Kulik 2009-03-16 00:53:21 MSK
fixed in phpMyAdmin-3.1.2-alt1

в post/postun phpMyAdmin-apache на 
 %post_apacheconf    ||:
 %postun_apacheconf  ||:
в post/postun phpMyAdmin-apache2 - на 
 %post_apache2conf   ||:
 %postun_apache2conf ||: