@@ -48,13 +48,32 @@ TAR_UPDATE := $(TAR) -uf
4848TAR_COMPRESS := bzip2
4949TAR_SUFFIX := bz2
5050
51+ # Metadata for packages, changelog, etc.
52+ USER_NAME ?= $(shell git config user.name)
53+ USER_EMAIL ?= $(shell git config user.email)
54+ BUILD_DATE ?= $(shell date -R)
55+
56+ HOST_DISTRO ?= $(shell [ -f /etc/os-release ] && eval `cat /etc/os-release`; echo $$ID)
57+ DEB_DISTRO ?= ubuntu
58+
5159# RPM spec files we might want to generate.
5260SPEC_FILES = $(shell find packaging -name \* .spec.in | sed 's/.spec.in/.spec/g' | uniq)
5361
5462# Systemd collateral.
5563SYSTEMD_DIRS = $(shell find cmd -name \* .service -o -name \* .socket | sed 's:cmd/::g;s:/.* ::g'|uniq)
5664SYSCONF_DIRS = $(shell find cmd -name \* .sysconf | sed 's:cmd/::g;s:/.* ::g' | uniq)
5765
66+ # Extra options to pass to docker (for instance --network host).
67+ DOCKER_OPTIONS =
68+
69+ # Docker boilerplate/commands to build debian/ubuntu packages.
70+ DOCKER_DEB_BUILD := mkdir -p /build && cd /build && \
71+ git clone /input/cri-resource-manager && cd /build/cri-resource-manager && \
72+ make BUILD_DIRS=cri-resmgr deb
73+
74+ # Where to leave built packages, if/when we build them in containers.
75+ PACKAGES_DIR = packages
76+
5877# Be quiet by default but let folks override it with Q= on the command line.
5978Q := @
6079
@@ -129,7 +148,7 @@ image-%:
129148 fi ; \
130149 echo " Vendoring dependencies..." ; \
131150 go mod vendor && \
132- scripts/build/docker-build --network=host $$ buildopts $$ src; \
151+ scripts/build/docker-build $( DOCKER_OPTIONS ) $$ buildopts $$ src; \
133152 rc=$$? ; \
134153 rm -fr vendor; \
135154 exit $$ rc
@@ -176,7 +195,7 @@ test:
176195 $(GO_MODULES )
177196
178197#
179- # Rules for building dist-tarballs, SPEC- files and RPMs.
198+ # Rule for building dist-tarballs, SPEC files, RPMs, debian collateral, deb's .
180199#
181200
182201dist :
@@ -196,11 +215,10 @@ spec: clean-spec $(SPEC_FILES)
196215% .spec :
197216 $(Q ) echo " Generating RPM spec file $@ ..." ; \
198217 eval ` $( GIT_ID) .` && \
199- cat $@ .in | \
200- sed " s/__VERSION__/$$ rpmversion/g" | \
201- sed " s/__TARVERSION__/$$ gitversion/g" | \
202- sed " s/__BUILDID__/$$ gitbuildid/g" \
203- > $@
218+ cp $@ .in $@ && \
219+ sed -E -i -e " s/__VERSION__/$$ rpmversion/g" \
220+ -e " s/__TARVERSION__/$$ gitversion/g" \
221+ -e " s/__BUILDID__/$$ gitbuildid/g" $@
204222
205223clean-spec :
206224 $(Q ) rm -f $(SPEC_FILES )
@@ -217,6 +235,59 @@ src.rpm source-rpm: spec dist
217235 cp cri-resource-manager* .tar.bz2 ~ /rpmbuild/SOURCES && \
218236 rpmbuild -bs ~ /rpmbuild/SPECS/cri-resource-manager.spec
219237
238+ debian/% : packaging/deb.in/%
239+ $(Q ) echo " Generating debian packaging file $@ ..." ; \
240+ mkdir -p debian; \
241+ eval ` $( GIT_ID) .` && \
242+ tarball=cri-resource-manager-$$ gitversion.tar && \
243+ cp $< $@ && \
244+ sed -E -i -e " s/__PACKAGE__/cri-resource-manager/g" \
245+ -e " s/__TARBALL__/$$ tarball/g" \
246+ -e " s/__VERSION__/$$ debversion/g" \
247+ -e " s/__AUTHOR__/$( USER_NAME) /g" \
248+ -e " s/__EMAIL__/$( USER_EMAIL) /g" \
249+ -e " s/__DATE__/$( BUILD_DATE) /g" \
250+ -e " s/__BUILD_DIRS__/$( BUILD_DIRS) /g" $@
251+
252+ clean-deb :
253+ $(Q ) rm -f debian
254+
255+ deb : debian/changelog debian/control debian/rules debian/compat dist
256+ $(Q ) if [ -z " $$ BUILD_CONTAINER" -a " $( HOST_DISTRO) " != " $( DEB_DISTRO) " ]; then \
257+ $(MAKE ) deb-docker-$(DEB_DISTRO ) ; \
258+ exit $$? ; \
259+ fi ; \
260+ dpkg-buildpackage -uc
261+
262+ deb-docker-% : docker/% -build
263+ $(Q ) distro=$(patsubst deb-docker-% ,% ,$@ ) ; \
264+ builddir=build/docker/$$ distro; \
265+ outdir=$(PACKAGES_DIR ) /$$ distro; \
266+ echo " Docker cross-building $$ distro packages..." ; \
267+ mkdir -p $(PACKAGES_DIR ) /$$ distro && \
268+ rm -fr $$ builddir && mkdir -p $$ builddir && \
269+ docker run --rm -ti $(DOCKER_OPTIONS ) --user $(shell echo $$USER) \
270+ --env USER_NAME=" $( USER_NAME) " --env USER_EMAIL=$(USER_EMAIL ) \
271+ -v $$(pwd ) :/input/cri-resource-manager \
272+ -v $$(pwd ) /$$ builddir:/build \
273+ -v $$(pwd ) /$$ outdir:/output \
274+ $$ distro-build /bin/bash -c " export DEB_DISTRO=$$ distro; $( DOCKER_DEB_BUILD) " && \
275+ cp $$ builddir/cri-resource-manager* .* $$ outdir && \
276+ rm -fr $$ builddir
277+
278+ ubuntu-packages :
279+ $(MAKE ) DEB_DISTRO=ubuntu deb
280+
281+ debian-packages :
282+ $(MAKE ) DEB_DISTRO=debian deb
283+
284+ # Build a docker image (for distro cross-building).
285+ docker/% : dockerfiles/Dockerfile.%
286+ $(Q ) img=$(patsubst docker/% ,% ,$@ ) ; \
287+ docker rm $$ img || : && \
288+ echo " Building cross-build docker image $$ img..." ; \
289+ scripts/build/docker-build-image $$ img --container $(DOCKER_OPTIONS )
290+
220291# Rule for recompiling a changed protobuf.
221292% .pb.go : % .proto
222293 $(Q ) echo " Generating go code ($@ ) for updated protobuf $<..." ; \
0 commit comments