Deb пакет Nginx - сборка из исходников.

Статья описывает сборку deb пакета Nginx из исходных кодов. Я буду собирать сервер с дополнительными модулями: GeoIP, PageSpeed и ModSecurity. Кроме того, в сборку будут входить библиотеки OpenSSL версии 1.1.0g, для поддержки алгоритмов шифрования CHACHA20 и Poly1305. В качестве операционной системы используется Ubuntu Server 16.04.

Собственные deb пакеты имеют множество плюсов по сравнению со стандартными пакетами и программами установленными из исходников. Собственные пакеты можно собрать с нужными опциями, после чего установить как обычный пакет. Но в отличии от make install, deb пакеты устанавливаются пакетным менеджером и им же удаляются, не оставляя после себя мусора в системе.

Пакеты можно пересобирать, обновлять версии исходников, добавлять нужные опции и т.д. В состав deb пакета могут входить не только стандартные файлы программы, но и любые другие. Например, конфигурационные файлы из каталога /etc/nginx, таким образом после установки пакета можно получить уже настроенный сервер.

Хочу заметить что статья является напоминанием для себя и приводится в качестве примера для сборки пакета. Поэтому я не буду подробно описывать настройку модулей и прочих моментов, я рассказываю только про то, как собрать deb пакет. Собирать пакеты лучше всего на виртуальной машине, а готовый и протестированный пакет устанавливать на рабочую машину.

Необходимый софт

Для удобства я разделил весь необходимый софт на группы и расписал что для чего нужно.

Для сборки deb пакетов.

apt-get install dh-make quilt lsb-release debhelper dpkg-dev dh-systemd -y

Для сборки из исходников.

apt-get install build-essential autoconf automake pkg-config libtool -y

Для сборки самого Nginx.

apt-get install libpcre++-dev libssl-dev -y

Для сборки модуля ModSecurity.

apt-get install apache2-dev libxml2-dev libcurl4-gnutls-dev -y

Для сборки Nginx с GeoIP-модулем.

apt-get install libgeoip-dev -y

Каталоги, исходники, файлы deb пакета

Для сборки deb пакета необходимо создать каталог в котором будут находиться исходники и выполняться дальнейшая работа по сборке пакета. Я создаю каталог nginx в /root, все дальнейшие действия будут описаны относительно этого размещения.

Создаем каталог и переходим в него.

mkdir ~/nginx && cd ~/nginx

Теперь нужно скачать исходники последней версии Nginx, на момент написания статьи таковой является 1.13.9.

wget http://nginx.org/download/nginx-1.13.9.tar.gz

Распакуем архив с исходниками.

tar -zxvf nginx-1.13.9.tar.gz

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

Можно поступить проще и скачать готовый архив из репозиториев Nginx. Поскольку я буду собирать пакет со своей конфигурацией сервера, то править файлы все равно придется, но не в таких объемах как если бы писать их с нуля.

Переходим в каталог с исходниками Nginx.

cd nginx-1.13.9

Идем в репозиторий Nginx и ищем подходящий архив (версия сервера + версия системы) - nginx_1.13.9-1~xenial.debian.tar.xz, название архива заканчивается на debian.tar.xz.

wget http://nginx.org/packages/mainline/ubuntu/pool/nginx/n/nginx/nginx_1.13.9-1~xenial.debian.tar.xz

Распакуем архив и удалим его.

tar -xpvJf nginx_1.13.9-1~xenial.debian.tar.xz && rm nginx_1.13.9-1~xenial.debian.tar.xz

В итоге мы получим каталог debian с нужными для сборки deb пакета файлами. Каталог debian обязательно должен находиться внутри каталога с исходниками.

Копирование конфигурационных файлов Nginx

Поскольку после установки я хочу получить уже настроенный сервер, то я добавляю свои конфигурационные файлы, которые при установке пакета распакуются на свои места.

Перейдем в каталог с исходниками Nginx.

cd ~/nginx/nginx-1.13.9

Файлы нужно разместить также, как они размещены в системе. Представим что каталог в котором мы сейчас находимся это корень диска. Например, если nginx.conf располагается в /etc/nginx/nginx.conf, то и здесь он должен располагаться также.

Я создаю каталог etc.

mkdir etc

В etc я копирую каталог nginx со всем его содержимым.

cp -r /etc/nginx ~/nginx/nginx-1.13.9/etc

Позже, при редактировании файла nginx.install, я включу скопированные файлы в состав deb пакета Nginx.

Подготовка модулей Nginx

В рамках данной статьи я не буду подробно описывать установку и настройку каждого модуля, а только опишу порядок действий. Тем более что у меня и так уже все настроено. Подробнее о настройке модулей можно прочитать пройдя по ссылкам приведенным в начале статьи.

Перейдем в каталог с исходниками Nginx.

cd ~/nginx/nginx-1.13.9

Создадим каталог modules внутри каталога debian. В этом каталоге будут находиться исходники модулей и библиотеки OpenSSL.

mkdir debian/modules

Перейдем в каталог modules.

cd debian/modules

OpenSSL

Скачиваем последнюю версию OpenSSL.

wget https://www.openssl.org/source/latest.tar.gz -O openssl-1.1.0.tar.gz

Распаковываем архив и удаляем его.

tar -zxvf openssl-1.1.0.tar.gz && rm -r openssl-1.1.0.tar.gz

ModSecurity

Клонируем исходники ModSecurity с GitHub.

git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity

Переходим в каталог modsecurity.

cd modsecurity

Запускаем скрипт ./autogen.sh.

./autogen.sh

Собираем ModSecurity как отдельный модуль.

