Files
act_runner/install_alpine.sh
2026-07-09 22:02:38 +05:00

144 lines
4.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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