Restructure for packaging

This commit is contained in:
James Campbell 2025-01-08 18:34:51 -05:00
parent 2ad9158cfe
commit a21a4355e5
Signed by: james
GPG Key ID: 2287C33A40DC906A
12 changed files with 147 additions and 0 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@ install-sh
missing
__pycache__
venv
build

9
DEBIAN/control Normal file
View File

@ -0,0 +1,9 @@
Package: pgmon
Version: 1.0
Section: utils
Priority: optional
Architecture: all
Depends: python3, python3-psycopg2, systemd
Maintainer: James Campbell <james@commandprompt.com>
Homepage: https://www.commandprompt.com
Description: A bridge to sit between monitoring tools and PostgreSQL

11
Dockerfile.deb Normal file
View File

@ -0,0 +1,11 @@
FROM ubuntu:noble
RUN apt-get update && apt-get install -y \
dpkg-dev \
build-essential \
fakeroot \
make \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
CMD ["make", "package-deb"]

10
Dockerfile.rpm Normal file
View File

@ -0,0 +1,10 @@
# Dockerfile.rpm
FROM rockylinux:9
RUN dnf install -y \
rpm-build \
make \
&& dnf clean all
WORKDIR /src
CMD ["make", "package-rpm"]

84
Makefile Normal file
View File

@ -0,0 +1,84 @@
PACKAGE_NAME := pgmon
VERSION := 1.0
BUILD_DIR := build
DEB_IMAGE := debian-package-builder
RPM_IMAGE := rpm-package-builder
SCRIPT := src/$(PACKAGE_NAME).py
# Top-level targets
.PHONY: all clean deb rpm
all: deb rpm
deb:
mkdir -p $(BUILD_DIR)/deb
docker run --rm \
-v .:/src:ro \
-v ./$(BUILD_DIR)/deb:/output \
$(DEB_IMAGE)
rpm:
mkdir -p $(BUILD_DIR)/rpm
docker run --rm \
-v .:/src:ro \
-v ./$(BUILD_DIR)/rpm:/output \
$(RPM_IMAGE)
clean:
rm -rf $(BUILD_DIR)
# 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)' \
-ba /output/SPECS/$(PACKAGE_NAME).spec
cp /output/rpm/RPMS/x86_64/*.rpm /output/
# Install into the specified destination directory (used inside the packaging systems)
.PHONY: install
install:
# Set up directories
mkdir -p $(DESTDIR)/usr/bin
mkdir -p $(DESTDIR)/usr/share/man/man1
mkdir -p $(DESTDIR)/etc/$(PACKAGE_NAME)
mkdir -p $(DESTDIR)/lib/systemd/system
# Install script
cp script.py $(DESTDIR)/usr/bin/$(PACKAGE_NAME)
chmod 755 $(DESTDIR)/usr/bin/$(PACKAGE_NAME)
# Install manpage
cp manpages/* $(DESTDIR)/usr/share/man/man1/
gzip -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/

32
RPM/pgmon.spec Normal file
View File

@ -0,0 +1,32 @@
Name: pgmon
Version: 1.0
Release: 1%{?dist}
Summary: A bridge to sit between monitoring tools and PostgreSQL
License: MIT
URL: https://www.commandprompt.com
Source0: %{name}-%{version}.tar.gz
Requires: python3, python3-psycopg2, systemd
%description
A bridge to sit between monitoring tools and PostgreSQL
%prep
%build
%install
make -C /src install DESTDIR=%{buildroot}
%files
/usr/local/bin/pgmon
/usr/share/man/man1/pgmon.1.gz
/etc/pgmon/pgmon.yml
/etc/pgmon/pgmon-metrics.yml
/lib/systemd/system/pgmon.service
/lib/systemd/system/pgmon@.service
%changelog
* Wed Jan 08 2025 James Campbell <james@commandprompt.com> - 1.0-1
- Initial RPM release.