Files
BT-7274 3f911ab7a6 fix: handle masked/missing caddy.service during package transition
Fixes the postinst failure when replacing stock caddy on hosts where
caddy.service was masked. The unit file could be missing after dpkg
removes the old caddy package, causing systemctl enable to fail.

Changes:
- postinst: unmask caddy.service before enable, recreate unit file
  from embedded copy if missing after unmasking, stop caddy-api.service
  with guard
- preinst (new): stop caddy.service and caddy-api.service with || true
  guards before install/upgrade
- Makefile: include preinst in deb build

Handles three scenarios:
1. Fresh install (no prior caddy)
2. Upgrade from stock caddy with masked service
3. Upgrade from previous madcat-caddy

Closes #1
2026-06-12 21:24:11 +02:00

67 lines
1.9 KiB
Makefile

VERSION := 2.11.2
REVISION := 1
CADDY_PLUGINS := github.com/caddy-dns/cloudflare@v0.2.4&p=github.com/greenpau/caddy-security@v1.1.62
ARCH := $(shell dpkg --print-architecture 2>/dev/null || uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
OS := linux
PACKAGE_NAME := madcat-caddy
DEB_NAME := $(PACKAGE_NAME)_$(VERSION)-$(REVISION)_$(ARCH).deb
BUILD_DIR := build
STAGING_DIR := $(BUILD_DIR)/staging
.PHONY: all clean build deb install
all: deb
clean:
rm -rf $(BUILD_DIR)
# Download pre-built Caddy with plugins from official API
$(BUILD_DIR)/caddy:
@mkdir -p $(BUILD_DIR)
@echo "Downloading Caddy $(VERSION) for $(OS)/$(ARCH) with plugins..."
curl -sL "https://caddyserver.com/api/download?os=$(OS)&arch=$(ARCH)&p=$(CADDY_PLUGINS)" -o $@
chmod +x $@
@echo "Verifying binary..."
@file $@
build: $(BUILD_DIR)/caddy
# Build .deb package
deb: $(BUILD_DIR)/caddy
@echo "Building .deb package..."
@mkdir -p $(STAGING_DIR)/DEBIAN
@mkdir -p $(STAGING_DIR)/usr/bin
@mkdir -p $(STAGING_DIR)/usr/lib/systemd/system
@mkdir -p $(STAGING_DIR)/etc/caddy
@# Binary
cp $(BUILD_DIR)/caddy $(STAGING_DIR)/usr/bin/caddy
@# Systemd service
cp debian/caddy.service $(STAGING_DIR)/usr/lib/systemd/system/
@# Default Caddyfile
cp debian/Caddyfile $(STAGING_DIR)/etc/caddy/
@# Control file
sed 's/{{VERSION}}/$(VERSION)-$(REVISION)/g; s/{{ARCH}}/$(ARCH)/g' debian/control > $(STAGING_DIR)/DEBIAN/control
@# Scripts
cp debian/preinst $(STAGING_DIR)/DEBIAN/
cp debian/postinst $(STAGING_DIR)/DEBIAN/
cp debian/prerm $(STAGING_DIR)/DEBIAN/
cp debian/postrm $(STAGING_DIR)/DEBIAN/
chmod 755 $(STAGING_DIR)/DEBIAN/preinst $(STAGING_DIR)/DEBIAN/postinst $(STAGING_DIR)/DEBIAN/prerm $(STAGING_DIR)/DEBIAN/postrm
@# Conffiles
cp debian/conffiles $(STAGING_DIR)/DEBIAN/
@# Build package
dpkg-deb --build $(STAGING_DIR) $(BUILD_DIR)/$(DEB_NAME)
@echo "Built: $(BUILD_DIR)/$(DEB_NAME)"
install: deb
sudo dpkg -i $(BUILD_DIR)/$(DEB_NAME)