./configure --enable-standalone-module

Компилируем.

make

PageSpeed

Возвращаемся в каталог modules.

cd ~/nginx/nginx-1.13.9/debian/modules

Скачиваем архив с PageSpeed.

wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.3-stable.zip

Распаковываем и удаляем архив.

unzip v1.12.34.3-stable.zip && rm -r v1.12.34.3-stable.zip

Переходим в распакованный каталог.

cd incubator-pagespeed-ngx-1.12.34.3-stable

Скачиваем библиотеки PSOL.

wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz

Распаковываем архив и удаляем его.

tar -zxvf 1.12.34.2-x64.tar.gz && rm 1.12.34.2-x64.tar.gz

Отдельно про сборку и настройку Nginx и PageSpeed можно почитать здесь и здесь.

GeoIP

GeoIP не требует никаких действий, его просто включают в сборку сервера добавлением опции "--with-http_geoip_module". Подробнее про GeoIP можно прочитать здесь.

Файлы deb пакета

Файлы находящиеся в каталоге debian и содержащие информацию о создателе пакета, изменениях, конфигурации (changelog, control, rules), nginx.dir и nginx.install, содержат списки каталогов и файлов, которые будут распакованы при установке пакета.

При редактировании файлов стоит обратить внимание на соблюдение табуляции, строк, запятых, пробелов и т.д. Малейшая ошибка при редактировании вызовет ошибку при создании пакета.

Файл changelog

Файл changelog содержит информацию о всех изменениях внесенных в пакет. Поскольку мы вносим в пакет свои изменения, то должны добавить информацию о себе и о пакете. Хотя это не обязательно, если мы делаем пакет для себя, а не для репозиториев.

Пример заполнения файла changelog.

nginx (1.13.9-1~xenial) xenial; urgency=low

  * 1.13.9

 -- Denni Negin <package@techlist.top>  Wed, 07 Mar 2018 17:49:23 +0300

Файл control

Файл control является самым важным файлом. Он содержит информацию о создающихся deb пакетах и зависимостях необходимых для их сборки и установки. В стандартном файле control записаны два пакета: nginx и nginx-dbg.

В Build-Depends (зависимости для сборки) указаны программы и библиотеки, которые нужны для сборки deb пакета. Если что-либо отсюда не будет установлено, то при создании пакета будет ошибка, указывающая на необходимость установки программ из списка.

Build-Depends: debhelper (>= 9~),
               dh-systemd,
               dpkg-dev (>= 1.16.1~),
               quilt (>= 0.46-7~),
               lsb-release,
               libssl-dev (>= 0.9.7),
               libpcre3-dev,
               zlib1g-dev

Помимо Build-Depends в описании каждого пакета присутствует строка Depends. Эта строка отвечает за зависимости, которые будут установлены вместе с пакетом, сюда я добавляю библиотеки, которые нужны для работы сервера и его модулей.

Package: nginx
Architecture: any
Depends: ${misc:Depends}, 
		 ${shlibs:Depends}, 
		 lsb-base (>= 3.0-6), 
		 apache2-dev, 
		 libpcre++-dev, 
		 libxml2-dev, 
		 libcurl4-gnutls-dev, 
		 libssl-dev, 
		 libgeoip-dev, 
		 libpcre3-dev, 
		 zlib1g-dev

Так выглядит файл control после правки.

Source: nginx
Section: httpd
Priority: optional
Maintainer: Denni Negin <package@techlist.top>
Build-Depends: debhelper (>= 9~),
               dh-systemd,
               dpkg-dev (>= 1.16.1~),
               quilt (>= 0.46-7~),
               lsb-release,
               libssl-dev (>= 0.9.7),
               libpcre3-dev,
               zlib1g-dev
Standards-Version: 3.9.8.0
Homepage: http://nginx.org

Package: nginx
Architecture: any
Depends: ${misc:Depends}, 
		 ${shlibs:Depends}, 
		 lsb-base (>= 3.0-6), 
		 apache2-dev, 
		 libpcre++-dev, 
		 libxml2-dev, 
		 libcurl4-gnutls-dev, 
		 libssl-dev, 
		 libgeoip-dev, 
		 libpcre3-dev, 
		 zlib1g-dev
Provides: httpd
Conflicts: nginx-common
Description: high performance web server
 nginx [engine x] is an HTTP and reverse proxy server, as well as
 a mail proxy server.

Package: nginx-dbg
Architecture: any
Section: debug
Priority: extra
Depends: ${misc:Depends}, nginx (= ${binary:Version})
Description: nginx debug symbols
 This package contains the debugging symbols for nginx.

Файл rules

Файл rules напоминает Makefile использующийся при компиляции и установке программ из исходных кодов. В файле описаны цели выполняющиеся при сборке и создании пакета.

Первым делом нужно обозначить переменную, которая будет указывать расположение каталога modules. Например так, где $(CURDIR) обозначает каталог с исходниками сервера.

MODULESDIR = $(CURDIR)/debian/modules

Добавим переменную в файл rules сразу после INSTALLDIR.

#!/usr/bin/make -f

#export DH_VERBOSE=1
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-pie
export DEB_CFLAGS_MAINT_APPEND=-Wp,-D_FORTIFY_SOURCE=2 -fPIC
export DEB_LDFLAGS_MAINT_APPEND=-Wl,--as-needed -pie
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

PKGS = nginx nginx-dbg

BUILDDIR_nginx = $(CURDIR)/debian/build-nginx
BUILDDIR_nginx_debug = $(CURDIR)/debian/build-nginx-debug
INSTALLDIR = $(CURDIR)/debian/nginx
MODULESDIR = $(CURDIR)/debian/modules
BASEDIR = $(CURDIR)

Программа собирающая deb пакет не работает за пределами каталога с исходниками, поэтому указать на каталог с модулями подобным образом не получится.

--with-openssl=~/nginx/nginx-1.13.9/debian/modules/openssl-1.1.0g 
--add-module=~/nginx/nginx-1.13.9/debian/modules/modsecurity/nginx/modsecurity
--add-module=~/nginx/nginx-1.13.9/debian/modules/incubator-pagespeed-ngx-1.12.34.3-stable

Зато с помощью переменной можно указать так.

--with-openssl=$(MODULESDIR)/openssl-1.1.0g 
--add-module=$(MODULESDIR)/modsecurity/nginx/modsecurity
--add-module=$(MODULESDIR)/incubator-pagespeed-ngx-1.12.34.3-stable

Изменяю конфигурацию в файле rules и вставляю свои параметры сборки. Добавляю "--with-debug" для debug пакета и переменную вместо ~/nginx/nginx-1.13.9/debian/modules.

config.status.nginx: config.env.nginx
	cd $(BUILDDIR_nginx) && \
	CFLAGS="" ./configure \
			--prefix=/etc/nginx \
			--conf-path=/etc/nginx/nginx.conf \
			--sbin-path=/usr/sbin/nginx \
			--error-log-path=/var/log/nginx/error.log \
			--http-log-path=/var/log/nginx/access.log \
			--pid-path=/var/run/nginx.pid \
			--lock-path=/var/run/nginx.lock \
			--http-client-body-temp-path=/var/cache/nginx/client_temp \
			--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
			--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
			--user=nginx \
			--group=nginx \
			--without-http_autoindex_module \
			--without-http_ssi_module \
			--without-http_scgi_module \
			--without-http_uwsgi_module \
			--without-http_split_clients_module \
			--without-http_memcached_module \
			--without-http_empty_gif_module \
			--without-http_browser_module \
			--with-http_ssl_module \
			--with-http_v2_module \
			--with-http_realip_module \
			--with-http_mp4_module \
			--with-http_auth_request_module \
			--with-http_stub_status_module \
			--with-http_random_index_module \
			--with-http_gunzip_module \
			--with-threads \
			--with-http_geoip_module \
			--with-openssl=$(MODULESDIR)/openssl-1.1.0g \
			--add-module=$(MODULESDIR)/incubator-pagespeed-ngx-1.12.34.3-stable \
			--add-module=$(MODULESDIR)/modsecurity/nginx/modsecurity
	touch $@

config.status.nginx_debug: config.env.nginx_debug
	cd $(BUILDDIR_nginx_debug) && \
	CFLAGS="" ./configure \
			--prefix=/etc/nginx \
			--conf-path=/etc/nginx/nginx.conf \
			--sbin-path=/usr/sbin/nginx \
			--error-log-path=/var/log/nginx/error.log \
			--http-log-path=/var/log/nginx/access.log \
			--pid-path=/var/run/nginx.pid \
			--lock-path=/var/run/nginx.lock \
			--http-client-body-temp-path=/var/cache/nginx/client_temp \
			--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
			--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
			--user=nginx \
			--group=nginx \
			--without-http_autoindex_module \
			--without-http_ssi_module \
			--without-http_scgi_module \
			--without-http_uwsgi_module \
			--without-http_split_clients_module \
			--without-http_memcached_module \
			--without-http_empty_gif_module \
			--without-http_browser_module \
			--with-http_ssl_module \
			--with-http_v2_module \
			--with-http_realip_module \
			--with-http_mp4_module \
			--with-http_auth_request_module \
			--with-http_stub_status_module \
			--with-http_random_index_module \
			--with-http_gunzip_module \
			--with-threads \
			--with-http_geoip_module \
			--with-openssl=$(MODULESDIR)/openssl-1.1.0g \
			--add-module=$(MODULESDIR)/incubator-pagespeed-ngx-1.12.34.3-stable \
			--add-module=$(MODULESDIR)/modsecurity/nginx/modsecurity \
			--with-debug
	touch $@

В стандартной конфигурации Nginx собирается с каталогом для модулей в /usr/lib "--modules-path=/usr/lib/nginx/modules", но поскольку в мою конфигурацию данная опция не входит, то я редактирую часть файла rules отвечающую за создание этого каталога.

install:
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs
	dh_install
	mkdir -p $(INSTALLDIR)/usr/lib/nginx/modules
	mkdir -p $(INSTALLDIR)/usr/share/doc/nginx
	install -m 644 debian/CHANGES $(INSTALLDIR)/usr/share/doc/nginx/changelog
	install -m 644 debian/nginx.vh.default.conf $(INSTALLDIR)/etc/nginx/conf.d/default.conf
	ln -s /usr/lib/nginx/modules $(INSTALLDIR)/etc/nginx/modules

Я убираю создание каталога modules и заодно убираю ссылку на каталог modules.

mkdir -p $(INSTALLDIR)/usr/lib/nginx/modules
ln -s /usr/lib/nginx/modules $(INSTALLDIR)/etc/nginx/modules

Есть еще один не нужный каталог - conf.d в /etc/nginx. Убираю строку помещающую файл default.conf в /etc/nginx/conf.d.

install -m 644 debian/nginx.vh.default.conf $(INSTALLDIR)/etc/nginx/conf.d/default.conf

Отредактированная цель "install" теперь выглядит так.

install:
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs
	dh_install
	mkdir -p $(INSTALLDIR)/usr/share/doc/nginx
	install -m 644 debian/CHANGES $(INSTALLDIR)/usr/share/doc/nginx/changelog

