2017-11-01 15:24:59 +00:00
|
|
|
GO ?= go
|
2018-05-11 17:22:18 +00:00
|
|
|
EPOCH_TEST_COMMIT ?= c8208a845e734a3
|
2017-11-03 19:37:22 +00:00
|
|
|
HEAD ?= HEAD
|
2018-03-17 14:52:54 +00:00
|
|
|
CHANGELOG_BASE ?= HEAD~
|
|
|
|
CHANGELOG_TARGET ?= HEAD
|
2017-11-01 17:22:04 +00:00
|
|
|
PROJECT := github.com/projectatomic/libpod
|
2017-11-01 15:24:59 +00:00
|
|
|
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
|
|
|
GIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e "s/[^[:alnum:]]/-/g")
|
2017-11-02 19:31:21 +00:00
|
|
|
LIBPOD_IMAGE := libpod_dev$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN))
|
|
|
|
LIBPOD_INSTANCE := libpod_dev
|
2017-11-01 15:24:59 +00:00
|
|
|
PREFIX ?= ${DESTDIR}/usr/local
|
|
|
|
BINDIR ?= ${PREFIX}/bin
|
|
|
|
LIBEXECDIR ?= ${PREFIX}/libexec
|
|
|
|
MANDIR ?= ${PREFIX}/share/man
|
2018-03-01 20:33:04 +00:00
|
|
|
SHAREDIR_CONTAINERS ?= ${PREFIX}/share/containers
|
2018-01-17 20:41:56 +00:00
|
|
|
ETCDIR ?= ${DESTDIR}/etc
|
2017-11-02 19:31:21 +00:00
|
|
|
ETCDIR_LIBPOD ?= ${ETCDIR}/crio
|
2018-03-26 14:39:14 +00:00
|
|
|
SYSTEMDDIR ?= ${PREFIX}/lib/systemd/system
|
2017-11-01 15:24:59 +00:00
|
|
|
BUILDTAGS ?= seccomp $(shell hack/btrfs_tag.sh) $(shell hack/libdm_tag.sh) $(shell hack/btrfs_installed_tag.sh) $(shell hack/ostree_tag.sh) $(shell hack/selinux_tag.sh)
|
2018-03-26 14:39:14 +00:00
|
|
|
PYTHON ?= /usr/bin/python3
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions
|
|
|
|
OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d
|
|
|
|
|
|
|
|
SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z)
|
2018-01-24 14:45:55 +00:00
|
|
|
PACKAGES ?= $(shell go list -tags "${BUILDTAGS}" ./... | grep -v github.com/projectatomic/libpod/vendor | grep -v e2e)
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true)
|
|
|
|
GIT_COMMIT := $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}")
|
|
|
|
BUILD_INFO := $(shell date +%s)
|
2018-03-17 14:52:54 +00:00
|
|
|
ISODATE := $(shell date --iso-8601)
|
2018-04-25 18:26:52 +00:00
|
|
|
LIBSECCOMP_COMMIT := release-2.3
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
# If GOPATH not specified, use one in the local directory
|
|
|
|
ifeq ($(GOPATH),)
|
|
|
|
export GOPATH := $(CURDIR)/_output
|
|
|
|
unexport GOBIN
|
|
|
|
endif
|
|
|
|
GOPKGDIR := $(GOPATH)/src/$(PROJECT)
|
|
|
|
GOPKGBASEDIR := $(shell dirname "$(GOPKGDIR)")
|
|
|
|
|
|
|
|
# Update VPATH so make finds .gopathok
|
|
|
|
VPATH := $(VPATH):$(GOPATH)
|
2018-03-07 14:12:25 +00:00
|
|
|
BASE_LDFLAGS := -X main.gitCommit=${GIT_COMMIT} -X main.buildInfo=${BUILD_INFO}
|
2017-11-01 15:24:59 +00:00
|
|
|
LDFLAGS := -ldflags '${BASE_LDFLAGS}'
|
2018-02-16 16:59:53 +00:00
|
|
|
LDFLAGS_PODMAN := -ldflags '${BASE_LDFLAGS}'
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2017-11-03 19:37:22 +00:00
|
|
|
BOX="fedora_atomic"
|
|
|
|
|
2017-11-01 15:29:12 +00:00
|
|
|
all: binaries docs
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
default: help
|
|
|
|
|
|
|
|
help:
|
|
|
|
@echo "Usage: make <target>"
|
|
|
|
@echo
|
|
|
|
@echo " * 'install' - Install binaries to system locations"
|
2018-04-02 19:10:26 +00:00
|
|
|
@echo " * 'binaries' - Build podman"
|
2017-11-01 15:24:59 +00:00
|
|
|
@echo " * 'integration' - Execute integration tests"
|
|
|
|
@echo " * 'clean' - Clean artifacts"
|
|
|
|
@echo " * 'lint' - Execute the source code linter"
|
|
|
|
@echo " * 'gofmt' - Verify the source code gofmt"
|
|
|
|
|
|
|
|
.gopathok:
|
|
|
|
ifeq ("$(wildcard $(GOPKGDIR))","")
|
|
|
|
mkdir -p "$(GOPKGBASEDIR)"
|
|
|
|
ln -s "$(CURDIR)" "$(GOPKGBASEDIR)"
|
|
|
|
endif
|
|
|
|
touch "$(GOPATH)/.gopathok"
|
|
|
|
|
2018-03-26 14:39:14 +00:00
|
|
|
lint: .gopathok varlink_generate
|
2017-11-01 15:24:59 +00:00
|
|
|
@echo "checking lint"
|
|
|
|
@./.tool/lint
|
|
|
|
|
|
|
|
gofmt:
|
|
|
|
@./hack/verify-gofmt.sh
|
|
|
|
|
2017-12-12 18:40:20 +00:00
|
|
|
fix_gofmt:
|
|
|
|
@./hack/verify-gofmt.sh -f
|
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
test/bin2img/bin2img: .gopathok $(wildcard test/bin2img/*.go)
|
|
|
|
$(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/bin2img
|
|
|
|
|
|
|
|
test/copyimg/copyimg: .gopathok $(wildcard test/copyimg/*.go)
|
|
|
|
$(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/copyimg
|
|
|
|
|
|
|
|
test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go)
|
|
|
|
$(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/checkseccomp
|
|
|
|
|
2018-05-15 23:10:51 +00:00
|
|
|
podman: .gopathok API.md cmd/podman/varlink/ioprojectatomicpodman.go
|
2017-12-15 21:58:36 +00:00
|
|
|
$(GO) build -i $(LDFLAGS_PODMAN) -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2018-05-15 01:01:08 +00:00
|
|
|
python-podman:
|
|
|
|
$(MAKE) -C contrib/python python-podman
|
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
clean:
|
|
|
|
ifneq ($(GOPATH),)
|
|
|
|
rm -f "$(GOPATH)/.gopathok"
|
|
|
|
endif
|
|
|
|
rm -rf _output
|
2017-11-01 20:24:45 +00:00
|
|
|
rm -f docs/*.1
|
2018-04-19 03:19:53 +00:00
|
|
|
rm -f docs/*.5
|
2017-11-01 15:24:59 +00:00
|
|
|
rm -fr test/testdata/redis-image
|
|
|
|
find . -name \*~ -delete
|
|
|
|
find . -name \#\* -delete
|
2017-12-15 21:58:36 +00:00
|
|
|
rm -f bin/podman
|
2017-11-01 15:24:59 +00:00
|
|
|
rm -f test/bin2img/bin2img
|
|
|
|
rm -f test/copyimg/copyimg
|
|
|
|
rm -f test/checkseccomp/checkseccomp
|
2018-02-28 19:07:58 +00:00
|
|
|
rm -fr build/
|
2018-05-15 01:01:08 +00:00
|
|
|
$(MAKE) -C contrib/python clean
|
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2017-11-02 19:31:21 +00:00
|
|
|
libpodimage:
|
|
|
|
docker build -t ${LIBPOD_IMAGE} .
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2017-11-02 19:31:21 +00:00
|
|
|
dbuild: libpodimage
|
|
|
|
docker run --name=${LIBPOD_INSTANCE} --privileged ${LIBPOD_IMAGE} -v ${PWD}:/go/src/${PROJECT} --rm make binaries
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2018-03-07 15:14:17 +00:00
|
|
|
test: libpodimage
|
|
|
|
docker run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all localunit localintegration
|
|
|
|
|
2017-11-02 19:31:21 +00:00
|
|
|
integration: libpodimage
|
2018-03-07 15:14:17 +00:00
|
|
|
docker run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all localintegration
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2018-01-24 14:45:55 +00:00
|
|
|
integration.fedora:
|
|
|
|
DIST=Fedora sh .papr_prepare.sh
|
2018-02-09 18:31:47 +00:00
|
|
|
|
|
|
|
integration.centos:
|
|
|
|
DIST=CentOS sh .papr_prepare.sh
|
|
|
|
|
2018-03-13 15:36:40 +00:00
|
|
|
shell: libpodimage
|
|
|
|
docker run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e TRAVIS -it --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} sh
|
|
|
|
|
2018-03-07 15:14:17 +00:00
|
|
|
testunit: libpodimage
|
|
|
|
docker run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make localunit
|
|
|
|
|
2018-03-26 14:39:14 +00:00
|
|
|
localunit: varlink_generate
|
2017-11-01 15:24:59 +00:00
|
|
|
$(GO) test -tags "$(BUILDTAGS)" -cover $(PACKAGES)
|
|
|
|
|
2018-01-24 14:45:55 +00:00
|
|
|
ginkgo:
|
|
|
|
ginkgo -v test/e2e/
|
|
|
|
|
2018-05-15 01:01:08 +00:00
|
|
|
localintegration: varlink_generate test-binaries clientintegration
|
2018-02-15 14:17:35 +00:00
|
|
|
ginkgo -v -cover -flakeAttempts 3 -progress -trace -noColor test/e2e/.
|
2018-05-15 01:01:08 +00:00
|
|
|
|
|
|
|
clientintegration:
|
|
|
|
$(MAKE) -C contrib/python integration
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2017-11-03 19:37:22 +00:00
|
|
|
vagrant-check:
|
|
|
|
BOX=$(BOX) sh ./vagrant.sh
|
|
|
|
|
2018-05-15 01:01:08 +00:00
|
|
|
binaries: varlink_generate podman python-podman
|
2017-11-02 19:31:21 +00:00
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp
|
|
|
|
|
|
|
|
MANPAGES_MD := $(wildcard docs/*.md)
|
|
|
|
MANPAGES := $(MANPAGES_MD:%.md=%)
|
|
|
|
|
|
|
|
docs/%.1: docs/%.1.md .gopathok
|
|
|
|
(go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@)
|
|
|
|
|
2018-04-19 03:19:53 +00:00
|
|
|
docs/%.5: docs/%.5.md .gopathok
|
|
|
|
(go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@) || ($(GOPATH)/bin/go-md2man -in $< -out $@.tmp && touch $@.tmp && mv $@.tmp $@)
|
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
docs: $(MANPAGES)
|
|
|
|
|
2018-01-11 15:54:39 +00:00
|
|
|
docker-docs: docs
|
|
|
|
(cd docs; ./dckrman.sh *.1)
|
|
|
|
|
2018-03-17 14:52:54 +00:00
|
|
|
changelog:
|
|
|
|
@echo "Creating changelog from $(CHANGELOG_BASE) to $(CHANGELOG_TARGET)"
|
|
|
|
$(eval TMPFILE := $(shell mktemp))
|
|
|
|
$(shell cat changelog.txt > $(TMPFILE))
|
|
|
|
$(shell echo "- Changelog for $(CHANGELOG_TARGET) ($(ISODATE)):" > changelog.txt)
|
|
|
|
$(shell git log --no-merges --format=" * %s" $(CHANGELOG_BASE)..$(CHANGELOG_TARGET) >> changelog.txt)
|
|
|
|
$(shell echo "" >> changelog.txt)
|
|
|
|
$(shell cat $(TMPFILE) >> changelog.txt)
|
|
|
|
$(shell rm $(TMPFILE))
|
|
|
|
|
2018-03-26 14:39:14 +00:00
|
|
|
install: .gopathok install.bin install.man install.cni install.systemd
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
install.bin:
|
2017-12-15 21:58:36 +00:00
|
|
|
install ${SELINUXOPT} -D -m 755 bin/podman $(BINDIR)/podman
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2018-01-11 15:54:39 +00:00
|
|
|
install.man: docs
|
2017-11-01 15:24:59 +00:00
|
|
|
install ${SELINUXOPT} -d -m 755 $(MANDIR)/man1
|
2018-04-19 03:19:53 +00:00
|
|
|
install ${SELINUXOPT} -d -m 755 $(MANDIR)/man5
|
2017-11-01 15:24:59 +00:00
|
|
|
install ${SELINUXOPT} -m 644 $(filter %.1,$(MANPAGES)) -t $(MANDIR)/man1
|
2018-04-19 03:19:53 +00:00
|
|
|
install ${SELINUXOPT} -m 644 $(filter %.5,$(MANPAGES)) -t $(MANDIR)/man5
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
install.config:
|
2018-03-01 20:33:04 +00:00
|
|
|
install ${SELINUXOPT} -D -m 644 libpod.conf ${SHAREDIR_CONTAINERS}/libpod.conf
|
2017-11-02 19:31:21 +00:00
|
|
|
install ${SELINUXOPT} -D -m 644 seccomp.json $(ETCDIR_LIBPOD)/seccomp.json
|
2017-11-01 15:24:59 +00:00
|
|
|
install ${SELINUXOPT} -D -m 644 crio-umount.conf $(OCIUMOUNTINSTALLDIR)/crio-umount.conf
|
|
|
|
|
|
|
|
install.completions:
|
|
|
|
install ${SELINUXOPT} -d -m 755 ${BASHINSTALLDIR}
|
2017-12-15 21:58:36 +00:00
|
|
|
install ${SELINUXOPT} -m 644 -D completions/bash/podman ${BASHINSTALLDIR}
|
2017-11-01 15:24:59 +00:00
|
|
|
|
2017-12-20 21:13:52 +00:00
|
|
|
install.cni:
|
2018-01-04 18:59:33 +00:00
|
|
|
install ${SELINUXOPT} -D -m 644 cni/87-podman-bridge.conflist ${ETCDIR}/cni/net.d/87-podman-bridge.conflist
|
2017-12-20 21:13:52 +00:00
|
|
|
|
2018-01-11 15:54:39 +00:00
|
|
|
install.docker: docker-docs
|
|
|
|
install ${SELINUXOPT} -D -m 755 docker $(BINDIR)/docker
|
|
|
|
install ${SELINUXOPT} -d -m 755 $(MANDIR)/man1
|
2018-04-19 03:19:53 +00:00
|
|
|
install ${SELINUXOPT} -d -m 755 $(MANDIR)/man5
|
2018-01-11 15:54:39 +00:00
|
|
|
install ${SELINUXOPT} -m 644 docs/docker*.1 -t $(MANDIR)/man1
|
2018-04-19 03:19:53 +00:00
|
|
|
install ${SELINUXOPT} -m 644 docs/docker*.5 -t $(MANDIR)/man5
|
2018-01-11 15:54:39 +00:00
|
|
|
|
2018-03-26 14:39:14 +00:00
|
|
|
install.systemd:
|
2018-05-03 18:56:38 +00:00
|
|
|
install ${SELINUXOPT} -m 644 -D contrib/varlink/io.projectatomic.podman.socket ${SYSTEMDDIR}/io.projectatomic.podman.socket
|
|
|
|
install ${SELINUXOPT} -m 644 -D contrib/varlink/io.projectatomic.podman.service ${SYSTEMDDIR}/io.projectatomic.podman.service
|
2018-03-26 14:39:14 +00:00
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
uninstall:
|
|
|
|
for i in $(filter %.1,$(MANPAGES)); do \
|
2017-11-01 20:24:45 +00:00
|
|
|
rm -f $(MANDIR)/man1/$$(basename $${i}); \
|
2018-04-19 03:19:53 +00:00
|
|
|
done; \
|
|
|
|
for i in $(filter %.5,$(MANPAGES)); do \
|
|
|
|
rm -f $(MANDIR)/man5/$$(basename $${i}); \
|
2017-11-01 15:24:59 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
.PHONY: .gitvalidation
|
|
|
|
.gitvalidation: .gopathok
|
2017-11-03 19:37:22 +00:00
|
|
|
GIT_CHECK_EXCLUDE="./vendor" $(GOPATH)/bin/git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..$(HEAD)
|
2017-11-01 15:24:59 +00:00
|
|
|
|
|
|
|
.PHONY: install.tools
|
|
|
|
|
|
|
|
install.tools: .install.gitvalidation .install.gometalinter .install.md2man
|
|
|
|
|
|
|
|
.install.gitvalidation: .gopathok
|
|
|
|
if [ ! -x "$(GOPATH)/bin/git-validation" ]; then \
|
|
|
|
go get -u github.com/vbatts/git-validation; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
.install.gometalinter: .gopathok
|
|
|
|
if [ ! -x "$(GOPATH)/bin/gometalinter" ]; then \
|
|
|
|
go get -u github.com/alecthomas/gometalinter; \
|
|
|
|
cd $(GOPATH)/src/github.com/alecthomas/gometalinter; \
|
|
|
|
git checkout 23261fa046586808612c61da7a81d75a658e0814; \
|
|
|
|
go install github.com/alecthomas/gometalinter; \
|
|
|
|
$(GOPATH)/bin/gometalinter --install; \
|
|
|
|
fi
|
|
|
|
|
|
|
|
.install.md2man: .gopathok
|
|
|
|
if [ ! -x "$(GOPATH)/bin/go-md2man" ]; then \
|
2018-02-09 18:31:47 +00:00
|
|
|
go get -u github.com/cpuguy83/go-md2man; \
|
2017-11-01 15:24:59 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
.install.ostree: .gopathok
|
|
|
|
if ! pkg-config ostree-1 2> /dev/null ; then \
|
|
|
|
git clone https://github.com/ostreedev/ostree $(GOPATH)/src/github.com/ostreedev/ostree ; \
|
|
|
|
cd $(GOPATH)/src/github.com/ostreedev/ostree ; \
|
|
|
|
./autogen.sh --prefix=/usr/local; \
|
|
|
|
make all install; \
|
|
|
|
fi
|
|
|
|
|
2018-04-23 18:32:41 +00:00
|
|
|
varlink_generate: .gopathok cmd/podman/varlink/ioprojectatomicpodman.go
|
2018-05-07 22:09:11 +00:00
|
|
|
varlink_api_generate: .gopathok API.md
|
2018-03-26 14:39:14 +00:00
|
|
|
|
2018-04-28 16:45:51 +00:00
|
|
|
.PHONY: install.libseccomp.sudo
|
|
|
|
install.libseccomp.sudo:
|
2018-04-25 18:26:52 +00:00
|
|
|
rm -rf ../../seccomp/libseccomp
|
|
|
|
git clone https://github.com/seccomp/libseccomp ../../seccomp/libseccomp
|
|
|
|
cd ../../seccomp/libseccomp && git checkout $(LIBSECCOMP_COMMIT) && ./autogen.sh && ./configure --prefix=/usr && make all && make install
|
|
|
|
|
|
|
|
|
2018-04-23 18:32:41 +00:00
|
|
|
cmd/podman/varlink/ioprojectatomicpodman.go: cmd/podman/varlink/io.projectatomic.podman.varlink
|
|
|
|
$(GO) generate ./cmd/podman/varlink/...
|
2018-03-26 14:39:14 +00:00
|
|
|
|
2018-05-07 22:09:11 +00:00
|
|
|
API.md: cmd/podman/varlink/io.projectatomic.podman.varlink
|
|
|
|
$(GO) generate ./docs/...
|
|
|
|
|
2018-04-03 17:06:12 +00:00
|
|
|
validate: gofmt .gitvalidation
|
|
|
|
|
2017-11-01 15:24:59 +00:00
|
|
|
.PHONY: \
|
|
|
|
binaries \
|
|
|
|
clean \
|
|
|
|
default \
|
|
|
|
docs \
|
|
|
|
gofmt \
|
|
|
|
help \
|
|
|
|
install \
|
|
|
|
lint \
|
|
|
|
pause \
|
2018-03-13 15:36:40 +00:00
|
|
|
uninstall \
|
2018-03-17 14:52:54 +00:00
|
|
|
shell \
|
2018-04-03 17:06:12 +00:00
|
|
|
changelog \
|
2018-04-25 18:26:52 +00:00
|
|
|
validate \
|
2018-05-15 01:01:08 +00:00
|
|
|
install.libseccomp.sudo \
|
|
|
|
python-podman \
|
|
|
|
clientintegration
|