PACKAGE_NAME := pgmon VERSION := 1.0 BUILD_DIR := build DEB_IMAGE := debian-package-builder RPM_IMAGE := rpm-package-builder SCRIPT := src/$(PACKAGE_NAME).py INSTALL_TEST_DEBIAN := 11 INSTALL_TEST_REDHAT := 9 INSTALL_TEST_UBUNTU := 24.04 ## # These targets are the main ones to use for most things. ## .PHONY: all clean deb rpm test install install-tests all: deb rpm deb: mkdir -p $(BUILD_DIR)/deb docker run --rm \ -v .:/src:ro \ -v ./$(BUILD_DIR)/deb:/output \ --user $(shell id -u):$(shell id -g) \ $(DEB_IMAGE) rpm: mkdir -p $(BUILD_DIR)/rpm docker run --rm \ -v .:/src:ro \ -v ./$(BUILD_DIR)/rpm:/output \ --user $(shell id -u):$(shell id -g) \ $(RPM_IMAGE) tgz: rm -rf $(BUILD_DIR)/tgz/root mkdir -p $(BUILD_DIR)/tgz/root $(MAKE) install DESTDIR=$(BUILD_DIR)/tgz/root tar -cz -f $(BUILD_DIR)/tgz/$(PACKAGE_NAME)-$(VERSION).tgz -C $(BUILD_DIR)/tgz/root . clean: rm -rf $(BUILD_DIR) test: cd src ; python3 -m unittest install: # Set up directories mkdir -p $(DESTDIR)/usr/local/bin mkdir -p $(DESTDIR)/usr/share/man/man1 mkdir -p $(DESTDIR)/etc/$(PACKAGE_NAME) mkdir -p $(DESTDIR)/lib/systemd/system # Install script cp $(SCRIPT) $(DESTDIR)/usr/local/bin/$(PACKAGE_NAME) chmod 755 $(DESTDIR)/usr/local/bin/$(PACKAGE_NAME) # Install manpage cp manpages/* $(DESTDIR)/usr/share/man/man1/ gzip -f -9 $(DESTDIR)/usr/share/man/man1/$(PACKAGE_NAME).1 # Install sample config cp sample-config/* $(DESTDIR)/etc/$(PACKAGE_NAME)/ # Install systemd unit files cp systemd/* $(DESTDIR)/lib/systemd/system/ install-tests: debian-install-test rocky-install-test ubuntu-install-test debian-install-test: docker run --rm \ -v ./$(BUILD_DIR)/deb:/output \ debian:$(INSTALL_TEST_DEBIAN) \ bash -c 'apt-get update && apt-get install -y /output/$(PACKAGE_NAME)_$(VERSION).deb' rocky-install-test: docker run --rm \ -v ./$(BUILD_DIR)/rpm:/output \ rockylinux:$(INSTALL_TEST_REDHAT) \ bash -c 'yum makecache && yum install -y /output/$(PACKAGE_NAME)-$(VERSION)-1.el$(INSTALL_TEST_REDHAT).noarch.rpm' ubuntu-install-test: docker run --rm \ -v ./$(BUILD_DIR)/deb:/output \ ubuntu:$(INSTALL_TEST_UBUNTU) \ bash -c 'apt-get update && apt-get install -y /output/$(PACKAGE_NAME)_$(VERSION).deb' ## # Inside-container targets # # These targets are used inside containers. They expect the repo to be mounted # at /src and the package manager specific build directory to be mounted at # /output. ## .PHONY: package-deb package-rpm # Debian package creation logic package-deb: $(MAKE) install DESTDIR=/output cp -r --preserve=mode DEBIAN /output/ dpkg-deb -Zgzip --build /output /output/$(PACKAGE_NAME)_$(VERSION).deb # RPM package creation logic package-rpm: mkdir -p /output/{BUILD,RPMS,SOURCES,SPECS,SRPMS} cp RPM/$(PACKAGE_NAME).spec /output/SPECS/ rpmbuild --define '_topdir /output' \ --define 'version $(VERSION)' \ -bb /output/SPECS/$(PACKAGE_NAME).spec cp /output/RPMS/noarch/*.rpm /output/ ## # Container targets # # These targets build the docker images used to create packages ## .PHONY: docker deb-package-image rpm-package-image docker: deb-package-image rpm-package-image deb-package-image: Dockerfile.deb docker build -t $(DEB_IMAGE) -f Dockerfile.deb . rpm-package-image: Dockerfile.rpm docker build -t $(RPM_IMAGE) -f Dockerfile.rpm .