Файл include-binaries

Файл include-binaries не является обязательным, но в моем случае без него не обойтись. Если при сборке пакета dpkg выдаст похожую ошибку:

dpkg-source: error: detected 17 unwanted binary files (add them in debian/source/include-binaries to allow their inclusion).

Это значит что в ~/nginx/nginx-1.13.9/debian/source, нужно создать файл include-binaries, в который нужно добавить перечисленные в ошибке файлы.

nano ~/nginx/nginx-1.13.9/debian/source/include-binaries

Содержание include-binaries.

debian/modules/modsecurity/mlogc/mlogc
debian/modules/modsecurity/tests/regression/server_root/htdocs/8k.txt
debian/modules/modsecurity/tests/regression/server_root/htdocs/test.pdf
debian/modules/modsecurity/iis/wix/Microsoft_VC110_CRT_x86.msm
debian/modules/modsecurity/iis/wix/banner.jpg
debian/modules/modsecurity/iis/wix/Microsoft_VC120_CRT_x86.msm
debian/modules/modsecurity/iis/wix/Microsoft_VC110_CRT_x64.msm
debian/modules/modsecurity/iis/wix/dialog.jpg
debian/modules/modsecurity/iis/wix/Microsoft_VC120_CRT_x64.msm
debian/modules/modsecurity/doc/doxygen-logo.png
debian/modules/incubator-pagespeed-ngx-1.12.34.3-stable/psol/lib/Release/linux/x64/pagespeed_js_minify
debian/modules/openssl-1.1.0g/test/shibboleth.pfx
debian/modules/openssl-1.1.0g/test/d2i-tests/bad_cert.der
debian/modules/openssl-1.1.0g/test/d2i-tests/int0.der
debian/modules/openssl-1.1.0g/test/d2i-tests/bad-int-pad0.der
debian/modules/openssl-1.1.0g/test/d2i-tests/bad_bio.der
debian/modules/openssl-1.1.0g/test/d2i-tests/high_tag.der

Файл nginx.dirs

В файле nginx.dirs указан список каталогов необходимых для обычной установки Nginx. По умолчанию файл выглядит так.

/usr/sbin
/etc/nginx/conf.d
/usr/lib/nginx/modules
/usr/share/nginx
/usr/share/nginx/html
/var/cache/nginx
/var/log/nginx

Убираю из него /etc/nginx/conf.d и /usr/lib/nginx/modules и добавляю нужные мне каталоги. Отредактированный файл выглядит так.

/etc/nginx/conf
/etc/nginx/geoip
/etc/nginx/global_conf
/etc/nginx/html
/etc/nginx/lists
/etc/nginx/modsec/rules
/etc/nginx/sites-available
/etc/nginx/sites-enabled
/etc/nginx/ssl/techlist
/usr/sbin
/usr/share/nginx
/usr/share/nginx/html
/var/log/nginx
/var/cache/nginx

Файл nginx.install

Файл nginx.install содержит список файлов, которые добавляются в пакет при создании. Каждый файл записывается отдельной строкой. Сначала пишется размещение файла относительно каталога сборки (откуда брать), потом через пробел каталог установки (куда устанавливать).

Файл nginx.install по умолчанию.

debian/nginx.conf			etc/nginx
conf/win-utf				etc/nginx
conf/koi-utf				etc/nginx
conf/koi-win				etc/nginx
conf/mime.types				etc/nginx
conf/scgi_params			etc/nginx
conf/fastcgi_params			etc/nginx
conf/uwsgi_params			etc/nginx
html/index.html				usr/share/nginx/html
html/50x.html				usr/share/nginx/html
debian/build-nginx/objs/nginx		usr/sbin
debian/build-nginx-debug/objs/nginx-debug	usr/sbin

Добавляю свой список файлов, а по сути, просто переписываю содержимое каталога nginx.

