Introduced deb packages building tools.

This commit is contained in:
Andrei Belov
2017-10-19 18:23:32 +03:00
parent eabe25d98e
commit 156877f3c9
39 changed files with 1367 additions and 3 deletions

View File

@@ -6,12 +6,16 @@ VERSION ?= $(shell grep 'define NXT_VERSION' ../src/nxt_main.h \
RELEASE ?= 1
default:
@echo "available targets: rpm"
@echo "available targets: rpm deb"
rpm:
@cd rpm && VERSION=$(VERSION) RELEASE=$(RELEASE) make all
deb:
@cd deb && VERSION=$(VERSION) RELEASE=$(RELEASE) make all
clean:
@cd rpm && make clean
@cd deb && make clean
.PHONY: default rpm clean
.PHONY: default rpm deb clean

198
pkg/deb/Makefile Normal file
View File

@@ -0,0 +1,198 @@
#!/usr/bin/make
DEFAULT_VERSION := $(shell grep 'define NXT_VERSION' ../../src/nxt_main.h \
| sed -e 's/^.*"\(.*\)".*/\1/')
DEFAULT_RELEASE := 1
VERSION ?= $(DEFAULT_VERSION)
RELEASE ?= $(DEFAULT_RELEASE)
SRCDIR= unit-$(VERSION)
CODENAME = $(shell lsb_release -cs)
BUILD_DEPENDS = debhelper devscripts libxml2-utils lintian lsb-release xsltproc
MODULES=
# Ubuntu 17.04
ifeq ($(CODENAME),zesty)
include Makefile.php
include Makefile.python27
include Makefile.python35
include Makefile.go17
include Makefile.go18
endif
# Ubuntu 16.04
ifeq ($(CODENAME),xenial)
include Makefile.php
include Makefile.python27
include Makefile.python35
include Makefile.go
endif
# Ubuntu 14.04
ifeq ($(CODENAME),trusty)
include Makefile.php
include Makefile.python
endif
# Debian 9
ifeq ($(CODENAME),stretch)
include Makefile.php
include Makefile.python27
include Makefile.python35
include Makefile.go17
include Makefile.go18
endif
# Debian 8
ifeq ($(CODENAME),jessie)
include Makefile.php
include Makefile.python27
endif
CONFIGURE_ARGS=\
--prefix=/usr \
--state=/var/lib/unit \
--control="unix:/var/run/control.unit.sock" \
--pid=/var/run/unit.pid \
--log=/var/log/unit.log \
--tests
export CR=\\n
default:
@echo "valid targets: all modules unit $(addprefix unit-, $(MODULES)) clean"
all: check-build-depends unit modules
modules: $(addprefix unit-, $(MODULES))
check-build-depends:
@{ \
not_installed= ; \
for pkg in $(BUILD_DEPENDS); do \
dpkg -s $${pkg} >/dev/null 2>&1 ; \
if [ $$? -ne 0 ]; then \
not_installed="$${not_installed} $${pkg}" ; \
fi ; \
done ; \
if test -n "$${not_installed}" ; then \
echo "" >&2 ; \
echo "The following packages are required in order to proceed:" >&2 ; \
echo "" >&2 ; \
echo $${not_installed} >&2 ; \
echo "" >&2 ; \
exit 1 ; \
fi \
}
debuild/$(SRCDIR)/debian:
@{ \
set -e ; \
mkdir -p debuild/$(SRCDIR) ; \
cp -pr debian debuild/$(SRCDIR) ; \
echo '9' > debuild/$(SRCDIR)/debian/compat ; \
mkdir -p debuild/$(SRCDIR)/debian/source ; \
echo '3.0 (quilt)' > debuild/$(SRCDIR)/debian/source/format ; \
cat debian/rules.in | sed \
-e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
> debuild/$(SRCDIR)/debian/rules ; \
}
debuild/$(SRCDIR)/debian/changelog: ../../docs/changes.xml | debuild/$(SRCDIR)/debian
cd ../../docs && make ../build/unit.deb-changelog
ifneq ($(DEFAULT_VERSION)$(DEFAULT_RELEASE), $(VERSION)$(RELEASE))
cat ../../build/unit.deb-changelog | sed \
-e "s/unit ($(DEFAULT_VERSION)-$(DEFAULT_RELEASE)~/unit ($(VERSION)-$(RELEASE)~/" \
-e "s#%%CODENAME%%#$(CODENAME)#g" \
> debuild/$(SRCDIR)/debian/changelog
else
cat ../../build/unit.deb-changelog | sed \
-e "s#%%CODENAME%%#$(CODENAME)#g" \
> debuild/$(SRCDIR)/debian/changelog
endif
debuild/unit_$(VERSION).orig.tar.gz: | debuild/$(SRCDIR)/debian
cd ../.. && tar -czf pkg/deb/debuild/$(SRCDIR).tar.gz \
--transform "s#^#$(SRCDIR)/#" \
LICENSE NOTICE CHANGES README configure auto src test
mv debuild/$(SRCDIR).tar.gz debuild/unit_$(VERSION).orig.tar.gz
cd debuild && tar zxf unit_$(VERSION).orig.tar.gz
unit: debuild/unit_$(VERSION).orig.tar.gz debuild/$(SRCDIR)/debian/changelog
@echo "===> Building $@ package"
cd debuild/$(SRCDIR) && debuild -us -uc
mkdir -p debs
find debuild/ -maxdepth 1 -type f -exec cp {} debs/ \;
ln -s debuild/$(SRCDIR)/build $@
debuild-%: debuild/unit_$(VERSION).orig.tar.gz ../../docs/changes.xml
mkdir $@
cp debuild/unit_$(VERSION).orig.tar.gz debuild-$*/unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
cd $@ && tar zxf unit-$(MODULE_SUFFIX_$*)_$(VERSION).orig.tar.gz
mkdir $@/$(SRCDIR)/debian
echo '9' > $@/$(SRCDIR)/debian/compat
mkdir $@/$(SRCDIR)/debian/source
echo '3.0 (quilt)' > $@/$(SRCDIR)/debian/source/format
cd ../../docs && make ../build/unit-$(MODULE_SUFFIX_$*).deb-changelog
cat ../../build/unit-$(MODULE_SUFFIX_$*).deb-changelog | sed \
-e "s#%%CODENAME%%#$(CODENAME)#g" \
> $@/$(SRCDIR)/debian/changelog
cp debian/copyright debuild-$*/$(SRCDIR)/debian/
@{ \
set -e ; \
for src in $(MODULE_SOURCES_$*); do \
cp debian.module/$${src} $@/$(SRCDIR)/debian/ ; \
done ; \
definitions=`echo "$$MODULE_DEFINITIONS_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
prebuild=`echo "$$MODULE_PREBUILD_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
preinstall=`echo "$$MODULE_PREINSTALL_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
post=`echo "$$MODULE_POST_$*" | sed -e ':a' -e 'N' -e '$$!ba' -e "s/\n/\$$CR/g"` ; \
cat debian.module/control.in | sed \
-e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
-e "s#%%SUMMARY%%#$(MODULE_SUMMARY_$*)#g" \
-e "s#%%CODENAME%%#$(CODENAME)#g" \
-e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
-e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
-e "s#%%VERSION%%#$(MODULE_VERSION_$*)#g" \
-e "s#%%RELEASE%%#$(MODULE_RELEASE_$*)#g" \
-e "s#%%MODULE_BUILD_DEPENDS%%#$(MODULE_BUILD_DEPENDS_$*)#g" \
-e "s#%%MODULE_DEPENDS%%#$(MODULE_DEPENDS_$*)#g" \
> $@/$(SRCDIR)/debian/control ; \
cat debian.module/rules.in | sed \
-e "s#%%NAME%%#unit-$(MODULE_SUFFIX_$*)#g" \
-e "s#%%CODENAME%%#$(CODENAME)#g" \
-e "s#%%UNIT_VERSION%%#$(VERSION)#g" \
-e "s#%%UNIT_RELEASE%%#$(RELEASE)#g" \
-e "s#%%CONFIGURE_ARGS%%#$(CONFIGURE_ARGS)#g" \
-e "s#%%MODULE_CONFARGS%%#$(MODULE_CONFARGS_$*)#g" \
-e "s#%%MODULE_MAKEARGS%%#$(MODULE_MAKEARGS_$*)#g" \
-e "s#%%MODULE_INSTARGS%%#$(MODULE_INSTARGS_$*)#g" \
-e "s#%%MODULE_DEFINITIONS%%#$${definitions}#g" \
-e "s#%%MODULE_PREBUILD%%#$${prebuild}#g" \
-e "s#%%MODULE_PREINSTALL%%#$${preinstall}#g" \
> $@/$(SRCDIR)/debian/rules ; \
cat debian.module/preinst.in | sed \
-e "s#%%MODULE_POST%%#$$post#g" \
> $@/$(SRCDIR)/debian/preinst ; \
chmod +x $@/$(SRCDIR)/debian/rules ; \
}
unit-%: | debuild-%
@echo "===> Building $@ package"
cd debuild-$*/$(SRCDIR) && debuild -us -uc
mkdir -p debs
find debuild-$*/ -maxdepth 1 -type f -exec cp {} debs/ \;
ln -s debuild-$*/$(SRCDIR)/build $@
clean:
rm -rf debuild debuild-* debs ../../build
find . -maxdepth 1 -type l -delete
.PHONY: default all modules check-build-depends clean
.SECONDARY:

51
pkg/deb/Makefile.go Normal file
View File

@@ -0,0 +1,51 @@
MODULES+= go
MODULE_SUFFIX_go= go
MODULE_SUMMARY_go= Go module for NGINX Unit
MODULE_VERSION_go= $(VERSION)
MODULE_RELEASE_go= 1
MODULE_CONFARGS_go= go --go-path=\$$(GOROOT)
MODULE_MAKEARGS_go= go
MODULE_INSTARGS_go= go-install
MODULE_SOURCES_go= unit.example-go-app \
unit.example-go-config
BUILD_DEPENDS+= golang
MODULE_BUILD_DEPENDS_go=,golang
MODULE_DEPENDS_go=,golang
define MODULE_DEFINITIONS_go
GOROOT = $(shell go env GOROOT)
endef
export MODULE_DEFINITIONS_go
define MODULE_PREINSTALL_go
mkdir -p debian/unit-go/usr/share/doc/unit-go/examples/go-app
install -m 644 -p debian/unit.example-go-app debian/unit-go/usr/share/doc/unit-go/examples/go-app/let-my-people.go
install -m 644 -p debian/unit.example-go-config debian/unit-go/usr/share/doc/unit-go/examples/unit.config
endef
export MODULE_PREINSTALL_go
define MODULE_POST_go
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_go) has been installed.
To check out the sample app, run these commands:
go build -o /tmp/go-app /usr/share/doc/unit-go/examples/go-app/let-my-people.go
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-go/examples/unit.config
curl http://localhost:8500/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_go

51
pkg/deb/Makefile.go17 Normal file
View File

@@ -0,0 +1,51 @@
MODULES+= go17
MODULE_SUFFIX_go17= go1.7
MODULE_SUMMARY_go17= Go 1.7 module for NGINX Unit
MODULE_VERSION_go17= $(VERSION)
MODULE_RELEASE_go17= 1
MODULE_CONFARGS_go17= go --go=/usr/lib/go-1.7/bin/go --go-path=\$$(GOROOT)
MODULE_MAKEARGS_go17= /usr/lib/go-1.7/bin/go
MODULE_INSTARGS_go17= /usr/lib/go-1.7/bin/go-install
MODULE_SOURCES_go17= unit.example-go-app \
unit.example-go1.7-config
BUILD_DEPENDS+= golang-1.7
MODULE_BUILD_DEPENDS_go=,golang-1.7
MODULE_DEPENDS_go=,golang-1.7
define MODULE_DEFINITIONS_go17
GOROOT = \$$(shell /usr/lib/go-1.7/bin/go env GOROOT)
endef
export MODULE_DEFINITIONS_go17
define MODULE_PREINSTALL_go17
mkdir -p debian/unit-go1.7/usr/share/doc/unit-go1.7/examples/go-app
install -m 644 -p debian/unit.example-go-app debian/unit-go1.7/usr/share/doc/unit-go1.7/examples/go-app/let-my-people.go
install -m 644 -p debian/unit.example-go1.7-config debian/unit-go1.7/usr/share/doc/unit-go1.7/examples/unit.config
endef
export MODULE_PREINSTALL_go17
define MODULE_POST_go17
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_go17) has been installed.
To check out the sample app, run these commands:
/usr/lib/go-1.7/bin/go build -o /tmp/go1.7-app /usr/share/doc/unit-go1.7/examples/go-app/let-my-people.go
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-go1.7/examples/unit.config
curl http://localhost:8500/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_go17

51
pkg/deb/Makefile.go18 Normal file
View File

@@ -0,0 +1,51 @@
MODULES+= go18
MODULE_SUFFIX_go18= go1.8
MODULE_SUMMARY_go18= Go 1.8 module for NGINX Unit
MODULE_VERSION_go18= $(VERSION)
MODULE_RELEASE_go18= 1
MODULE_CONFARGS_go18= go --go=/usr/lib/go-1.8/bin/go --go-path=\$$(GOROOT)
MODULE_MAKEARGS_go18= /usr/lib/go-1.8/bin/go
MODULE_INSTARGS_go18= /usr/lib/go-1.8/bin/go-install
MODULE_SOURCES_go18= unit.example-go-app \
unit.example-go1.8-config
BUILD_DEPENDS+= golang-1.8
MODULE_BUILD_DEPENDS_go=,golang-1.8
MODULE_DEPENDS_go=,golang-1.8
define MODULE_DEFINITIONS_go18
GOROOT = \$$(shell /usr/lib/go-1.8/bin/go env GOROOT)
endef
export MODULE_DEFINITIONS_go18
define MODULE_PREINSTALL_go18
mkdir -p debian/unit-go1.8/usr/share/doc/unit-go1.8/examples/go-app
install -m 644 -p debian/unit.example-go-app debian/unit-go1.8/usr/share/doc/unit-go1.8/examples/go-app/let-my-people.go
install -m 644 -p debian/unit.example-go1.8-config debian/unit-go1.8/usr/share/doc/unit-go1.8/examples/unit.config
endef
export MODULE_PREINSTALL_go18
define MODULE_POST_go18
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_go18) has been installed.
To check out the sample app, run these commands:
/usr/lib/go-1.8/bin/go build -o /tmp/go1.8-app /usr/share/doc/unit-go1.8/examples/go-app/let-my-people.go
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-go1.8/examples/unit.config
curl http://localhost:8500/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_go18

50
pkg/deb/Makefile.php Normal file
View File

@@ -0,0 +1,50 @@
MODULES+= php
MODULE_SUFFIX_php= php
MODULE_SUMMARY_php= PHP module for NGINX Unit
MODULE_VERSION_php= $(VERSION)
MODULE_RELEASE_php= 1
MODULE_CONFARGS_php= php
MODULE_MAKEARGS_php= php
MODULE_INSTARGS_php= php-install
MODULE_SOURCES_php= unit.example-php-app \
unit.example-php-config
ifneq (,$(findstring $(CODENAME),trusty jessie))
BUILD_DEPENDS+= php5-dev libphp5-embed
MODULE_BUILD_DEPENDS_php=,php5-dev,libphp5-embed
MODULE_DEPENDS_php=,libphp5-embed
else
BUILD_DEPENDS+= php-dev libphp-embed
MODULE_BUILD_DEPENDS_php=,php-dev,libphp-embed
MODULE_DEPENDS_php=,libphp-embed
endif
define MODULE_PREINSTALL_php
mkdir -p debian/unit-php/usr/share/doc/unit-php/examples/phpinfo-app
install -m 644 -p debian/unit.example-php-app debian/unit-php/usr/share/doc/unit-php/examples/phpinfo-app/index.php
install -m 644 -p debian/unit.example-php-config debian/unit-php/usr/share/doc/unit-php/examples/unit.config
endef
export MODULE_PREINSTALL_php
define MODULE_POST_php
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_php) has been installed.
To check out the sample app, run these commands:
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-php/examples/unit.config
curl http://localhost:8300/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_php

44
pkg/deb/Makefile.python Normal file
View File

@@ -0,0 +1,44 @@
MODULES+= python
MODULE_SUFFIX_python= python
MODULE_SUMMARY_python= Python module for NGINX Unit
MODULE_VERSION_python= $(VERSION)
MODULE_RELEASE_python= 1
MODULE_CONFARGS_python= python
MODULE_MAKEARGS_python= python
MODULE_INSTARGS_python= python-install
MODULE_SOURCES_python= unit.example-python-app \
unit.example-python-config
BUILD_DEPENDS+= python-dev
MODULE_BUILD_DEPENDS_python=,python-dev
define MODULE_PREINSTALL_python
mkdir -p debian/unit-python/usr/share/doc/unit-python/examples/python-app
install -m 644 -p debian/unit.example-python-app debian/unit-python/usr/share/doc/unit-python/examples/python-app/wsgi.py
install -m 644 -p debian/unit.example-python-config debian/unit-python/usr/share/doc/unit-python/examples/unit.config
endef
export MODULE_PREINSTALL_python
define MODULE_POST_python
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_python) has been installed.
To check out the sample app, run these commands:
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-python/examples/unit.config
curl http://localhost:8400/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_python

44
pkg/deb/Makefile.python27 Normal file
View File

@@ -0,0 +1,44 @@
MODULES+= python27
MODULE_SUFFIX_python27= python2.7
MODULE_SUMMARY_python27= Python 2.7 module for NGINX Unit
MODULE_VERSION_python27= $(VERSION)
MODULE_RELEASE_python27= 1
MODULE_CONFARGS_python27= python --config=python2.7-config
MODULE_MAKEARGS_python27= python2.7
MODULE_INSTARGS_python27= python2.7-install
MODULE_SOURCES_python27= unit.example-python-app \
unit.example-python2.7-config
BUILD_DEPENDS+= python2.7-dev
MODULE_BUILD_DEPENDS_python27=,python2.7-dev
define MODULE_PREINSTALL_python27
mkdir -p debian/unit-python2.7/usr/share/doc/unit-python2.7/examples/python-app
install -m 644 -p debian/unit.example-python-app debian/unit-python2.7/usr/share/doc/unit-python2.7/examples/python-app/wsgi.py
install -m 644 -p debian/unit.example-python2.7-config debian/unit-python2.7/usr/share/doc/unit-python2.7/examples/unit.config
endef
export MODULE_PREINSTALL_python27
define MODULE_POST_python27
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_python27) has been installed.
To check out the sample app, run these commands:
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-python2.7/examples/unit.config
curl http://localhost:8400/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_python27

44
pkg/deb/Makefile.python34 Normal file
View File

@@ -0,0 +1,44 @@
MODULES+= python34
MODULE_SUFFIX_python34= python3.4
MODULE_SUMMARY_python34= Python 3.4 module for NGINX Unit
MODULE_VERSION_python34= $(VERSION)
MODULE_RELEASE_python34= 1
MODULE_CONFARGS_python34= python --config=python3.4-config
MODULE_MAKEARGS_python34= python3.4
MODULE_INSTARGS_python34= python3.4-install
MODULE_SOURCES_python34= unit.example-python-app \
unit.example-python3.4-config
BUILD_DEPENDS+= python3.4-dev
MODULE_BUILD_DEPENDS_python34=,python3.4-dev
define MODULE_PREINSTALL_python34
mkdir -p debian/unit-python3.4/usr/share/doc/unit-python3.4/examples/python-app
install -m 644 -p debian/unit.example-python-app debian/unit-python3.4/usr/share/doc/unit-python3.4/examples/python-app/wsgi.py
install -m 644 -p debian/unit.example-python3.4-config debian/unit-python3.4/usr/share/doc/unit-python3.4/examples/unit.config
endef
export MODULE_PREINSTALL_python34
define MODULE_POST_python34
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_python34) has been installed.
To check out the sample app, run these commands:
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-python3.4/examples/unit.config
curl http://localhost:8400/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_python34

44
pkg/deb/Makefile.python35 Normal file
View File

@@ -0,0 +1,44 @@
MODULES+= python35
MODULE_SUFFIX_python35= python3.5
MODULE_SUMMARY_python35= Python 3.5 module for NGINX Unit
MODULE_VERSION_python35= $(VERSION)
MODULE_RELEASE_python35= 1
MODULE_CONFARGS_python35= python --config=python3.5-config
MODULE_MAKEARGS_python35= python3.5
MODULE_INSTARGS_python35= python3.5-install
MODULE_SOURCES_python35= unit.example-python-app \
unit.example-python3.5-config
BUILD_DEPENDS+= python3.5-dev
MODULE_BUILD_DEPENDS_python35=,python3.5-dev
define MODULE_PREINSTALL_python35
mkdir -p debian/unit-python3.5/usr/share/doc/unit-python3.5/examples/python-app
install -m 644 -p debian/unit.example-python-app debian/unit-python3.5/usr/share/doc/unit-python3.5/examples/python-app/wsgi.py
install -m 644 -p debian/unit.example-python3.5-config debian/unit-python3.5/usr/share/doc/unit-python3.5/examples/unit.config
endef
export MODULE_PREINSTALL_python35
define MODULE_POST_python35
cat <<BANNER
----------------------------------------------------------------------
The $(MODULE_SUMMARY_python35) has been installed.
To check out the sample app, run these commands:
sudo service unit restart
sudo service unit loadconfig /usr/share/doc/unit-python3.5/examples/unit.config
curl http://localhost:8400/
Online documentation is available at https://unit.nginx.org
----------------------------------------------------------------------
BANNER
endef
export MODULE_POST_python35

View File

@@ -0,0 +1,32 @@
Source: %%NAME%%
Section: admin
Priority: extra
Maintainer: Andrei Belov <defan@nginx.com>
Build-Depends: debhelper (>= 9),
linux-libc-dev%%MODULE_BUILD_DEPENDS%%
Standards-Version: 3.9.5
Homepage: https://unit.nginx.org
Package: %%NAME%%
Section: admin
Architecture: any
Depends: lsb-base,
${misc:Depends}, ${shlibs:Depends},
unit (= %%UNIT_VERSION%%-%%UNIT_RELEASE%%~%%CODENAME%%)%%MODULE_DEPENDS%%
Description: %%SUMMARY%%
NGINX Unit is a runtime and delivery environment for modern distributed
applications. It runs the application code in multiple languages
(PHP, Python, Go, etc.), and tightly couples it with traffic delivery
in and out of the application. Take this application server and proxy
directly in the cloud / container environments and fully control your app
dynamically via an API.
This package contains %%SUMMARY%%.
Package: %%NAME%%-dbg
Section: debug
Architecture: any
Priority: extra
Depends: %%NAME%% (= ${binary:Version}),
${misc:Depends}
Description: %%SUMMARY%% (debug symbols)
This package contains the debugging symbols for %%NAME%%

View File

@@ -0,0 +1,21 @@
#!/bin/sh
set -e
case "$1" in
install)
%%MODULE_POST%%
;;
upgrade)
;;
abort-upgrade)
;;
*)
echo "preinst called with unknown argument \`$1'" >&2
exit 0
;;
esac
#DEBHELPER#
exit 0

95
pkg/deb/debian.module/rules.in Executable file
View File

@@ -0,0 +1,95 @@
#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
BUILDDIR_unit = $(CURDIR)/debian/build-unit
BUILDDIR_unit_debug = $(CURDIR)/debian/build-unit-debug
INSTALLDIR = $(CURDIR)/debian/%%NAME%%
BASEDIR = $(CURDIR)
%%MODULE_DEFINITIONS%%
config.env.%:
dh_testdir
mkdir -p $(BUILDDIR_$*)
cp -Pa $(CURDIR)/auto $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/configure $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/src $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/test $(BUILDDIR_$*)/
touch $@
configure.unit: config.env.unit
cd $(BUILDDIR_unit) && \
./configure \
%%CONFIGURE_ARGS%% \
--modules=/usr/lib/unit/modules && \
./configure %%MODULE_CONFARGS%%
touch $@
configure.unit_debug: config.env.unit_debug
cd $(BUILDDIR_unit_debug) && \
./configure \
%%CONFIGURE_ARGS%% \
--modules=/usr/lib/unit/debug-modules \
--debug && \
./configure %%MODULE_CONFARGS%%
touch $@
build-arch.%: configure.%
dh_testdir
$(MAKE) -C $(BUILDDIR_$*) %%MODULE_MAKEARGS%%
touch $@
build-indep:
dh_testdir
touch $@
build-arch: build-arch.unit build-arch.unit_debug
dh_testdir
touch $@
build: build-arch build-indep
dh_testdir
touch $@
clean:
dh_testdir
dh_testroot
dh_clean
find $(CURDIR) -maxdepth 1 -size 0 -delete
install: build
dh_testdir
dh_testroot
dh_prep
dh_installdirs
dh_installinit
dh_installlogrotate
%%MODULE_PREINSTALL%%
cd $(BUILDDIR_unit) && \
DESTDIR=$(INSTALLDIR) make %%MODULE_INSTARGS%%
cd $(BUILDDIR_unit_debug) && \
DESTDIR=$(INSTALLDIR) make %%MODULE_INSTARGS%%
binary-indep: build install
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs
dh_link
dh_strip --dbg-package=%%NAME%%-dbg
dh_shlibdeps
dh_compress
dh_fixperms
dh_installdeb
dh_perl
dh_gencontrol
dh_md5sums
dh_builddeb
binary-arch: install
binary: binary-indep binary-arch
.PHONY: clean binary-indep binary-arch binary install build

View File

@@ -0,0 +1,20 @@
package main
import (
"fmt"
"net/http"
"unit"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "text/plain");
fmt.Fprintf(w, "Method : %s\n", r.Method)
fmt.Fprintf(w, "URL : %s\n", r.URL.Path)
fmt.Fprintf(w, "Host : %s\n", r.Host)
}
func main() {
http.HandleFunc("/", handler)
unit.ListenAndServe("8000", nil)
}

View File

@@ -0,0 +1,15 @@
{
"applications": {
"example_go": {
"type": "go",
"user": "nobody",
"executable": "/tmp/go-app"
}
},
"listeners": {
"*:8500": {
"application": "example_go"
}
}
}

View File

@@ -0,0 +1,15 @@
{
"applications": {
"example_go": {
"type": "go",
"user": "nobody",
"executable": "/tmp/go1.7-app"
}
},
"listeners": {
"*:8500": {
"application": "example_go"
}
}
}

View File

@@ -0,0 +1,15 @@
{
"applications": {
"example_go": {
"type": "go",
"user": "nobody",
"executable": "/tmp/go1.8-app"
}
},
"listeners": {
"*:8500": {
"application": "example_go"
}
}
}

View File

@@ -0,0 +1 @@
<?php phpinfo(); ?>

View File

@@ -0,0 +1,17 @@
{
"applications": {
"example_php": {
"type": "php",
"user": "nobody",
"workers": 2,
"root": "/usr/share/doc/unit-php/examples/phpinfo-app",
"index": "index.php"
}
},
"listeners": {
"*:8300": {
"application": "example_php"
}
}
}

View File

@@ -0,0 +1,16 @@
import os
import datetime
import sys
def application(environ, start_response):
output = datetime.datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
output += "\n\nPython: "
output += sys.version
output += "\n\nENV Variables:\n\n"
for param in os.environ.keys():
output += param
output += "\t"
output += os.environ[param]
output += "\n"
start_response('200 OK', [('Content-type', 'text/plain')])
return [s.encode('utf8') for s in output]

View File

@@ -0,0 +1,17 @@
{
"applications": {
"example_python": {
"type": "python",
"user": "nobody",
"workers": 2,
"path": "/usr/share/doc/unit-python/examples/python-app",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "example_python"
}
}
}

View File

@@ -0,0 +1,17 @@
{
"applications": {
"example_python": {
"type": "python",
"user": "nobody",
"workers": 2,
"path": "/usr/share/doc/unit-python2.7/examples/python-app",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "example_python"
}
}
}

View File

@@ -0,0 +1,17 @@
{
"applications": {
"example_python": {
"type": "python",
"user": "nobody",
"workers": 2,
"path": "/usr/share/doc/unit-python3.4/examples/python-app",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "example_python"
}
}
}

View File

@@ -0,0 +1,17 @@
{
"applications": {
"example_python": {
"type": "python",
"user": "nobody",
"workers": 2,
"path": "/usr/share/doc/unit-python3.5/examples/python-app",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "example_python"
}
}
}

30
pkg/deb/debian/control Normal file
View File

@@ -0,0 +1,30 @@
Source: unit
Section: admin
Priority: extra
Maintainer: Andrei Belov <defan@nginx.com>
Build-Depends: debhelper (>= 9),
linux-libc-dev
Standards-Version: 3.9.5
Homepage: https://unit.nginx.org
Package: unit
Section: admin
Architecture: any
Depends: lsb-base,
${misc:Depends}, ${shlibs:Depends}
Description: NGINX Unit
NGINX Unit is a runtime and delivery environment for modern distributed
applications. It runs the application code in multiple languages
(PHP, Python, Go, etc.), and tightly couples it with traffic delivery
in and out of the application. Take this application server and proxy
directly in the cloud / container environments and fully control your app
dynamically via an API.
Package: unit-dbg
Section: debug
Architecture: any
Priority: extra
Depends: unit (= ${binary:Version}),
${misc:Depends}
Description: NGINX Unit (debug symbols)
This package contains the debugging symbols for NGINX Unit.

21
pkg/deb/debian/copyright Normal file
View File

@@ -0,0 +1,21 @@
NGINX Unit.
Copyright 2017 NGINX, Inc.
Copyright 2017 Igor Sysoev
Copyright 2017 Valentin V. Bartenev
Copyright 2017 Max Romanov
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
/usr/share/common-licenses/Apache-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

4
pkg/deb/debian/dirs Normal file
View File

@@ -0,0 +1,4 @@
usr/sbin
etc/unit
usr/lib/unit
var/lib/unit

105
pkg/deb/debian/rules.in Normal file
View File

@@ -0,0 +1,105 @@
#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
BUILDDIR_unit = $(CURDIR)/debian/build-unit
BUILDDIR_unit_debug = $(CURDIR)/debian/build-unit-debug
INSTALLDIR = $(CURDIR)/debian/unit
BASEDIR = $(CURDIR)
DOTESTS = 0
config.env.%:
dh_testdir
mkdir -p $(BUILDDIR_$*)
cp -Pa $(CURDIR)/auto $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/configure $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/src $(BUILDDIR_$*)/
cp -Pa $(CURDIR)/test $(BUILDDIR_$*)/
touch $@
configure.unit: config.env.unit
cd $(BUILDDIR_unit) && \
./configure \
%%CONFIGURE_ARGS%% \
--modules=/usr/lib/unit/modules
touch $@
configure.unit_debug: config.env.unit_debug
cd $(BUILDDIR_unit_debug) && \
./configure \
%%CONFIGURE_ARGS%% \
--modules=/usr/lib/unit/debug-modules \
--debug
touch $@
build-arch.%: configure.%
dh_testdir
$(MAKE) -C $(BUILDDIR_$*)
ifeq ($(DOTESTS), 1)
$(MAKE) -C $(BUILDDIR_$*) tests
endif
touch $@
do.tests: build
dh_testdir
ifeq ($(DOTESTS), 1)
cd $(BUILDDIR_unit) && ./build/tests
cd $(BUILDDIR_unit_debug) && ./build/tests
endif
touch $@
build-indep:
dh_testdir
touch $@
build-arch: build-arch.unit build-arch.unit_debug
dh_testdir
touch $@
build: build-arch build-indep
dh_testdir
touch $@
clean:
dh_testdir
dh_testroot
dh_clean
find $(CURDIR) -maxdepth 1 -size 0 -delete
install: build do.tests
dh_testdir
dh_testroot
dh_prep
dh_installdirs
dh_installinit
dh_installlogrotate
cd $(BUILDDIR_unit) && DESTDIR=$(INSTALLDIR) make install
install -m 755 $(BUILDDIR_unit_debug)/build/unitd $(INSTALLDIR)/usr/sbin/unitd-debug
mkdir -p $(INSTALLDIR)/usr/share/doc/unit/examples
install -m 644 debian/unit.example.config $(INSTALLDIR)/usr/share/doc/unit/examples/example.config
install -m 644 CHANGES $(INSTALLDIR)/usr/share/doc/unit/
install -m 644 README $(INSTALLDIR)/usr/share/doc/unit/
binary-indep: build install
dh_testdir
dh_testroot
dh_installdocs
dh_installchangelogs
dh_link
dh_strip --dbg-package=unit-dbg
dh_shlibdeps
dh_compress
dh_fixperms
dh_installdeb
dh_perl
dh_gencontrol
dh_md5sums
dh_builddeb
binary-arch: install
binary: binary-indep binary-arch
.PHONY: clean binary-indep binary-arch binary install build

View File

@@ -0,0 +1 @@
DAEMON_ARGS="--log /var/log/unit.log --pid /run/unit.pid"

View File

@@ -0,0 +1,20 @@
package main
import (
"fmt"
"net/http"
"unit"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "text/plain");
fmt.Fprintf(w, "Method : %s\n", r.Method)
fmt.Fprintf(w, "URL : %s\n", r.URL.Path)
fmt.Fprintf(w, "Host : %s\n", r.Host)
}
func main() {
http.HandleFunc("/", handler)
unit.ListenAndServe("8000", nil)
}

View File

@@ -0,0 +1 @@
<?php phpinfo(); ?>

View File

@@ -0,0 +1,16 @@
import os
import datetime
import sys
def application(environ, start_response):
output = datetime.datetime.now().strftime("%Y-%m-%d %I:%M:%S %p")
output += "\n\nPython: "
output += sys.version
output += "\n\nENV Variables:\n\n"
for param in os.environ.keys():
output += param
output += "\t"
output += os.environ[param]
output += "\n"
start_response('200 OK', [('Content-type', 'text/plain')])
return output.encode('utf8')

View File

@@ -0,0 +1,39 @@
{
"applications": {
"example_php": {
"type": "php",
"user": "nobody",
"workers": 2,
"root": "/usr/share/doc/unit/examples/php-app",
"index": "index.php"
},
"example_python": {
"type": "python",
"user": "nobody",
"workers": 2,
"path": "/usr/share/doc/unit/examples/python-app",
"module": "wsgi"
},
"example_go": {
"type": "go",
"user": "nobody",
"executable": "/tmp/go-app"
}
},
"listeners": {
"*:8300": {
"application": "example_php"
},
"*:8400": {
"application": "example_python"
},
"*:8500": {
"application": "example_go"
}
}
}

104
pkg/deb/debian/unit.init Normal file
View File

@@ -0,0 +1,104 @@
#!/bin/sh
#
# unitd NGINX Unit
#
### BEGIN INIT INFO
# Provides: unitd
# Required-Start: $network $remote_fs
# Required-Stop: $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: NGINX Unit
# Description: NGINX Unit
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/unitd
NAME=unitd
DESC=unitd
CONFIG=/etc/unit/config
[ -r /etc/default/${NAME} ] && . /etc/default/${NAME}
if [ -n "$2" ]; then
CONFIG=$2
fi
#includes lsb functions
. /lib/lsb/init-functions
test -f $DAEMON || exit 0
umask 022
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --quiet --pidfile /run/$NAME.pid \
--exec $DAEMON -- $DAEMON_ARGS; then
log_end_msg 0
else
log_end_msg 1
fi
;;
status)
status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if start-stop-daemon --oknodo --stop --quiet --pidfile /var/run/$NAME.pid \
--exec $DAEMON; then
log_end_msg 0
else
log_end_msg 1
fi
;;
reload|force-reload)
echo "Not implemented." >&2
exit 1
;;
restart)
log_action_begin_msg "Restarting $DESC" "$NAME"
start-stop-daemon --stop --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON || true
sleep 1
if start-stop-daemon --start --quiet --pidfile \
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_ARGS; then
log_end_msg 0
else
log_end_msg 1
fi
;;
saveconfig)
curl -sS --unix-socket /var/run/control.unit.sock localhost >${CONFIG}.new
if [ $? -ne 0 ]; then
echo "Could not retreive configuration" >&2
rm -f ${CONFIG}.new
exit 1
fi
mv ${CONFIG}.new ${CONFIG}
echo "The following configuration has been saved to ${CONFIG}:"
cat ${CONFIG}
;;
loadconfig)
if [ ! -e ${CONFIG} ]; then
echo "Could not find ${CONFIG} for loading" >&2
exit 1
fi
echo "Loading configuration from ${CONFIG}..."
curl -sS -X PUT --data-binary @${CONFIG} --unix-socket /var/run/control.unit.sock localhost
if [ $? -ne 0 ]; then
echo "Loading failed!" >&2
exit 1
fi
;;
*)
echo "Usage: /etc/init.d/$NAME {start|status|stop|restart|reload|force-reload|saveconfig|loadconfig}" >&2
exit 1
;;
esac
exit 0

11
pkg/deb/debian/unit.postinst Executable file
View File

@@ -0,0 +1,11 @@
#!/bin/sh
set -e
if [ "$1" != "configure" ]; then
exit 0
fi
#DEBHELPER#
exit 0

View File

@@ -0,0 +1,34 @@
#!/bin/sh
set -e
case "$1" in
install)
cat <<BANNER
----------------------------------------------------------------------
Thank you for installing NGINX Unit!
Additional modules are available in standalone packages.
To see the available modules, run: apt search --names-only '^unit-'
Online documentation is available at https://unit.nginx.org/
----------------------------------------------------------------------
BANNER
;;
upgrade)
;;
abort-upgrade)
;;
*)
echo "preinst called with unknown argument \`$1'" >&2
exit 0
;;
esac
#DEBHELPER#
exit 0

View File

@@ -0,0 +1,14 @@
[Unit]
Description=NGINX Unit
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
PIDFile=/run/unit.pid
EnvironmentFile=-/etc/default/unit
ExecStart=/usr/sbin/unitd $DAEMON_ARGS
ExecReload=
[Install]
WantedBy=multi-user.target