Pull to refresh

Debian-пакеты с человеческим лицом на примере Zabbix 1.8

Configuring Linux *
Написать эту статью меня заставили две вещи: во-первых, есть ощущение, что после статей типа "делаем debian-пакет на коленке", большинство хабравчан утвердятся во мнении, что debian-пакеты придумали извращенцы для извращенцев. Во-вторых, вышел zabbix 1.8 — замечательная система мониторинга, в которой, судя по новостям, наконец-то занялись проблемами юзабилити админского интерфейса.

Связывает два этих события то, что zabbix 1.8 пока нет в репозиториях убунты, а компилировать и ставить из исходников что-то на продакшн-серверах, это, конечно, недостойное джентльмена занятие. В общем, есть повод показать, как делаются debian-пакеты.

Итак, хе-хе, приступим :)

apt-get install dh-make devscripts cdbs libmysqlclient-dev libcurl4-gnutls-dev
wget sunet.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/1.8/zabbix-1.8.tar.gz
tar zxvf zabbix-1.8.tar.gz
cd zabbix-1.8
dh_make --createorig


На вопрос dh_make, какого типа пакет мы хотим создать, нужно ответить «b» (cdbs). В результате будет создан шаблонный пакет, с кучей файлов в директории debian на все случаи жизни (большую часть мы потом удалим).

Создание пакетов — это все-таки немножко шаманство и магия. Дело в том, что более простые, чем zabbix, программы, уже на этом этапе можно заканчивать пакетировать. Т.е. если для установки программы нужно сделать только ./configure && make install, то все готово, можно собирать и ставить. Zabbix — несколько более сложный вариант, поэтому впереди еще несколько шагов:



Начнем с того, что откроем файл debian/control и укажем себя в качестве создателя пакета, а заодно перечислим пакеты, которые должны приехать на сервер вместе с установкой zabbix. Для этого нужно найти строку 'Depends' и добавить в ее конец следующее: «fping, adduser, apache2, php5, php5-mysql, php5-gd».

Обычно скрипт configure можно вызывать без параметров и он сгенерирует жизнеспособный конфиг, но для zabbix это не так — ему нужно отдельными опциями включать компиляцию серверной части и агента. В нашем случае это настраивается в файле debian/rules, добавим в его конец следующее:
DEB_CONFIGURE_USER_FLAGS := --enable-server --with-mysql --with-libcurl


Бинарные файлы попадут в каталоги /usr/bin и /usr/sbin сами собой, а php-интерфейс и конфиг-файлы нужно ставить вручную. Самый простой и наглядный способ это сделать — создать файл debian/install, и описать все в нем примерно так:
frontends/php/* usr/share/zabbix/
misc/conf/zabbix_server.conf etc/zabbix


Кроме того, для нормальной работы заббиксу нужны еще и директории для хранения лог-файлов и локов. Создать их тоже просто — достаточно их перечислить в файле debian/dirs:
/var/log/zabbix-server
/var/run/zabbix-server


Теперь дело за инит-скриптом. В исходниках zabbix инит-скрипт есть (misc/init.d/debian/zabbix-server), но без обработки напильником он работать не будет. Поэтому лучше его заменить скриптом из убунты (вот отсюда), который нужно сохранить под именем debian/init (на конечной системе он будет называться /etc/init.d/zabbix — магия).

Чтобы настроить logrotate, нужно просто положить конфиг в нужное место:
cat > debian/logrotate
/var/log/zabbix-server/zabbix_server.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 zabbix zabbix
sharedscripts
}
^D


Очень удобно, когда пакет с веб-интерфейсом сам ставит себе конфиг для апача:
mkdir misc/apache2-vhosts
cat > misc/apache2-vhosts/zabbix
<VirtualHost *>
ServerName zabbix.example.com
ServerAdmin admin@example.com

DocumentRoot /usr/share/zabbix

CustomLog /var/log/apache2/zabbix_access.log combined
ErrorLog /var/log/apache2/zabbix_error_log
</VirtualHost>
^D
echo "misc/apache2-vhosts/zabbix etc/apache2/sites-available" >> debian/install


Еще не все. Кто-то должен создать пользователя zabbix, прописать инит-скрипт в автозагрузку и поправить права. Проще всего это сделать в postinstall-скрипте, для этого нужно взять его шаблон:
mv debian/postinst.ex debian/postinst
vim debian/postinst


И после строки 'configure)', но перед ';;' написать следующее:
# Создать пользователя
useradd zabbix || echo "User zabbix was not added"

# Установить права на рабочие директории
chown zabbix:zabbix /var/log/zabbix-server /var/run/zabbix-server

# В этой директории веб-интерфейс пытается сохранить свой конфиг-файл:
chown www-data /usr/share/zabbix/conf
chmod 775 /usr/share/zabbix/conf

# Автозапуск сервера:
update-rc.d zabbix-server defaults

# Включить виртуалхост:
a2ensite zabbix
invoke-rc.d apache2 reload


Осталась одна деталь: при стандартных настройках PHP интерфейс заббикса не заведется, нужно править max_execution_time и еще несколько параметров. Если бы мы готовили пакет для домашнего сервера-торрентокачалки, то, конечно, проще было бы поправить php.ini напрямую. Но идеологически более правильно поместить эти настройки тоже в пакет. Сделать это можно так:

mkdir misc/php.conf
cat > misc/php.conf/zabbix.ini
post_max_size = 16M
max_execution_time = 300
mbstring.func_overload = 2
^D

echo "misc/php.conf/zabbix.ini etc/php5/conf.d" >> debian/install


Теперь нужно поправить дефолтные конфиги, чтобы там были указаны нужные нам пути к логам и pid-файлам.

И, в общем-то, все. Можно собрать пакет с помощью команды debuild, поставить его с помощью dpkg -i <package.deb> и apt-get install -f.

Надеюсь, мне удалось продемонстрировать, что дебиан кроме всего прочего — удобная и продуманная среда для портирования приложений; создание нового пакета — вполне себе альтернатива установке программ, отсутствующих в репозитории, даже если речь идет про одну инсталляцию.

Если тема интересна, могу продолжить. На этот раз очень многое осталось за кадром — что такое dehelper-скрипты, и CDBS, как отладить зависимости пакета и почему pbuilder — один из моих любимых инструментов.

P.S. Если у вас есть свой open-source проект, то я могу помочь его пакетированием, обращайтесь.

P.P.S: Перенесите этот пост в какой-нибудь тематический блог, пожалуйста. Спасибо за карму! Перенес сам :)

UPD:: Несколько обновленный вариант статьи в моем блоге: alexey.sveshnikov.ru/blog/2010/03/29/zabbix-debianization.
Tags:
Hubs:
Total votes 10: ↑8 and ↓2 +6
Views 11K
Comments Comments 15