etc/nginx/koi-win                                                           etc/nginx
etc/nginx/koi-utf                                                           etc/nginx
etc/nginx/win-utf                                                           etc/nginx
etc/nginx/mime.types                                                        etc/nginx
etc/nginx/nginx.conf                                                        etc/nginx
etc/nginx/fastcgi.conf                                                      etc/nginx
etc/nginx/scgi_params                                                       etc/nginx
etc/nginx/uwsgi_params                                                      etc/nginx
etc/nginx/fastcgi_params                                                    etc/nginx
etc/nginx/conf/gzip.conf                                                    etc/nginx/conf
etc/nginx/conf/cache.conf                                                   etc/nginx/conf
etc/nginx/conf/pagespeed.conf                                               etc/nginx/conf
etc/nginx/conf/php.techlist.conf                                            etc/nginx/conf
etc/nginx/geoip/GeoIP.dat                                                   etc/nginx/geoip
etc/nginx/geoip/GeoLiteCity.dat                                             etc/nginx/geoip
etc/nginx/global_conf/geoip.conf                                            etc/nginx/global_conf
etc/nginx/global_conf/restrictions.conf                                     etc/nginx/global_conf
etc/nginx/global_conf/block_ip_access.conf                                  etc/nginx/global_conf
etc/nginx/html/50x.html                                                     etc/nginx/html
etc/nginx/html/index.html                                                   etc/nginx/html
etc/nginx/html/error403.html                                                etc/nginx/html
etc/nginx/lists/spammers                                                    etc/nginx/lists
etc/nginx/lists/bad_useragents                                              etc/nginx/lists
etc/nginx/lists/good_countries                                              etc/nginx/lists
etc/nginx/modsec/unicode.mapping                                            etc/nginx/modsec
etc/nginx/modsec/modsecurity.conf                                           etc/nginx/modsec
etc/nginx/modsec/rules/sql-errors.data                                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/php-errors.data                                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/iis-errors.data                                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/unix-shell.data                                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/java-errors.data                                     etc/nginx/modsec/rules
etc/nginx/modsec/rules/lfi-os-files.data                                    etc/nginx/modsec/rules
etc/nginx/modsec/rules/scanners-urls.data                                   etc/nginx/modsec/rules
etc/nginx/modsec/rules/php-variables.data                                   etc/nginx/modsec/rules
etc/nginx/modsec/rules/scanners-headers.data                                etc/nginx/modsec/rules
etc/nginx/modsec/rules/restricted-files.data                                etc/nginx/modsec/rules
etc/nginx/modsec/rules/java-code-leakages.data                              etc/nginx/modsec/rules
etc/nginx/modsec/rules/sql-function-names.data                              etc/nginx/modsec/rules
etc/nginx/modsec/rules/crawlers-user-agents.data                            etc/nginx/modsec/rules
etc/nginx/modsec/rules/scanners-user-agents.data                            etc/nginx/modsec/rules
etc/nginx/modsec/rules/scripting-user-agents.data                           etc/nginx/modsec/rules
etc/nginx/modsec/rules/php-config-directives.data                           etc/nginx/modsec/rules
etc/nginx/modsec/rules/php-function-names-933150.data                       etc/nginx/modsec/rules
etc/nginx/modsec/rules/php-function-names-933151.data                       etc/nginx/modsec/rules
etc/nginx/modsec/rules/windows-powershell-commands.data                     etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-980-CORRELATION.conf                        etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-910-IP-REPUTATION.conf                       etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-912-DOS-PROTECTION.conf                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-950-DATA-LEAKAGES.conf                      etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-921-PROTOCOL-ATTACK.conf                     etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-905-COMMON-EXCEPTIONS.conf                   etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-913-SCANNER-DETECTION.conf                   etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf                  etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf                  etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf                  etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf                 etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-949-BLOCKING-EVALUATION.conf                 etc/nginx/modsec/rules
etc/nginx/modsec/rules/RESPONSE-959-BLOCKING-EVALUATION.conf                etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf              etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf              etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf              etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf              etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf              etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf      etc/nginx/modsec/rules
etc/nginx/modsec/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf etc/nginx/modsec/rules
etc/nginx/sites-available/techlist                                          etc/nginx/sites-available
etc/nginx/ssl/techlist/dh_2048.pem                                          etc/nginx/ssl/techlist
etc/nginx/ssl/techlist/dh_4096.pem                                          etc/nginx/ssl/techlist
etc/nginx/ssl/techlist/techlist.key                                         etc/nginx/ssl/techlist
etc/nginx/ssl/techlist/techlist.top.crt                                     etc/nginx/ssl/techlist
html/50x.html				                                                usr/share/nginx/html
html/index.html				                                                usr/share/nginx/html
debian/build-nginx/objs/nginx		                                        usr/sbin
debian/build-nginx-debug/objs/nginx-debug                                   usr/sbin

Сборка пакета

Приступаем непосредственно к сборке пакета и переходим в каталог с исходниками.

cd ~/nginx/nginx-1.13.9

Прежде чем запускать сборщик, я создаю контрольный снимок виртуальной машины, чтобы если понадобится иметь возможность откатиться и внести изменения в файлы или исходники.

Запускаем dh_make для создания начального пакета.

  • --copyright gpl - указываем тип лицензии
  • -e package@techlist.top - электронный адрес создателя пакета
  • --createorig - создать архив с оригинальными файлами orig.tar.xz
  • -s - указываем тип пакета "single"
  • -p nginx_1.13.9 - название пакета
  • -y - "yes" автоматом (чтобы лишний раз не вводить у при создании)
dh_make --copyright gpl -e package@techlist.top --createorig -s -y -p nginx_1.13.9

Выхлоп должен быть примерно следующий.

Email-Address       : package@techlist.top
License             : gpl2
Package Name        : nginx
Maintainer Name     : root
Version             : 1.13.9
Package Type        : single
Date                : Wed, 07 Mar 2018 17:49:23 +0300
You already have a debian/ subdirectory in the sourcetree.
dh_make will not try to overwrite anything.

Запускаем сборку пакета dpkg-buildpackage (может занять продолжительное время).

  • -us - unsigned source package (собирать пакет с неподписанными исходниками )
  • -uc - unsigned .changes file (собирать пакет с неподписанными изменениями в файлах)
dpkg-buildpackage -us -uc

Во время сборки dbg-пакета может выскочить предупреждение, если вы собираете сервер вместе с модулем PageSpeed. Поскольку dbg пакет мне не нужен, то я просто нажимаю "Y". (Что это такое, я не вникал, потому хз)

You have set --with-debug for building nginx, but precompiled Debug binaries for
PSOL, which ngx_pagespeed depends on, aren't available.  If you're trying to
debug PSOL you need to build it from source.  If you just want to run nginx with
debug-level logging you can use the Release binaries.

Use the available Release binaries? [Y/n] y

Вот так выглядит успешное создание пакета.

dpkg-deb: building package 'nginx' in '../nginx_1.13.9-1~xenial_amd64.deb'.
dpkg-deb: building package 'nginx-dbg' in '../nginx-dbg_1.13.9-1~xenial_amd64.deb'.
 dpkg-genchanges  >../nginx_1.13.9-1~xenial_amd64.changes
dpkg-genchanges: including full source code in upload
 dpkg-source --after-build nginx-1.13.9
