05.10.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



Комментариев нет:

Отправить комментарий