Сборка 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