dpkg-buildpackage: full upload (original source is included)

Готовый пакет находится в каталоге ~/nginx, там же находятся все сопутствующие архивы. На самом деле нужен только nginx_1.13.9-1~xenial_amd64.deb, это и есть тот самый пакет, который будет установлен.

Содержимое deb пакета можно просмотреть, чтобы убедиться что он правильно собран и в его состав входят все нужные файлы. Просмотреть пакет можно командой dpkg -с и указав его название.

dpkg -c nginx_1.13.9-1~xenial_amd64.deb

Команда выводит список всех каталогов и файлов внутри пакета их владельца и прав доступа. При установке пакета все эти файлы будут распакованы на свои места, так как указано в списке.

Список каталогов и файлов пакета
drwxr-xr-x root/root         0 2018-03-07 19:38 ./
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/sbin/
-rwxr-xr-x root/root  15505512 2018-03-07 19:38 ./usr/sbin/nginx-debug
-rwxr-xr-x root/root  15415400 2018-03-07 19:38 ./usr/sbin/nginx
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/man/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/man/man8/
-rw-r--r-- root/root      2452 2018-03-07 19:38 ./usr/share/man/man8/nginx.8.gz
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/lintian/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/lintian/overrides/
-rw-r--r-- root/root       342 2018-02-20 17:56 ./usr/share/lintian/overrides/nginx
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/nginx/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/nginx/html/
-rw-r--r-- root/root       537 2018-02-20 17:08 ./usr/share/nginx/html/50x.html
-rw-r--r-- root/root       612 2018-02-20 17:08 ./usr/share/nginx/html/index.html
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/doc/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./usr/share/doc/nginx/
-rw-r--r-- root/root     76109 2018-02-20 17:08 ./usr/share/doc/nginx/CHANGES.ru.gz
-rw-r--r-- root/root        49 2018-02-20 17:08 ./usr/share/doc/nginx/README
-rw-r--r-- root/root      1649 2018-02-20 17:56 ./usr/share/doc/nginx/copyright
-rw-r--r-- root/root     60906 2018-03-07 19:38 ./usr/share/doc/nginx/changelog.gz
-rw-r--r-- root/root       137 2018-03-07 19:10 ./usr/share/doc/nginx/changelog.Debian.gz
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/init.d/
-rwxr-xr-x root/root      4312 2018-03-07 19:38 ./etc/init.d/nginx-debug
-rwxr-xr-x root/root      4287 2018-03-07 19:38 ./etc/init.d/nginx
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/logrotate.d/
-rw-r--r-- root/root       351 2018-02-20 17:56 ./etc/logrotate.d/nginx
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/default/
-rw-r--r-- root/root       200 2018-02-20 17:56 ./etc/default/nginx-debug
-rw-r--r-- root/root       125 2018-02-20 17:56 ./etc/default/nginx
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/html/
-rw-r--r-- root/root       537 2018-01-08 04:55 ./etc/nginx/html/50x.html
-rw-r--r-- root/root       612 2018-01-08 04:55 ./etc/nginx/html/index.html
-rw-r--r-- root/root       128 2018-01-31 05:49 ./etc/nginx/html/error403.html
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/modsec/
-rw-r--r-- root/root      8528 2018-01-08 04:55 ./etc/nginx/modsec/modsecurity.conf
-rw-r--r-- root/root     53642 2018-01-08 04:55 ./etc/nginx/modsec/unicode.mapping
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/modsec/rules/
-rw-r--r-- root/root      1399 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
-rw-r--r-- root/root       240 2018-01-08 04:55 ./etc/nginx/modsec/rules/java-errors.data
-rw-r--r-- root/root       943 2018-01-08 04:55 ./etc/nginx/modsec/rules/unix-shell.data
-rw-r--r-- root/root      1894 2018-01-08 04:55 ./etc/nginx/modsec/rules/sql-errors.data
-rw-r--r-- root/root     12577 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-921-PROTOCOL-ATTACK.conf
-rw-r--r-- root/root     47303 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
-rw-r--r-- root/root      3812 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-950-DATA-LEAKAGES.conf
-rw-r--r-- root/root      3190 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-949-BLOCKING-EVALUATION.conf
-rw-r--r-- root/root       264 2018-01-08 04:55 ./etc/nginx/modsec/rules/java-code-leakages.data
-rw-r--r-- root/root      6374 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
-rw-r--r-- root/root      4410 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-980-CORRELATION.conf
-rw-r--r-- root/root       551 2018-01-08 04:55 ./etc/nginx/modsec/rules/iis-errors.data
-rw-r--r-- root/root       589 2018-01-08 04:55 ./etc/nginx/modsec/rules/php-function-names-933150.data
-rw-r--r-- root/root       216 2018-01-08 04:55 ./etc/nginx/modsec/rules/scanners-headers.data
-rw-r--r-- root/root     10155 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-910-IP-REPUTATION.conf
-rw-r--r-- root/root      5774 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
-rw-r--r-- root/root      9271 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-912-DOS-PROTECTION.conf
-rw-r--r-- root/root      5154 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
-rw-r--r-- root/root      9144 2018-01-08 04:55 ./etc/nginx/modsec/rules/php-errors.data
-rw-r--r-- root/root      5459 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
-rw-r--r-- root/root      5994 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
-rw-r--r-- root/root     18659 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
-rw-r--r-- root/root      2843 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
-rw-r--r-- root/root       418 2018-01-08 04:55 ./etc/nginx/modsec/rules/scanners-urls.data
-rw-r--r-- root/root      5409 2018-01-08 04:55 ./etc/nginx/modsec/rules/php-config-directives.data
-rw-r--r-- root/root       224 2018-01-08 04:55 ./etc/nginx/modsec/rules/php-variables.data
-rw-r--r-- root/root     41340 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
-rw-r--r-- root/root       717 2018-01-08 04:55 ./etc/nginx/modsec/rules/scripting-user-agents.data
-rw-r--r-- root/root      3792 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
-rw-r--r-- root/root     30167 2018-01-08 04:55 ./etc/nginx/modsec/rules/lfi-os-files.data
-rw-r--r-- root/root       713 2018-01-08 04:55 ./etc/nginx/modsec/rules/restricted-files.data
-rw-r--r-- root/root      7670 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-913-SCANNER-DETECTION.conf
-rw-r--r-- root/root      4075 2018-01-08 04:55 ./etc/nginx/modsec/rules/scanners-user-agents.data
-rw-r--r-- root/root     21376 2018-01-08 04:55 ./etc/nginx/modsec/rules/php-function-names-933151.data
-rw-r--r-- root/root      3920 2018-01-08 04:55 ./etc/nginx/modsec/rules/windows-powershell-commands.data
-rw-r--r-- root/root     19941 2018-01-08 04:55 ./etc/nginx/modsec/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
-rw-r--r-- root/root       659 2018-01-08 04:55 ./etc/nginx/modsec/rules/crawlers-user-agents.data
-rw-r--r-- root/root     31226 2018-01-08 04:55 ./etc/nginx/modsec/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
-rw-r--r-- root/root      1981 2018-01-08 04:55 ./etc/nginx/modsec/rules/sql-function-names.data
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/global_conf/
-rw-r--r-- root/root       449 2018-03-06 22:55 ./etc/nginx/global_conf/restrictions.conf
-rw-r--r-- root/root       682 2018-03-06 20:19 ./etc/nginx/global_conf/block_ip_access.conf
-rw-r--r-- root/root       274 2018-03-06 22:59 ./etc/nginx/global_conf/geoip.conf
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/sites-enabled/
-rw-r--r-- root/root       664 2018-01-08 04:55 ./etc/nginx/uwsgi_params
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/ssl/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/ssl/techlist/
-rw-r--r-- root/root       424 2018-01-08 04:55 ./etc/nginx/ssl/techlist/dh_2048.pem
-rw-r--r-- root/root      6002 2018-01-08 04:55 ./etc/nginx/ssl/techlist/techlist.top.crt
-rw-r--r-- root/root       769 2018-01-08 04:55 ./etc/nginx/ssl/techlist/dh_4096.pem
-rw-r--r-- root/root      1679 2018-01-08 04:55 ./etc/nginx/ssl/techlist/techlist.key
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/conf/
-rw-r--r-- root/root      3192 2018-03-06 06:42 ./etc/nginx/conf/restrictions.techlist.conf
-rw-r--r-- root/root       605 2018-01-08 04:55 ./etc/nginx/conf/gzip.conf
-rw-r--r-- root/root       535 2018-03-06 06:36 ./etc/nginx/conf/php.techlist.conf
-rw-r--r-- root/root       933 2018-01-26 17:43 ./etc/nginx/conf/pagespeed.conf
-rw-r--r-- root/root       223 2018-01-08 04:55 ./etc/nginx/conf/cache.conf
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/geoip/
-rw-r--r-- root/root  19112216 2018-01-08 04:55 ./etc/nginx/geoip/GeoLiteCity.dat
-rw-r--r-- root/root   1115050 2018-01-08 04:55 ./etc/nginx/geoip/GeoIP.dat
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/sites-available/
-rw-r--r-- root/root      3134 2018-02-14 11:25 ./etc/nginx/sites-available/techlist
-rw-r--r-- root/root      1077 2018-01-08 04:55 ./etc/nginx/fastcgi.conf
-rw-r--r-- root/root      3957 2018-01-08 04:55 ./etc/nginx/mime.types
-rw-r--r-- root/root      2837 2018-01-08 04:55 ./etc/nginx/koi-utf
-rw-r--r-- root/root      3610 2018-01-08 04:55 ./etc/nginx/win-utf
drwxr-xr-x root/root         0 2018-03-07 19:38 ./etc/nginx/lists/
-rw-r--r-- root/root       240 2018-01-30 21:27 ./etc/nginx/lists/spammers
-rw-r--r-- root/root      4851 2018-01-30 03:52 ./etc/nginx/lists/good_countries
-rw-r--r-- root/root        38 2018-01-08 06:46 ./etc/nginx/lists/bad_useragents
-rw-r--r-- root/root      2223 2018-01-08 04:55 ./etc/nginx/koi-win
-rw-r--r-- root/root       636 2018-01-08 04:55 ./etc/nginx/scgi_params
-rw-r--r-- root/root      3186 2018-03-06 23:03 ./etc/nginx/nginx.conf
-rw-r--r-- root/root      1762 2018-01-08 04:55 ./etc/nginx/fastcgi_params
drwxr-xr-x root/root         0 2018-03-07 19:38 ./var/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./var/cache/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./var/cache/nginx/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./var/log/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./var/log/nginx/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./lib/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./lib/systemd/
drwxr-xr-x root/root         0 2018-03-07 19:38 ./lib/systemd/system/
-rw-r--r-- root/root       399 2018-02-20 17:56 ./lib/systemd/system/nginx.service
-rw-r--r-- root/root       405 2018-02-20 17:56 ./lib/systemd/system/nginx-debug.service

