| Summary: | %post/%postun scripts could break package installation or upgrade | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Nikolay A. Fetisov <naf> |
| Component: | phpMyAdmin | Assignee: | drool <drool> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P2 | CC: | dottedmag, drool, vvk |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Ну уж, пакет не обязан следить за ошибками администратора. Конфигурация, при которой apache не сможет рестартовать - это не ошибка администратора, а нормальная ситуация. ... причиной которой может послужить и деятельность веб-программистов, и добавление / обновление других пакетов с веб-приложениями, и многое другое. Пакет за ошибками администратора следить, конечно, не обязан, но если есть возможность ввести дополнительные проверки и смягчить возможные последствия чужих ошибок - то пренебрегать этим не стоит. И лучше, если не отработает в автоматическом режиме добавление phpMyAdmin в конфигурацию Apache, чем когда при обновлении пакета (когда, вообще говоря, и reload-то не нужен) рухнет высоконагруженный сайт. fixed in phpMyAdmin-3.1.2-alt1 в post/postun phpMyAdmin-apache на %post_apacheconf ||: %postun_apacheconf ||: в post/postun phpMyAdmin-apache2 - на %post_apache2conf ||: %postun_apache2conf ||: |
В 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 администратору, с выводом соответствующего сообщения.