105 lines
3.3 KiB
Makefile
105 lines
3.3 KiB
Makefile
PREFIX ?= /usr/local
|
|
BINDIR ?= $(PREFIX)/bin
|
|
SYSCONFDIR ?= /etc
|
|
DESTDIR ?=
|
|
|
|
GO ?= go
|
|
GOFLAGS ?=
|
|
|
|
BIN_DIR := bin
|
|
BLEH := $(BIN_DIR)/bleh
|
|
BLEHD := $(BIN_DIR)/blehd
|
|
|
|
.PHONY: all build clean install uninstall setcap install-systemd uninstall-systemd install-openrc uninstall-openrc
|
|
|
|
all: build
|
|
|
|
build:
|
|
@mkdir -p $(BIN_DIR)
|
|
$(GO) build $(GOFLAGS) -o $(BLEH) ./cmd/bleh
|
|
$(GO) build $(GOFLAGS) -o $(BLEHD) ./cmd/blehd
|
|
|
|
clean:
|
|
rm -rf $(BIN_DIR)
|
|
|
|
# SETCAP:
|
|
# - auto (default): apply setcap when installing as root and setcap is available
|
|
# - 1: force setcap (fails if not root / setcap missing)
|
|
# - 0: never apply setcap
|
|
SETCAP ?= auto
|
|
|
|
install:
|
|
@test -x $(BLEH) || (echo "Missing $(BLEH). Run: make build"; exit 1)
|
|
@test -x $(BLEHD) || (echo "Missing $(BLEHD). Run: make build"; exit 1)
|
|
install -Dm755 $(BLEH) $(DESTDIR)$(BINDIR)/bleh
|
|
install -Dm755 $(BLEHD) $(DESTDIR)$(BINDIR)/blehd
|
|
@case "$(SETCAP)" in \
|
|
auto) \
|
|
if [ "$$(id -u)" = "0" ] && command -v setcap >/dev/null 2>&1; then \
|
|
echo "Applying capabilities to blehd (cap_net_raw,cap_net_admin)..."; \
|
|
setcap cap_net_raw,cap_net_admin=eip $(DESTDIR)$(BINDIR)/blehd; \
|
|
else \
|
|
echo "(Skipping setcap: not root or setcap not found; run 'sudo make setcap' if needed)"; \
|
|
fi \
|
|
;; \
|
|
1) \
|
|
echo "Applying capabilities to blehd (cap_net_raw,cap_net_admin)..."; \
|
|
setcap cap_net_raw,cap_net_admin=eip $(DESTDIR)$(BINDIR)/blehd \
|
|
;; \
|
|
0) \
|
|
echo "(Skipping setcap: SETCAP=0)" \
|
|
;; \
|
|
*) \
|
|
echo "Unknown SETCAP=$(SETCAP) (use auto|1|0)"; exit 2 \
|
|
;; \
|
|
esac
|
|
@if [ "$$(id -u)" = "0" ]; then \
|
|
echo "Tip: to install a service: make install-systemd (or install-openrc)"; \
|
|
fi
|
|
|
|
uninstall:
|
|
rm -f $(DESTDIR)$(BINDIR)/bleh
|
|
rm -f $(DESTDIR)$(BINDIR)/blehd
|
|
|
|
# Give blehd the minimum capabilities it needs so it can run unprivileged.
|
|
# (Still recommended to run it with a dedicated group for socket access.)
|
|
setcap: install
|
|
setcap cap_net_raw,cap_net_admin=eip $(DESTDIR)$(BINDIR)/blehd
|
|
|
|
install-systemd:
|
|
install -Dm644 dist/systemd/blehd-root.service $(DESTDIR)$(SYSCONFDIR)/systemd/system/blehd.service
|
|
@echo "Installed root unit: $(SYSCONFDIR)/systemd/system/blehd.service"
|
|
@echo ""
|
|
@echo "Optional: create 'bleh' group for socket access:"
|
|
@echo " sudo groupadd -r bleh"
|
|
@echo " sudo usermod -aG bleh $$USER"
|
|
@echo " (then re-login)"
|
|
@echo ""
|
|
@echo "Now run:"
|
|
@echo " systemctl daemon-reload"
|
|
@echo " systemctl enable --now blehd.service"
|
|
|
|
uninstall-systemd:
|
|
systemctl stop blehd.service 2>/dev/null || true
|
|
systemctl disable blehd.service 2>/dev/null || true
|
|
rm -f $(DESTDIR)$(SYSCONFDIR)/systemd/system/blehd.service
|
|
systemctl daemon-reload 2>/dev/null || true
|
|
@echo "Removed systemd service: $(SYSCONFDIR)/systemd/system/blehd.service"
|
|
|
|
install-openrc:
|
|
install -Dm755 dist/openrc/blehd $(DESTDIR)$(SYSCONFDIR)/init.d/blehd
|
|
@echo "Installed OpenRC service: $(SYSCONFDIR)/init.d/blehd"
|
|
@echo ""
|
|
@echo "Optional: create 'bleh' group for socket access:"
|
|
@echo " sudo groupadd -r bleh"
|
|
@echo " sudo usermod -aG bleh $$USER"
|
|
@echo " (then re-login)"
|
|
@echo ""
|
|
@echo "Now run: rc-update add blehd default && rc-service blehd start"
|
|
|
|
uninstall-openrc:
|
|
rc-service blehd stop 2>/dev/null || true
|
|
rc-update del blehd default 2>/dev/null || true
|
|
rm -f $(DESTDIR)$(SYSCONFDIR)/init.d/blehd
|
|
@echo "Removed OpenRC service: $(SYSCONFDIR)/init.d/blehd"
|