Сборка nginx на Debian
Custom-сборка nginx на Debian
В данном посте описываются действия, которые позволяют изменить конфигурацию компиляции и собрать nginx из исходников Debian пакета.
Последовательность действий такова:
- Скачать исходники пакета nginx
- Распаковать исходники.
- Изменить конфигурацию.
- Собрать пакет.
Начнем с того, что установим необходимые библиотеки:
aptitude install dpkg-dev
Далее необходимо найти нужную версию nginx здесь: http://snapshot.debian.org/package/nginx/. Данный ресурс хранит все пакеты, которые когда-либо присутствовали в Debian. Для примера мы выбрали версию 0.8.54-4. Создадим временную папку и загрузим туда необходимые файлы:
mkdir /tmp/nginx cd /tmp/nginx/ wget [1]http://snapshot.debian.org/archive/debian/20110305T151450Z/pool/main/n/nginx/nginx_0.8.54-4.debian.tar.gz [2]http://snapshot.debian.org/archive/debian/20110305T151450Z/pool/main/n/nginx/nginx_0.8.54-4.dsc [3]http://snapshot.debian.org/archive/debian/20101231T205910Z/pool/main/n/nginx/nginx_0.8.54.orig.tar.gz
Далее распакуем пакет исходных кодов в папку:
dpkg-source -x nginx_0.8.54-4.dsc
Теперь следует по своему вкусу осуществить редактирование параметров конфигурирования компиляции, которые расположены в файле nginx-0.8.54/debian/rules. Я обычно беру сборку nginx-full и просто добавляю/убираю пункты. Например, может получиться такая конфигурация, в которой исключены mail-модули:
config.status.full: config.env.full config.sub config.guess
cd $(BUILDDIR_full) && ./configure \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--http-log-path=/var/log/nginx/access.log \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-scgi-temp-path=/var/lib/nginx/scgi \
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
--lock-path=/var/lock/nginx.lock \
--pid-path=/var/run/nginx.pid \
--with-debug \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-http_degradation_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-ipv6 \
--with-sha1=/usr/include/openssl \
--with-md5=/usr/include/openssl \
--add-module=$(MODULESDIR)/nginx-upstream-fair \
$(CONFIGURE_OPTS) >$@
После того, как все изменения внесены, соберем deb-пакет следующей командой (которую необходимо выполнить из каталога, куда были распакованы исходные коды пакета):
dpkg-buildpackage -uc -b -us
Полученные deb файлы после окончания сборки будут лежать в каталоге выше (в нашем случае /tmp/nginx), после этого останется установить пакет nginx-common и nginx-full (или другой, смотря какой был редактирован в файле rules).
Еще одна настройка, которая будет полезна некоторым - это блокирование обновления пакетов. Осуществляется это следующими командами:
echo nginx-common hold | dpkg --set-selections echo nginx-full hold | dpkg --set-selections
- статья взята тут:[4]http://xstupidkidzx.blogspot.com/2011/09/custom-nginx-debian.html
- готовые сборки тут:[5]http://adminco.org/2010/08/sborka-paketov-nginx-dlya-debian/
Правильная сборка с соблюдением всех нюансов Debian
NodeSquad
среда, 5 октября 2011 г. Сборка Nginx под Debian Поставим сначала пакеты. Возможно вам пригодятся еще какие-то, но об этом вы узнаете, если какая-то команда не запустится:
apt-get install libpcre++-dev libssl-dev libgeoip-dev dh-make autotools-dev gcc-4.3 debhelper devscripts
Также перед началом вписываем себе в переменное окружение (~/.bashrc) наши опознавательные знаки:
DEBEMAIL="email.address@example.org" DEBFULLNAME="Имя Фамилия" export DEBEMAIL DEBFULLNAME
И применяем их:
source ~/.bashrc
Переходим в директорию, где будем работать:
cd /usr/src
Выбираем нужную версию программы на сайте. И скачиваем её:
wget http://nginx.org/download/nginx-1.0.8.tar.gz
Распаковываем, но сам тарбол не стираем и оставляем его на месте(!!!):
tar xzf nginx-1.0.8.tar.gz
Теперь нужно переименовать директорию с сорцами, потому что далее сборщик deb-пакета возьмет название и номер версии отсюда. Правило одно - слева имя пакета (оставим его nginx, чтобы он заменял стандартный) и следом первый дефис. А второй дефис разделяет версию пакета и версию мейнтейнера. И никаких подчеркиваний! Итак меняем версию:
mv nginx-1.0.8 nginx-1.0.8-nsq1
И переходим в эту директорию:
cd nginx-1.0.8-nsq1
Начало необязательной части, которую можно пропустить. Возможно кому-то захочется скрыть версию пакета в целях безопасности. Делается это либо директивой server_tokens = Off позже в конфиге либо сейчас правкой 49-й строки здесь:
vi +49 src/http/ngx_http_header_filter_module.c
Если кому хочется, можно поменять конфиг сразу, чтобы пакет разворачивался уже с готовым конфигом:
vi conf/nginx.conf
Можно также добавить модули Nginx.
Конец необязательной части.
Деперь "дебианизируем" пакет:
dh_make --single -f ../nginx-1.0.8.tar.gz
В результате в этой директории появилась поддиректория debian, а уровнем выше, где мы оставили тарбол, появилась копия тарбола с надписью orig.
Поправим пару параметров перед сборкой. Например Description (один пробел слева как на образце обязателен):
vi debian/control
Description: small, but very powerful and efficient web server
Nginx (engine x) is a web server created by Igor Sysoev and kindly provided
to the open-source community. This server can be used as standalone HTTP
server and as a reverse proxy server before some Apache or another big
server to reduce load to backend servers by many concurrent HTTP-sessions
Далее делаем вещь, специфическую для nginx - запрещаем стандартную автоконфигурацию и вписываем свою (ВНИМАНИЕ: перед строкой ./configure --pref..., которая во второй строке, не должно быть ни одного пробела и только один [Tab]. Иначе сборщик не заметит эту строку и конфигурация не пройдет. Первый признак ошибки - слишком быстро пробежавший билд, а в пакете не будет ничего кроме директории /usr):
vi debian/rules
override_dh_auto_configure: ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-uwsgi-temp-path=/var/run/nginx/uwsgi --http-scgi-temp-path=/var/run/nginx/scgi --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_gzip_static_module --with-http_geoip_module --with-http_realip_module --with-http_stub_status_module --with-poll_module --with-http_dav_module --with-debug --with-http_ssl_module --with-http_flv_module --with-cc-opt=' -O2 -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m64'
Установим файлы приложения в сам пакет, а то он пустой получится:
dh_install
Так как у нас ванильный пакет, а не дебиановский, то у нас изначально нету никакого init-скрипта. Создадим его, перетерев старый (пробел только перед шибэнгом не забудьте стереть):
tee > debian/init.d.ex
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON || true
sleep 1
start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON || true
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
И установим новый init-скрипт:
dh_installinit
А еще нам нужна инструкция для logrotate как часто ротировать логи Nginx. Создадим файл конфига:
tee > conf/logrotate
/var/log/nginx/*.log {
daily
missingok
rotate 16
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
[ ! -f /var/run/nginx/nginx.pid ] || kill -USR1 `cat /var/run/nginx/nginx.pid`
endscript
}
И добавим его в список установленных файлов между 136-й и 137-й строками (перед END):
vi +136 auto/install
mkdir '\$(DESTDIR)$NGX_CONF_PREFIX'/logrotate.d
cp conf/logrotate '\$(DESTDIR)$NGX_CONF_PREFIX'/logrotate.d/nginx
Вот теперь у нас нормально соберется:
debuild -uc -us
Отходим назад и смотрим:
ls ../*deb
Можно теперь поставить:
dpkg -i ../nginx_1.0.8-nsq1-1_amd64.deb
