Continue to work on packaging

This commit is contained in:
James Campbell 2025-01-10 00:40:41 -05:00
parent 0fe6e259ea
commit 8b557d45dd
Signed by: james
GPG Key ID: 2287C33A40DC906A
5 changed files with 105 additions and 38 deletions

View File

@ -1,4 +1,7 @@
FROM ubuntu:noble ARG DISTRO=ubuntu
ARG RELEASE=noble
FROM ${DISTRO}:${RELEASE}
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
dpkg-dev \ dpkg-dev \

15
Dockerfile.el7 Normal file
View File

@ -0,0 +1,15 @@
# Dockerfile.rpm
ARG DISTRO=oraclelinux
ARG RELEASE=7
FROM ${DISTRO}:${RELEASE}
RUN yum install -y \
rpm-build \
make \
oracle-epel-release-el7 \
&& yum clean all
WORKDIR /src
CMD ["make", "package-rpm"]

View File

@ -1,5 +1,9 @@
# Dockerfile.rpm # Dockerfile.rpm
FROM rockylinux:9
ARG DISTRO=rockylinux
ARG RELEASE=9
FROM ${DISTRO}:${RELEASE}
RUN dnf install -y \ RUN dnf install -y \
rpm-build \ rpm-build \

115
Makefile
View File

@ -8,8 +8,15 @@ RPM_IMAGE := rpm-package-builder
SCRIPT := src/$(PACKAGE_NAME).py SCRIPT := src/$(PACKAGE_NAME).py
# Top-level targets INSTALL_TEST_DEBIAN := 11
.PHONY: all clean deb rpm test 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 all: deb rpm
@ -18,6 +25,7 @@ deb:
docker run --rm \ docker run --rm \
-v .:/src:ro \ -v .:/src:ro \
-v ./$(BUILD_DIR)/deb:/output \ -v ./$(BUILD_DIR)/deb:/output \
--user $(shell id -u):$(shell i -g) \
$(DEB_IMAGE) $(DEB_IMAGE)
rpm: rpm:
@ -25,47 +33,21 @@ rpm:
docker run --rm \ docker run --rm \
-v .:/src:ro \ -v .:/src:ro \
-v ./$(BUILD_DIR)/rpm:/output \ -v ./$(BUILD_DIR)/rpm:/output \
--user $(shell id -u):$(shell i -g) \
$(RPM_IMAGE) $(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: clean:
rm -rf $(BUILD_DIR) rm -rf $(BUILD_DIR)
test: test:
cd src ; python3 -m unittest cd src ; python3 -m unittest
# Container targets
.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 .
# Inside-container targets
.PHONY: package-deb package-rpm
# Debian package creation logic
package-deb:
$(MAKE) install DESTDIT=/output
cp -r DEBIAN /output/
dpkg-deb --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/x86_64/*.rpm /output/
# Install into the specified destination directory (used inside the packaging systems)
.PHONY: install
install: install:
# Set up directories # Set up directories
mkdir -p $(DESTDIR)/usr/local/bin mkdir -p $(DESTDIR)/usr/local/bin
@ -86,3 +68,66 @@ install:
# Install systemd unit files # Install systemd unit files
cp systemd/* $(DESTDIR)/lib/systemd/system/ 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 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 .

View File

@ -5,8 +5,8 @@ Summary: A bridge to sit between monitoring tools and PostgreSQL
License: MIT License: MIT
URL: https://www.commandprompt.com URL: https://www.commandprompt.com
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch
Requires: python3, python3-psycopg2, systemd Requires: python3, python3-psycopg2, systemd
%description %description