Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions catalog/runtimes/make-podman.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# make-podman.mk — Idempotent Podman installer + service manager
# Requires: remake run -f oci://ghcr.io/TrianaLab/make-os:0.1.0 detect

VERSION := 0.1.0

OCI_OS := oci://ghcr.io/TrianaLab/make-os:0.1.0
HOST_INFO := $(shell remake run -f $(OCI_OS) detect)
HOST_OS := $(word 1,$(HOST_INFO))
DISTRO := $(word 2,$(HOST_INFO))
OS_VER := $(word 3,$(HOST_INFO))
ARCH := $(word 4,$(HOST_INFO))

.PHONY: install ensure-podman ensure-service status

install: ensure-podman ensure-service
@echo "✅ Podman ready on $(HOST_OS)/$(DISTRO) $(OS_VER) ($(ARCH))"

ensure-podman:
@echo "🔍 Checking Podman..."
@if ! command -v podman >/dev/null 2>&1; then \
echo "➕ Installing Podman on $(HOST_OS)/$(DISTRO)..."; \
if [ "$(HOST_OS)" = "linux" ]; then \
if command -v apt-get >/dev/null 2>&1; then \
sudo apt-get update && sudo apt-get install -y podman; \
elif command -v dnf >/dev/null 2>&1; then \
sudo dnf install -y podman; \
else \
echo "Unsupported distro: $(DISTRO)" >&2 && exit 1; \
fi; \
elif [ "$(HOST_OS)" = "macos" ]; then \
brew install podman; \
elif [ "$(HOST_OS)" = "windows" ]; then \
powershell -NoProfile -Command "choco install podman -y"; \
else \
echo "Unsupported OS: $(HOST_OS)" >&2 && exit 1; \
fi; \
else \
echo "✔ Podman present: $$(podman --version)"; \
fi

ensure-service:
@echo "🔍 Checking Podman service..."
@if [ "$(HOST_OS)" = "linux" ]; then \
if ! systemctl is-active --quiet podman.socket; then \
echo "➕ Starting podman.socket"; \
sudo systemctl start podman.socket; \
else \
echo "✔ podman.socket running"; \
fi; \
elif [ "$(HOST_OS)" = "macos" ]; then \
if ! podman system service --time=0 &>/dev/null; then \
echo "➕ Starting Podman machine"; \
podman machine start; \
else \
echo "✔ Podman machine running"; \
fi; \
elif [ "$(HOST_OS)" = "windows" ]; then \
if ! powershell -NoProfile -Command "(Get-Service podman).Status -eq 'Running'"; then \
echo "➕ Starting Podman service"; \
powershell -NoProfile -Command "Start-Service podman"; \
else \
echo "✔ Podman service running"; \
fi; \
fi

status:
@podman --version
@podman info | grep "host"
52 changes: 52 additions & 0 deletions catalog/services/make-redis.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# make-redis.mk — Idempotent Redis via Podman
# Requires: remake run -f oci://ghcr.io/TrianaLab/make-os:0.1.0 detect
# remake run -f oci://ghcr.io/TrianaLab/make-podman:0.1.0

VERSION := 0.1.0
OCI_PODMAN := oci://ghcr.io/TrianaLab/make-podman:0.1.0
HOST_INFO := $(shell remake run -f $(OCI_PODMAN) detect)
HOST_OS := $(word 1,$(HOST_INFO))
DISTRO := $(word 2,$(HOST_INFO))
OS_VER := $(word 3,$(HOST_INFO))
ARCH := $(word 4,$(HOST_INFO))

# Configurable defaults
REDIS_VERSION ?= 7.0.0
REDIS_PASSWORD ?= redispass
REDIS_PORT ?= 6379
DATA_DIR ?= ./data/redis
CONTAINER_NAME ?= redis-server

.PHONY: install run stop status

install:
@echo "🔍 Ensuring Podman runtime"
@remake run -f $(OCI_PODMAN) ensure-podman

run: install
@echo "🚀 Starting Redis $(REDIS_VERSION)"
@mkdir -p $(DATA_DIR)
@if podman ps --format '{{.Names}}' | grep -q '^$(CONTAINER_NAME)$$'; then \
echo "✔ Container $(CONTAINER_NAME) already running"; \
else \
podman run -d \
--name $(CONTAINER_NAME) \
-e REDIS_PASSWORD=$(REDIS_PASSWORD) \
-p $(REDIS_PORT):6379 \
-v $(realpath $(DATA_DIR)):/data \
docker.io/library/redis:$(REDIS_VERSION) \
redis-server --requirepass $(REDIS_PASSWORD); \
echo "✔ Redis started at localhost:$(REDIS_PORT)"; \
fi

stop:
@echo "🛑 Stopping Redis"
@if podman ps --format '{{.Names}}' | grep -q '^$(CONTAINER_NAME)$$'; then \
podman stop $(CONTAINER_NAME) && podman rm $(CONTAINER_NAME); \
echo "✔ Container stopped and removed"; \
else \
echo "✔ No running container named $(CONTAINER_NAME)"; \
fi

status:
@podman ps --filter "name=$(CONTAINER_NAME)" --format "{{.Names}} {{.Status}}" || echo "Redis not running"