Files
grokway/Makefile
2026-01-27 02:52:52 +01:00

74 lines
2.6 KiB
Makefile

# Makefile for Grokway Server
BINARY_NAME=grokway
INSTALL_DIR=/opt/grokway
SERVICE_NAME=grokway.service
SYSTEMD_DIR=/etc/systemd/system
.PHONY: build clean install uninstall help
help:
@echo "Available commands:"
@echo " make build - Build the server binary"
@echo " make install - Install the server as a systemd service (requires root)"
@echo " make uninstall - Remove the server and service (requires root)"
@echo " make clean - Clean build artifacts"
build:
@echo "Building $(BINARY_NAME)..."
go build -o $(BINARY_NAME) ./cmd/server
clean:
@echo "Cleaning..."
rm -f $(BINARY_NAME)
install:
@if [ ! -f $(BINARY_NAME) ]; then \
echo "Error: '$(BINARY_NAME)' binary not found."; \
echo "Please run 'make build' first as a regular user."; \
exit 1; \
fi
@echo "Installing $(BINARY_NAME) to $(INSTALL_DIR)..."
# Create user if not exists
if ! id -u grokway >/dev/null 2>&1; then \
echo "Creating grokway user..."; \
useradd -r -s /bin/false grokway; \
fi
# Create directory
mkdir -p $(INSTALL_DIR)
# Copy binary
cp $(BINARY_NAME) $(INSTALL_DIR)/
# Copy static assets (maintaining structure needed by code)
# The code expects ./cmd/server/static relative to CWD
mkdir -p $(INSTALL_DIR)/cmd/server
cp -r cmd/server/static $(INSTALL_DIR)/cmd/server/
# Set permissions
chown -R grokway:grokway $(INSTALL_DIR)
chmod +x $(INSTALL_DIR)/$(BINARY_NAME)
# Install Service
cp $(SERVICE_NAME) $(SYSTEMD_DIR)/
# Update paths in service file just in case they were modified
sed -i 's|WorkingDirectory=.*|WorkingDirectory=$(INSTALL_DIR)|g' $(SYSTEMD_DIR)/$(SERVICE_NAME)
# execStart sed commented out to preserve arguments like --ssh :2223
# sed -i 's|ExecStart=.*|ExecStart=$(INSTALL_DIR)/$(BINARY_NAME)|g' $(SYSTEMD_DIR)/$(SERVICE_NAME)
# Instead, ensure the binary path is correct but keep args (this is tricky with sed, simpler to rely on repo file)
systemctl daemon-reload
systemctl enable $(SERVICE_NAME)
systemctl start $(SERVICE_NAME)
@echo "Installation complete. Service started."
@echo "Important: Edit $(SYSTEMD_DIR)/$(SERVICE_NAME) to set GROKWAY_TOKEN environment variable if needed."
@echo "Then run: systemctl daemon-reload && systemctl restart $(SERVICE_NAME)"
@echo "Check status directly with: systemctl status $(SERVICE_NAME)"
uninstall:
@echo "Uninstalling $(BINARY_NAME)..."
systemctl stop $(SERVICE_NAME) || true
systemctl disable $(SERVICE_NAME) || true
rm -f $(SYSTEMD_DIR)/$(SERVICE_NAME)
rm -rf $(INSTALL_DIR)
# Optional: remove user
# userdel grokway || true
systemctl daemon-reload
@echo "Uninstallation complete."