Установка deb пакета

Готовый deb пакет устанавливается менеджером пакетов dpkg, ключ "-i" указывает на название пакета. Чтобы установить пакет нужно находиться в том же каталоге что и сам пакет.

# Переходим в каталог с пакетом
cd ~/nginx

# Устанавливаем пакет
dpkg -i nginx_1.13.9-1~xenial_amd64.deb

Selecting previously unselected package nginx.
(Reading database ... 135144 files and directories currently installed.)
Preparing to unpack nginx_1.13.9-1~xenial_amd64.deb ...
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------
Unpacking nginx (1.13.9-1~xenial) ...
Setting up nginx (1.13.9-1~xenial) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for systemd (229-4ubuntu21.1) ...
Processing triggers for ureadahead (0.100.0-19) ...

Так, как показано на примере выше, установка пакета срабатывает только в том случае, если пакет ставится на ту же машину, где и собирался. В таком случае все необходимые зависимости уже установлены, поскольку они были нужны для его сборки.

Но если пакет нужно установить на другую машину, то при установке deb пакета может возникнуть проблема с зависимостями, поскольку dpkg не устанавливает зависимости вместе с пакетом и все будет выглядеть примерно так.

Selecting previously unselected package nginx.
(Reading database ... 90295 files and directories currently installed.)
Preparing to unpack nginx_1.13.9-1~xenial_amd64.deb ...
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------
Unpacking nginx (1.13.9-1~xenial) ...
dpkg: dependency problems prevent configuration of nginx:
 nginx depends on libapr1 (>= 1.2.7); however:
  Package libapr1 is not installed.
 nginx depends on libaprutil1 (>= 1.4.0); however:
  Package libaprutil1 is not installed.
 nginx depends on libgeoip1; however:
  Package libgeoip1 is not installed.
 nginx depends on apache2-dev; however:
  Package apache2-dev is not installed.
 nginx depends on libpcre++-dev; however:
  Package libpcre++-dev is not installed.
 nginx depends on libxml2-dev; however:
  Package libxml2-dev is not installed.
 nginx depends on libcurl4-gnutls-dev; however:
  Package libcurl4-gnutls-dev is not installed.
 nginx depends on libssl-dev; however:
  Package libssl-dev is not installed.
 nginx depends on libgeoip-dev; however:
  Package libgeoip-dev is not installed.
 nginx depends on libpcre3-dev; however:
  Package libpcre3-dev is not installed.
 nginx depends on zlib1g-dev; however:
  Package zlib1g-dev is not installed.

