144 lines
4.6 KiB
Bash
144 lines
4.6 KiB
Bash
#!/bin/sh
|
||
|
||
# ================================================================= #
|
||
# SMART INSTALLER: ACT_RUNNER + OPENRC + SYSTEM LABELS (ALPINE)
|
||
# ================================================================= #
|
||
|
||
set -e
|
||
|
||
# --- Проверка, что это Alpine Linux ---
|
||
if [ ! -f /sbin/openrc-run ]; then
|
||
echo "Ошибка: Этот скрипт предназначен только для Alpine Linux (OpenRC)"
|
||
exit 1
|
||
fi
|
||
|
||
# --- Конфигурация ---
|
||
WORK_DIR="/opt/act_runner"
|
||
EXE_URL="https://git.dadehard.ru/kalugin66/act_runner/raw/branch/main/act_runner-0.4.0-linux-amd64"
|
||
INSTANCE_URL="https://git.dadehard.ru/"
|
||
TOKEN="UzVNobPFBJe8ZoQXwu5ZamfgqCpTJZGR3LDVnX7N"
|
||
SERVICE_NAME="act_runner"
|
||
DEFAULT_LABEL="sber"
|
||
|
||
# --- 1. Установка зависимостей ---
|
||
echo "--- Проверка зависимостей ---"
|
||
apk add --no-cache wget
|
||
|
||
# --- 2. Сбор системной информации ---
|
||
HOSTNAME=$(hostname)
|
||
ARCH="linux-amd64"
|
||
MEM_TOTAL_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
||
MEM_GB=$(( MEM_TOTAL_KB / 1024 / 1024 ))
|
||
MEM_LABEL="${MEM_GB}GB_RAM"
|
||
|
||
FULL_LABELS="$DEFAULT_LABEL:host,linux-amd64:host,self-hosted:host,$HOSTNAME:host,$ARCH:host,$MEM_LABEL:host"
|
||
|
||
echo "--- Данные системы: ПК=$HOSTNAME, ОЗУ=$MEM_LABEL, Метка=$DEFAULT_LABEL ---"
|
||
|
||
# --- 3. Подготовка окружения ---
|
||
if [ ! -d "$WORK_DIR" ]; then
|
||
mkdir -p "$WORK_DIR"
|
||
fi
|
||
cd "$WORK_DIR"
|
||
|
||
# --- 4. Остановка и удаление старой службы (если есть) ---
|
||
echo "--- Шаг 1: Очистка ---"
|
||
if [ -f "/etc/init.d/${SERVICE_NAME}" ]; then
|
||
rc-service "$SERVICE_NAME" stop 2>/dev/null || true
|
||
rc-update del "$SERVICE_NAME" 2>/dev/null || true
|
||
rm -f "/etc/init.d/${SERVICE_NAME}"
|
||
fi
|
||
|
||
# --- 5. Загрузка бинарного файла ---
|
||
echo "--- Шаг 2: Загрузка act_runner ---"
|
||
if [ ! -f "$WORK_DIR/act_runner" ]; then
|
||
wget -q --show-progress -O act_runner "$EXE_URL"
|
||
chmod +x act_runner
|
||
fi
|
||
|
||
# --- 6. Создание конфигурационного файла config.yaml ---
|
||
echo "--- Шаг 3: Формирование конфига ---"
|
||
tee "$WORK_DIR/config.yaml" > /dev/null <<EOF
|
||
log:
|
||
level: info
|
||
runner:
|
||
file: .runner
|
||
capacity: 1
|
||
labels:
|
||
- "${DEFAULT_LABEL}:host"
|
||
- "linux-amd64:host"
|
||
- "self-hosted:host"
|
||
- "${HOSTNAME}:host"
|
||
- "${ARCH}:host"
|
||
- "${MEM_LABEL}:host"
|
||
container:
|
||
force_pull: false
|
||
host:
|
||
workdir: ""
|
||
EOF
|
||
|
||
# --- 7. Регистрация раннера (если ещё не зарегистрирован) ---
|
||
echo "--- Шаг 4: Авторизация в Gitea ---"
|
||
if [ ! -f "$WORK_DIR/.runner" ]; then
|
||
echo "Регистрация нового раннера..."
|
||
./act_runner register \
|
||
--instance "$INSTANCE_URL" \
|
||
--token "$TOKEN" \
|
||
--no-interactive \
|
||
--name "$HOSTNAME" \
|
||
--labels "$FULL_LABELS"
|
||
fi
|
||
|
||
# --- 8. Создание OpenRC init-скрипта ---
|
||
echo "--- Шаг 5: Установка службы OpenRC ---"
|
||
tee "/etc/init.d/${SERVICE_NAME}" > /dev/null <<EOF
|
||
#!/sbin/openrc-run
|
||
|
||
description="Gitea Act Runner"
|
||
command="${WORK_DIR}/act_runner"
|
||
command_args="daemon --config ${WORK_DIR}/config.yaml"
|
||
command_user="root"
|
||
directory="${WORK_DIR}"
|
||
command_background=true
|
||
pidfile="/run/\${RC_SVCNAME}.pid"
|
||
output_log="/var/log/act_runner.log"
|
||
error_log="/var/log/act_runner.log"
|
||
|
||
start_pre() {
|
||
checkpath -d -m 0755 -o root:root "${WORK_DIR}"
|
||
}
|
||
|
||
depend() {
|
||
need net
|
||
}
|
||
EOF
|
||
|
||
chmod +x "/etc/init.d/${SERVICE_NAME}"
|
||
|
||
# --- 9. Добавление в автозагрузку и запуск ---
|
||
echo "--- Шаг 6: Запуск ---"
|
||
rc-update add "$SERVICE_NAME" default
|
||
rc-service "$SERVICE_NAME" start
|
||
|
||
# --- 10. Проверка статуса ---
|
||
sleep 2
|
||
if rc-service "$SERVICE_NAME" status; then
|
||
echo "==============================================="
|
||
echo "ГОТОВО! Раннер активен с меткой $DEFAULT_LABEL"
|
||
echo "==============================================="
|
||
else
|
||
echo "Ошибка: служба не запустилась. Проверьте: cat /var/log/act_runner.log"
|
||
echo "Диагностика: попытка прямого запуска..."
|
||
${WORK_DIR}/act_runner daemon --config ${WORK_DIR}/config.yaml &
|
||
DAEMON_PID=$!
|
||
sleep 3
|
||
if kill -0 $DAEMON_PID 2>/dev/null; then
|
||
echo "Прямой запуск успешен, проблема в OpenRC-скрипте"
|
||
kill $DAEMON_PID
|
||
else
|
||
echo "Прямой запуск тоже упал, проблема в конфигурации"
|
||
wait $DAEMON_PID 2>/dev/null || true
|
||
fi
|
||
exit 1
|
||
fi
|