1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
#!/usr/bin/make -f
BUILDER_IMAGES=centos-6 centos-7 debian-jessie debian-stretch debian-buster ubuntu-xenial ubuntu-trusty ubuntu-cosmic ubuntu-bionic
IMAGES=${BUILDER_IMAGES} devshell
DEFAULT_IMAGE ?= ubuntu-bionic
DEFAULT_DEB_IMAGE=$(DEFAULT_IMAGE)
DEFAULT_RPM_IMAGE=centos-7
DOCKER=docker
DOCKER_RUN_ARGS=-e USER_NAME_ON_HOST=$(shell whoami) \
--network=host --privileged \
--ulimit nofile=1024:1024 \
-v $(ROOT_DIR):/source \
-v $(DBLD_DIR)/build:/build \
-v $(DBLD_DIR)/install:/install \
$(if $(wildcard ${HOME}/.gitconfig),-v ${HOME}/.gitconfig:${HOME}/.gitconfig)
ROOT_DIR=$(shell pwd)
DBLD_DIR=$(ROOT_DIR)/dbld
BUILD_DIR=$(DBLD_DIR)/build
RELEASE_DIR=$(DBLD_DIR)/release
VERSION=$(shell cat VERSION)
TARBALL=$(BUILD_DIR)/syslog-ng-$(VERSION).tar.gz
MODE=snapshot
CONFIGURE_OPTS=--enable-debug --enable-manpages --with-python=2 --prefix=/install --with-docbook=/usr/share/xml/docbook/stylesheet/docbook-xsl/manpages/docbook.xsl $(CONFIGURE_ADD)
-include dbld/rules.conf
help:
@echo "This script allows you to build release/snapshot artifacts, such "
@echo "as rpm, deb packages and tarballs in controlled environments (e.g. "
@echo "within docker containers)."
@echo ""
@echo "Please create the required docker image first using the 'image' target"
@echo "then you can build syslog-ng binaries or do development using the "
@echo "targets described below."
@echo ""
@echo "Supported OSs are: $(IMAGES)"
@echo ""
@echo "Packaging targets:"
@echo " deb: generate debs in dbld/build for $(DEFAULT_DEB_IMAGE)"
@echo " rpm: generate RPMs in dbld/build for $(DEFAULT_RPM_IMAGE)"
@echo " deb-<os>: generate debs in dbld/build for the specified OS"
@echo " rpm-<os>: generate rpms in dbld/build for the specified OS"
@echo ""
@echo "Docker images:"
@echo " image: generate the default docker image"
@echo " image-<os>: generate docker image with a specific OS for building syslog-ng"
@echo " images: generate all docker images"
@echo ""
@echo "Development:"
@echo " bootstrap: bootstrap source from a git clone (e.g. autogen.sh and friends)"
@echo " shell: start a shell in the specified OS"
@echo " login: start a 2nd shell alongside an already running one"
@echo " root-login: start a 2nd shell (as root) alongside an already running one"
@echo " tarball: generate a tarball in a controlled environment (e.g. docker)"
@echo " release: generate a release deb package in a controlled environment (e.g. docker)"
@echo ""
@echo "Notable Make variables:"
@echo " CONFIGURE_ADD -- add this to the configure command line in bootstrap"
@echo " DEFAULT_IMAGE -- override the default image, currently $(DEFAULT_IMAGE)"
@echo ""
bootstrap: bootstrap-$(DEFAULT_IMAGE)
bootstrap-%: setup
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -e CONFIGURE_OPTS="$${CONFIGURE_OPTS:-$(CONFIGURE_OPTS)}" -i balabit/syslog-ng-$* /source/dbld/bootstrap
make-%: setup
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -i balabit/syslog-ng-$(DEFAULT_IMAGE) /source/dbld/make $(MAKE_ARGS) $*
tarball: tarball-$(DEFAULT_IMAGE)
tarball-%: setup
if [ -f $(TARBALL) ]; then \
count=`find $(ROOT_DIR) -newer $(TARBALL) | grep -v "^$(ROOT_DIR)/dbld/" | wc -l`; \
else \
count=1; \
fi; \
[ "$${count}" -gt 0 ] && $(DOCKER) run $(DOCKER_RUN_ARGS) --rm -i balabit/syslog-ng-$* /source/dbld/tarball || true
pkg-tarball: pkg-tarball-$(DEFAULT_IMAGE)
pkg-tarball-%: tarball-%
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -i balabit/syslog-ng-$* /source/dbld/pkg-tarball $(MODE)
deb: deb-$(DEFAULT_DEB_IMAGE)
deb-%: pkg-tarball-%
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -i balabit/syslog-ng-$* /source/dbld/deb
rpm: rpm-$(DEFAULT_RPM_IMAGE)
rpm-%: pkg-tarball-$(DEFAULT_IMAGE)
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -i balabit/syslog-ng-$* /source/dbld/rpm
release: MODE=release
release: deb
clean:
rm -rf $(BUILD_DIR)/*
shell: shell-$(DEFAULT_IMAGE)
shell-%: setup
$(DOCKER) run $(DOCKER_RUN_ARGS) --rm -ti balabit/syslog-ng-$* /source/dbld/shell
images: $(foreach image,$(IMAGES), image-$(image))
image: image-$(DEFAULT_IMAGE)
image-%:
cd $(DBLD_DIR)/images/ && $(DOCKER) build --network=host -t balabit/syslog-ng-$* -f $*.dockerfile .
exec: exec-$(DEFAULT_IMAGE)
exec: EXEC_COMMAND=echo Specify EXEC_COMMAND to do something sensible here
exec-%: setup
@container=`$(DOCKER) ps | grep syslog-ng-$* | head -1 | cut -d ' ' -f1`; \
$(DOCKER) exec -ti $$container $(EXEC_COMMAND)
login: login-$(DEFAULT_IMAGE)
login-%: EXEC_COMMAND=gosu $(shell whoami) /source/dbld/shell
login-%: exec-%
@true
root-login: root-login-$(DEFAULT_IMAGE)
root-login-%: EXEC_COMMAND=bash
root-login-%: exec-%
@true
setup:
@mkdir -p dbld/build || true
@mkdir -p dbld/install || true
@mkdir -p dbld/release || true
list-builder-images:
@echo ${BUILDER_IMAGES}
|