dpkg: error processing package nginx (--install):
 dependency problems - leaving unconfigured
Processing triggers for systemd (229-4ubuntu19) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 nginx

Сам пакет будет установлен, файлы будут распакованы, каталоги созданы, но пока мы не установим зависимости, запустить сервер и заставить его работать не получится.

root@local:~# systemctl start nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
root@local:~# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2018-03-07 22:15:46 MSK; 2s ago
     Docs: http://nginx.org/en/docs/
  Process: 1567 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=127)

Mar 07 22:15:46 local systemd[1]: Starting nginx - high performance web server...
Mar 07 22:15:46 local nginx[1567]: /usr/sbin/nginx: error while loading shared libraries: libapr-1.so.0: cannot open shared object 
Mar 07 22:15:46 local systemd[1]: nginx.service: Control process exited, code=exited status=127
Mar 07 22:15:46 local systemd[1]: Failed to start nginx - high performance web server.
Mar 07 22:15:46 local systemd[1]: nginx.service: Unit entered failed state.
Mar 07 22:15:46 local systemd[1]: nginx.service: Failed with result 'exit-code'.

Сервер будет ругаться на невозможность загрузки и отсутствие нужных библиотек.

Mar 07 22:15:46 local nginx[1567]: /usr/sbin/nginx: error while loading shared libraries: libapr-1.so.0: cannot open shared object

Помимо этого, все файлы в каталоге /etc/nginx будут переименованы, к имени каждого файла будет добавлено окончание .dpkg-new.

deb package nginx

Все это лечится путем установки зависимостей. Чтобы установить зависимости выполняем apt-get -f install, сразу после установки пакета.

apt-get -f install

После установки зависимостей файлы станут называться своими привычными именами.

deb package nginxМожно запускать сервер.

systemctl enable nginx.service
systemctl start nginx.service

Проверяем.

systemctl status nginx

● nginx.service - nginx - high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-03-07 22:31:43 MSK; 3s ago
     Docs: http://nginx.org/en/docs/
  Process: 20609 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 20613 (nginx)
    Tasks: 2
   Memory: 38.7M
      CPU: 74ms
   CGroup: /system.slice/nginx.service
           ├─20613 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.con
           └─20614 nginx: worker process                   

Mar 07 22:31:40 local systemd[1]: Starting nginx - high performance web server...
Mar 07 22:31:43 local systemd[1]: Started nginx - high performance web server.
nginx -V
nginx version: nginx/1.13.9
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 
built with OpenSSL 1.1.0g  2 Nov 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --user=nginx --group=nginx --without-http_autoindex_module --without-http_ssi_module --without-http_scgi_module --without-http_uwsgi_module --without-http_split_clients_module --without-http_memcached_module --without-http_empty_gif_module --without-http_browser_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --with-http_stub_status_module --with-http_random_index_module --with-http_gunzip_module --with-threads --with-http_geoip_module --with-openssl=/root/nginx/nginx-1.13.9/debian/modules/openssl-1.1.0g --add-module=/root/nginx/nginx-1.13.9/debian/modules/incubator-pagespeed-ngx-1.12.34.3-stable --add-module=/root/nginx/nginx-1.13.9/debian/modules/modsecurity/nginx/modsecurity

Ответить:

Please enter your comment!
Please enter your name here