#!/bin/sh # Kiwix bootstrap: ensure a sample ZIM file is present, then serve it. # # ZIM filenames on download.kiwix.org are date-stamped and rotate monthly, # so hard-coded URLs rot quickly. Instead this script resolves the current # filename from the Kiwix OPDS catalog, which always points at the live file. set -u ZIM_DIR=/data ZIM_FILE=devdocs_en_lit.zim CATALOG_URL='https://library.kiwix.org/catalog/v2/entries?name=devdocs_en_lit&count=1' MAX_ATTEMPTS=6 RETRY_DELAY=5 if ! ls "$ZIM_DIR"/*.zim >/dev/null 2>&1; then echo "[kiwix] No ZIM files found; resolving a sample ZIM from the Kiwix catalog..." attempt=0 while [ "$attempt" -lt "$MAX_ATTEMPTS" ]; do attempt=$((attempt + 1)) zim_url=$(wget -q -O - "$CATALOG_URL" 2>/dev/null \ | grep -o 'https://[^"]*\.zim\.meta4' | head -n1 \ | sed 's/\.meta4$//') if [ -n "$zim_url" ]; then echo "[kiwix] Downloading: $zim_url" if wget -q --timeout=60 -O "$ZIM_DIR/$ZIM_FILE" "$zim_url"; then echo "[kiwix] Download complete." break fi rm -f "$ZIM_DIR/$ZIM_FILE" echo "[kiwix] Download failed; retrying in ${RETRY_DELAY}s..." else echo "[kiwix] Catalog lookup failed; retrying in ${RETRY_DELAY}s..." fi sleep "$RETRY_DELAY" done fi if ls "$ZIM_DIR"/*.zim >/dev/null 2>&1; then echo "[kiwix] Starting kiwix-serve..." exec kiwix-serve --port 8080 "$ZIM_DIR"/*.zim else echo "[kiwix] No ZIM files available; sleeping indefinitely." exec sleep infinity fi