diff --git a/Makefile b/Makefile index 6eae3cd..e6316f0 100644 --- a/Makefile +++ b/Makefile @@ -44,4 +44,115 @@ info: @echo "Object files to generate:" @echo "$(OBJS)" | tr ' ' '\n' -.PHONY: all run clean rebuild info +PREFIX ?= /usr +INSTALL_BIN_DIR := $(PREFIX)/bin +DATA_DIR := /etc/omnisearch +CONF_DIR := /etc/omnisearch +VAR_DIR := /var/lib/omnisearch +LOG_DIR := /var/log/omnisearch +CACHE_DIR := /var/cache/omnisearch +USER := omnisearch +GROUP := omnisearch + +SYSTEMD_DIR := /etc/systemd/system +OPENRC_DIR := /etc/init.d + +install: + @echo "Available install targets:" + @echo " make install-systemd" + @echo " make install-openrc" + @echo " make install-runit" + @echo " make install-s6" + @echo "" + @echo "Example: doas/sudo make install-openrc" + +install-systemd: $(TARGET) + @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR) + @cp -rf templates/* $(DATA_DIR)/templates/ + @cp -rf static/* $(DATA_DIR)/static/ + @cp example-config.ini $(DATA_DIR)/config.ini + install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch + @echo "Setting up user '$(USER)'..." + @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true + @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER) + @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true + @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true + install -m 644 init/systemd/omnisearch.service $(SYSTEMD_DIR)/omnisearch.service + @echo "" + @echo "Config: $(DATA_DIR)/config.ini" + @echo "Edit config with: nano $(DATA_DIR)/config.ini" + @echo "Installed systemd service to $(SYSTEMD_DIR)/omnisearch.service" + @echo "Run 'systemctl enable --now omnisearch' to start" + +install-openrc: $(TARGET) + @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR) + @cp -rf templates/* $(DATA_DIR)/templates/ + @cp -rf static/* $(DATA_DIR)/static/ + @cp example-config.ini $(DATA_DIR)/config.ini + install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch + @echo "Setting up user '$(USER)'..." + @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true + @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER) + @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true + @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true + install -m 755 init/openrc/omnisearch $(OPENRC_DIR)/omnisearch + @echo "" + @echo "Config: $(DATA_DIR)/config.ini" + @echo "Edit config with: nano $(DATA_DIR)/config.ini" + @echo "Installed openrc service to $(OPENRC_DIR)/omnisearch" + @echo "Run 'rc-update add omnisearch default' to enable" + +install-runit: $(TARGET) + @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR) + @cp -rf templates/* $(DATA_DIR)/templates/ + @cp -rf static/* $(DATA_DIR)/static/ + @cp example-config.ini $(DATA_DIR)/config.ini + install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch + @echo "Setting up user '$(USER)'..." + @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true + @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER) + @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true + @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true + @mkdir -p /etc/service/omnisearch/log/supervise/control + install -m 755 init/runit/run /etc/service/omnisearch/run + install -m 755 init/runit/log/run /etc/service/omnisearch/log/run + install -m 755 init/runit/log/run /etc/service/omnisearch/log/supervise/control + @echo "" + @echo "Config: $(DATA_DIR)/config.ini" + @echo "Edit config with: nano $(DATA_DIR)/config.ini" + @echo "Installed runit service to /etc/service/omnisearch" + @echo "Service will start automatically" + +install-s6: $(TARGET) + @mkdir -p $(DATA_DIR)/templates $(DATA_DIR)/static $(LOG_DIR) $(CACHE_DIR) + @cp -rf templates/* $(DATA_DIR)/templates/ + @cp -rf static/* $(DATA_DIR)/static/ + @cp example-config.ini $(DATA_DIR)/config.ini + install -m 755 $(TARGET) $(INSTALL_BIN_DIR)/omnisearch + @echo "Setting up user '$(USER)'..." + @(grep -q '^$(GROUP):' /etc/group || groupadd $(GROUP)) 2>/dev/null || true + @id -u $(USER) >/dev/null 2>&1 || useradd --system --home $(DATA_DIR) --shell /usr/sbin/nologin -g $(GROUP) $(USER) + @chown -R $(USER):$(GROUP) $(LOG_DIR) $(CACHE_DIR) $(VAR_DIR) $(DATA_DIR) 2>/dev/null || true + @chown $(USER):$(GROUP) $(DATA_DIR)/config.ini 2>/dev/null || true + @mkdir -p /var/service/omnisearch/log/supervise/control + install -m 755 init/s6/run /var/service/omnisearch/run + install -m 755 init/s6/log/run /var/service/omnisearch/log/run + install -m 755 init/s6/log/run /var/service/omnisearch/log/supervise/control + @echo "" + @echo "Config: $(DATA_DIR)/config.ini" + @echo "Edit config with: nano $(DATA_DIR)/config.ini" + @echo "Installed s6 service to /var/service/omnisearch" + @echo "Service will start automatically" + +uninstall: + rm -f $(INSTALL_BIN_DIR)/omnisearch + rm -rf $(DATA_DIR) + rm -f $(SYSTEMD_DIR)/omnisearch.service + rm -f $(OPENRC_DIR)/omnisearch + rm -rf /etc/service/omnisearch + rm -rf /var/service/omnisearch + @id -u $(USER) >/dev/null 2>&1 && userdel $(USER) 2>/dev/null || true + @grep -q '^$(GROUP):' /etc/group 2>/dev/null && groupdel $(GROUP) 2>/dev/null || true + @echo "Uninstalled omnisearch" + +.PHONY: all run clean rebuild info install install-systemd install-openrc install-runit install-s6 uninstall diff --git a/example-config.ini b/example-config.ini index dbc4f6b..956970c 100644 --- a/example-config.ini +++ b/example-config.ini @@ -1,6 +1,6 @@ [server] host = 0.0.0.0 -port = 8000 +port = 8087 [proxy] # Single proxy (comment out to use list_file instead) diff --git a/init/openrc/omnisearch b/init/openrc/omnisearch new file mode 100755 index 0000000..6ac4d67 --- /dev/null +++ b/init/openrc/omnisearch @@ -0,0 +1,19 @@ +#!/sbin/openrc-run + +name=omnisearch +description="Omnisearch Web Search Server" +command="/usr/bin/omnisearch" +command_background=yes +pidfile="/run/${RC_SVCNAME}.pid" +output_log="/var/log/omnisearch/omnisearch.log" +error_log="/var/log/omnisearch/omnisearch.err" +user=omnisearch +group=omnisearch +directory=/etc/omnisearch +respawn_delay=5 +respawn_max=10 + +depend() { + need net + after firewall +} \ No newline at end of file diff --git a/init/runit/log/run b/init/runit/log/run new file mode 100755 index 0000000..79f18f2 --- /dev/null +++ b/init/runit/log/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec chpst -u omnisearch:omnisearch svlogd -tt /var/log/omnisearch \ No newline at end of file diff --git a/init/runit/run b/init/runit/run new file mode 100755 index 0000000..8ffb82a --- /dev/null +++ b/init/runit/run @@ -0,0 +1,2 @@ +#!/bin/sh +exec chpst -u omnisearch:omnisearch /usr/bin/omnisearch 2>&1 \ No newline at end of file diff --git a/init/s6/log/run b/init/s6/log/run new file mode 100755 index 0000000..6f01241 --- /dev/null +++ b/init/s6/log/run @@ -0,0 +1,2 @@ +#!/bin/execlineb -P +exec -c chpst -u omnisearch:omnisearch s6-log -d 3 /var/log/omnisearch \ No newline at end of file diff --git a/init/s6/run b/init/s6/run new file mode 100755 index 0000000..f82a54e --- /dev/null +++ b/init/s6/run @@ -0,0 +1,3 @@ +#!/bin/execlineb -P +foreground { s6-setsid -g } +exec -c chpst -u omnisearch:omnisearch /usr/bin/omnisearch \ No newline at end of file diff --git a/init/systemd/omnisearch.service b/init/systemd/omnisearch.service new file mode 100644 index 0000000..1d2a3c4 --- /dev/null +++ b/init/systemd/omnisearch.service @@ -0,0 +1,17 @@ +[Unit] +Description=Omnisearch Web Search Server +After=network.target + +[Service] +Type=simple +User=omnisearch +Group=omnisearch +WorkingDirectory=/etc/omnisearch +ExecStart=/usr/bin/omnisearch +Restart=always +RestartSec=5 +PrivateTmp=yes +NoNewPrivileges=yes + +[Install] +WantedBy=multi-user.target \ No newline at end of file