108 lines
4.4 KiB
Makefile
108 lines
4.4 KiB
Makefile
APP_NAME = ddns-updater
|
|
BIN_DIR = bin
|
|
VERSION = 1.0.0
|
|
|
|
# Go parameters
|
|
GOCMD = go
|
|
GOBUILD = $(GOCMD) build
|
|
GOCLEAN = $(GOCMD) clean
|
|
GORUN = $(GOCMD) run
|
|
|
|
# Docker image (override: make build-dockerimg IMAGE=kccleoc/ddns-updater:latest)
|
|
IMAGE ?= kccleoc/ddns-updater:latest
|
|
|
|
# Build targets
|
|
.PHONY: all build build-all clean run init-config install \
|
|
install-linux install-macos service-linux service-macos \
|
|
build-dockerimg push-dockerimg
|
|
|
|
all: build
|
|
|
|
# Build binary for current platform
|
|
build:
|
|
mkdir -p $(BIN_DIR)
|
|
$(GOBUILD) -o $(BIN_DIR)/$(APP_NAME) -ldflags "-X main.Version=$(VERSION)" main.go
|
|
@echo "Built $(BIN_DIR)/$(APP_NAME)"
|
|
|
|
# Build for multiple platforms
|
|
build-all:
|
|
mkdir -p $(BIN_DIR)
|
|
GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BIN_DIR)/$(APP_NAME)-linux-amd64 main.go
|
|
GOOS=linux GOARCH=arm64 $(GOBUILD) -o $(BIN_DIR)/$(APP_NAME)-linux-arm64 main.go
|
|
GOOS=darwin GOARCH=amd64 $(GOBUILD) -o $(BIN_DIR)/$(APP_NAME)-darwin-amd64 main.go
|
|
GOOS=darwin GOARCH=arm64 $(GOBUILD) -o $(BIN_DIR)/$(APP_NAME)-darwin-arm64 main.go
|
|
@echo "Built all platform binaries in $(BIN_DIR)/"
|
|
|
|
# Run locally
|
|
run:
|
|
$(GORUN) main.go -config config.yaml
|
|
|
|
# Generate config template
|
|
init-config:
|
|
$(GORUN) main.go -init-config > config.yaml
|
|
@echo "Generated config.yaml - edit with your Cloudflare credentials"
|
|
|
|
# Clean build artifacts
|
|
clean:
|
|
$(GOCLEAN)
|
|
rm -rf $(BIN_DIR)
|
|
|
|
# Install binary system-wide
|
|
install: build
|
|
sudo install -m 755 $(BIN_DIR)/$(APP_NAME) /usr/local/bin/$(APP_NAME)
|
|
@echo "Installed to /usr/local/bin/$(APP_NAME)"
|
|
|
|
# Linux-specific installation
|
|
install-linux: install
|
|
sudo mkdir -p /etc/ddns-updater
|
|
@if [ ! -f /etc/ddns-updater/config.yaml ]; then \
|
|
sudo cp config.yaml /etc/ddns-updater/config.yaml; \
|
|
sudo chmod 600 /etc/ddns-updater/config.yaml; \
|
|
echo "Config installed to /etc/ddns-updater/config.yaml"; \
|
|
else \
|
|
echo "Config already exists at /etc/ddns-updater/config.yaml"; \
|
|
fi
|
|
|
|
# macOS-specific installation
|
|
install-macos: install
|
|
sudo mkdir -p /usr/local/etc
|
|
sudo mkdir -p /usr/local/var/log
|
|
@if [ ! -f /usr/local/etc/ddns-updater.yaml ]; then \
|
|
sudo cp config.yaml /usr/local/etc/ddns-updater.yaml; \
|
|
sudo chmod 600 /usr/local/etc/ddns-updater.yaml; \
|
|
echo "Config installed to /usr/local/etc/ddns-updater.yaml"; \
|
|
else \
|
|
echo "Config already exists at /usr/local/etc/ddns-updater.yaml"; \
|
|
fi
|
|
|
|
# Set up systemd service (Linux)
|
|
service-linux:
|
|
@echo "Creating systemd service..."
|
|
@echo "[Unit]\nDescription=DDNS Updater Service\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nExecStart=/usr/local/bin/$(APP_NAME) -config /etc/ddns-updater/config.yaml\nRestart=always\nRestartSec=10\nUser=root\nWorkingDirectory=/usr/local/bin\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/ddns-updater.service >/dev/null
|
|
@echo "\nSystemd service created. Run these commands:"
|
|
@echo " sudo systemctl daemon-reload"
|
|
@echo " sudo systemctl enable ddns-updater"
|
|
@echo " sudo systemctl start ddns-updater"
|
|
@echo " sudo systemctl status ddns-updater"
|
|
|
|
# Set up launchd service (macOS)
|
|
service-macos:
|
|
@echo "Creating launchd plist..."
|
|
@mkdir -p ~/Library/LaunchAgents
|
|
@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>com.ddns-updater</string>\n <key>ProgramArguments</key>\n <array>\n <string>/usr/local/bin/$(APP_NAME)</string>\n <string>-config</string>\n <string>/usr/local/etc/ddns-updater.yaml</string>\n </array>\n <key>RunAtLoad</key>\n <true/>\n <key>KeepAlive</key>\n <true/>\n <key>StandardOutPath</key>\n <string>/usr/local/var/log/ddns-updater.log</string>\n <key>StandardErrorPath</key>\n <string>/usr/local/var/log/ddns-updater.err</string>\n</dict>\n</plist>" > ~/Library/LaunchAgents/com.ddns-updater.plist
|
|
@echo "\nLaunchd plist created. Run these commands:"
|
|
@echo " launchctl load ~/Library/LaunchAgents/com.ddns-updater.plist"
|
|
@echo " launchctl start com.ddns-updater"
|
|
@echo "\nView logs with:"
|
|
@echo " tail -f /usr/local/var/log/ddns-updater.log"
|
|
|
|
# Build Docker image (parameterized)
|
|
# Usage: make build-dockerimg IMAGE=kccleoc/ddns-updater:latest
|
|
build-dockerimg:
|
|
docker build -t $(IMAGE) .
|
|
|
|
# Push Docker image
|
|
# Usage: make push-dockerimg IMAGE=kccleoc/ddns-updater:latest
|
|
push-dockerimg:
|
|
docker push $(IMAGE)
|