deploy examples
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
# Установка systemd-служб сетевого моста тележки.
|
||||
#
|
||||
# sudo ./install-bridge.sh [tx|rx|both|none]
|
||||
#
|
||||
# Аргумент выбирает, какую службу включить и запустить на ЭТОЙ машине
|
||||
# (tx — рядом с пультом, rx — рядом с тележкой). Без аргумента юниты только
|
||||
# ставятся, но не включаются. Файлы юнитов и шаблоны конфигов берутся из этого
|
||||
# каталога; пути к python и bridge.py подставляются автоматически.
|
||||
set -euo pipefail
|
||||
|
||||
SELF="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TOOLS="$(cd "$SELF/../tools" && pwd)"
|
||||
REPO="$(cd "$SELF/../../.." && pwd)"
|
||||
BRIDGE="$TOOLS/bridge.py"
|
||||
WORKDIR="$TOOLS"
|
||||
ENABLE="${1:-none}"
|
||||
|
||||
case "$ENABLE" in tx|rx|both|none) ;; *) echo "аргумент: tx|rx|both|none" >&2; exit 2;; esac
|
||||
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "нужны права root — перезапускаюсь через sudo"
|
||||
exec sudo -E PYTHON="${PYTHON:-}" bash "$0" "$ENABLE"
|
||||
fi
|
||||
|
||||
TARGET_USER="${SUDO_USER:-root}"
|
||||
|
||||
# интерпретатор: venv проекта, если есть, иначе системный python3
|
||||
PYTHON="${PYTHON:-}"
|
||||
if [ -z "$PYTHON" ]; then
|
||||
if [ -x "$REPO/.venv/bin/python" ]; then
|
||||
PYTHON="$REPO/.venv/bin/python"
|
||||
else
|
||||
PYTHON="$(command -v python3)"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "python : $PYTHON"
|
||||
echo "bridge : $BRIDGE"
|
||||
echo "user : $TARGET_USER"
|
||||
|
||||
if ! "$PYTHON" -c 'import serial' 2>/dev/null; then
|
||||
echo "ВНИМАНИЕ: в $PYTHON нет pyserial — поставь: $PYTHON -m pip install pyserial" >&2
|
||||
fi
|
||||
|
||||
gen_unit() { # <role>
|
||||
local role="$1"
|
||||
sed -e "s|@PYTHON@|$PYTHON|g" -e "s|@BRIDGE@|$BRIDGE|g" \
|
||||
-e "s|@WORKDIR@|$WORKDIR|g" -e "s|@USER@|$TARGET_USER|g" \
|
||||
"$SELF/cart-bridge-$role.service" > "/etc/systemd/system/cart-bridge-$role.service"
|
||||
echo "установлен юнит /etc/systemd/system/cart-bridge-$role.service"
|
||||
}
|
||||
|
||||
install -d -m 755 /etc/cart-bridge
|
||||
for role in tx rx; do
|
||||
gen_unit "$role"
|
||||
conf="/etc/cart-bridge/$role.env"
|
||||
if [ ! -e "$conf" ]; then
|
||||
install -m 600 "$SELF/cart-bridge-$role.env.example" "$conf"
|
||||
echo "создан конфиг $conf (ОТРЕДАКТИРУЙ: peer/bind и ключ)"
|
||||
else
|
||||
echo "конфиг $conf уже есть — не трогаю"
|
||||
fi
|
||||
done
|
||||
|
||||
systemctl daemon-reload
|
||||
|
||||
enable_one() { # <role>
|
||||
systemctl enable --now "cart-bridge-$1.service"
|
||||
echo "включена и запущена cart-bridge-$1.service"
|
||||
}
|
||||
case "$ENABLE" in
|
||||
tx) enable_one tx ;;
|
||||
rx) enable_one rx ;;
|
||||
both) enable_one tx; enable_one rx ;;
|
||||
none) echo "юниты установлены, не включены. Включить: systemctl enable --now cart-bridge-tx (или -rx)";;
|
||||
esac
|
||||
|
||||
echo "готово. Логи: journalctl -u cart-bridge-tx -f (или -rx)"
|
||||
Reference in New Issue
Block a user