DOCKER_USER:=lukeshu DOCKER_ORGANIZATION=paradock DOCKER_IMAGE:=base DOCKER_TAG:=$(shell date -u +'%Y.%m.%d') .DEFAULT_GOAL = docker-image pacman.conf.%: /usr/share/pacman/defaults/pacman.conf.% sed -r "s|^.*Include\s*=\s*/etc/pacman.d/.*\.conf|#&|" < $< > $@ rootfs-$(DOCKER_TAG)-%.tar: pacman.conf.% packages exclude $(eval TMPDIR := $(shell mktemp -d)) env -i pacstrap -C $(CURDIR)/pacman.conf.$* -c -d -G -M $(TMPDIR) --hookdir=$(TMPDIR)/etc/pacman.d/hooks $(shell cat packages) cp --recursive --preserve=timestamps --backup --suffix=.pacnew rootfs/* $(TMPDIR)/ arch-chroot $(TMPDIR) locale-gen arch-chroot $(TMPDIR) pacman-key --init arch-chroot $(TMPDIR) pacman-key --populate tar --numeric-owner --xattrs --acls --exclude-from=exclude -C $(TMPDIR) -c . -f $@ rm -rf $(TMPDIR) Dockerfile: Dockerfile.in .var.DOCKER_TAG sed 's/@DOCKER_TAG@/$(DOCKER_TAG)/' < $< > $@ docker-image: rootfs-$(DOCKER_TAG)-x86_64.tar Dockerfile docker build -t $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) . docker tag $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE):$(DOCKER_TAG) docker-image-test: docker-image # FIXME: /etc/mtab is hidden by docker so the stricter -Qkk fails docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Sy && /usr/bin/pacman -Qqk" docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm docker && docker -v" # Ensure that the image does not include a private key ! docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) pacman-key --lsign-key pierre@archlinux.de docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/id -u http" docker run --rm $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) sh -c "/usr/bin/pacman -Syu --noconfirm grep && locale | grep -q UTF-8" ci-test: docker run --rm --privileged --tmpfs=/tmp:exec --tmpfs=/run/shm -v /run/docker.sock:/run/docker.sock \ -v $(PWD):/app -w /app $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) \ sh -c 'pacman -Syu --noconfirm make devtools docker && make docker-image-test' docker-push: docker login -u $(DOCKER_USER) docker push $(DOCKER_ORGANIZATION)/$(DOCKER_IMAGE) .PHONY: docker-image docker-image-test ci-test docker-push .PHONY: FORCE .var.%: FORCE @echo '# $* = $($*)' > .tmp.$@.tmp @if cmp -s .tmp.$@.tmp $@; then rm -f .tmp.$@.tmp || true; else mv -f .tmp.$@.tmp $@; fi -include $(wildcard .var.*) .SECONDARY: .DELETE_ON_ERROR: