Update install.sh

This commit is contained in:
2026-10-12 12:23:58 +03:00
parent 32e6a3ad7b
commit f7965654f9
+52 -39
View File
@@ -1,10 +1,8 @@
#!/bin/sh #!/bin/sh
# OpenWrt HA Presence Tracker Installer # OpenWrt HA Presence Tracker Installer
# Usage: sh <(wget --no-check-certificate -O - https://твой-домен/твой-репо/raw/branch/main/install.sh)
set -e set -e
# ВАЖНО: Укажи здесь базовый RAW URL твоего репозитория Gitea (без имени файла install.sh в конце)
GITEA_RAW_URL="https://git.darkmode.duckdns.org/sirmrak/openwrt-ha-presence/raw/branch/main/files" GITEA_RAW_URL="https://git.darkmode.duckdns.org/sirmrak/openwrt-ha-presence/raw/branch/main/files"
CONFIG_FILE="/etc/config/openwrt_ha" CONFIG_FILE="/etc/config/openwrt_ha"
@@ -23,29 +21,31 @@ if [ "$(id -u)" -ne 0 ]; then
exit 1 exit 1
fi fi
# === ПРОВЕРКА ПАКЕТОВ ===
info "Проверка необходимых пакетов..." info "Проверка необходимых пакетов..."
if opkg list-installed | grep -q "^mosquitto-client-nossl " && opkg list-installed | grep -q "^hostapd-utils "; then if opkg list-installed | grep -q "^mosquitto-client-nossl " && opkg list-installed | grep -q "^hostapd-utils "; then
info "Пакеты mosquitto-client-nossl и hostapd-utils уже установлены. Пропускаем." info "Пакеты уже установлены. Пропускаем."
else else
info "Установка отсутствующих зависимостей..." info "Установка зависимостей..."
opkg update >/dev/null 2>&1 || warn "Не удалось обновить списки opkg." opkg update >/dev/null 2>&1 || warn "Не удалось обновить списки opkg."
opkg install mosquitto-client-nossl hostapd-utils >/dev/null 2>&1 || warn "Не удалось установить пакеты." opkg install mosquitto-client-nossl hostapd-utils >/dev/null 2>&1 || warn "Не удалось установить пакеты."
if ! opkg list-installed | grep -q "^mosquitto-client-nossl " || ! opkg list-installed | grep -q "^hostapd-utils "; then if ! opkg list-installed | grep -q "^mosquitto-client-nossl " || ! opkg list-installed | grep -q "^hostapd-utils "; then
warn "Не удалось установить необходимые пакеты." warn "Не удалось установить необходимые пакеты."
printf "Продолжить установку всё равно? [y/N]: " printf "Продолжить всё равно? [y/N]: "
read answer read answer
case "$answer" in [yY]*) ;; *) exit 1 ;; esac case "$answer" in [yY]*) ;; *) exit 1 ;; esac
fi fi
fi fi
# === МЕНЮ ПРИ СУЩЕСТВУЮЩЕМ КОНФИГЕ ===
SKIP_CONFIG=false SKIP_CONFIG=false
ADD_DEVICE_ONLY=false ADD_DEVICE_ONLY=false
if [ -f "$CONFIG_FILE" ]; then if [ -f "$CONFIG_FILE" ]; then
echo "" echo ""
echo "Обнаружена существующая конфигурация." echo "Обнаружена существующая конфигурация."
echo "1) Обновить скрипты (настройки будут сохранены)" echo "1) Обновить скрипты (настройки сохранятся)"
echo "2) Добавить новое устройство" echo "2) Добавить новое устройство"
echo "3) Удалить интеграцию полностью" echo "3) Удалить интеграцию полностью"
echo "4) Выход" echo "4) Выход"
@@ -70,10 +70,11 @@ if [ -f "$CONFIG_FILE" ]; then
esac esac
fi fi
# === ВВОД НАСТРОЕК MQTT (только при первой установке) ===
if [ "$SKIP_CONFIG" = "false" ]; then if [ "$SKIP_CONFIG" = "false" ]; then
echo "" echo ""
echo "=== Настройка MQTT брокера ===" echo "=== Настройка MQTT брокера ==="
echo "(Нажмите Enter, чтобы использовать значение в скобках)" echo "(Нажмите Enter для значения по умолчанию)"
printf "IP или домен MQTT брокера [192.168.1.100]: " printf "IP или домен MQTT брокера [192.168.1.100]: "
read MQTT_HOST; MQTT_HOST=${MQTT_HOST:-192.168.1.100} read MQTT_HOST; MQTT_HOST=${MQTT_HOST:-192.168.1.100}
@@ -97,25 +98,39 @@ if [ "$SKIP_CONFIG" = "false" ]; then
info "Подключение к MQTT успешно." info "Подключение к MQTT успешно."
else else
warn "Не удалось подключиться к MQTT брокеру." warn "Не удалось подключиться к MQTT брокеру."
printf "Продолжить установку всё равно? [y/N]: " printf "Продолжить всё равно? [y/N]: "
read answer read answer
case "$answer" in [yY]*) ;; *) exit 1 ;; esac case "$answer" in [yY]*) ;; *) exit 1 ;; esac
fi fi
# === СКАЧИВАНИЕ И ЗАПОЛНЕНИЕ КОНФИГА ===
info "Скачивание шаблона конфигурации..."
wget --no-check-certificate -O "$CONFIG_FILE" "$GITEA_RAW_URL/openwrt_ha" >/dev/null 2>&1 || exit 1
# Заполняем секцию MQTT
sed -i "/config mqtt 'main'/,/^$/ {
s|option host '.*'|option host '${MQTT_HOST}'|
s|option port '.*'|option port '${MQTT_PORT}'|
s|option user '.*'|option user '${MQTT_USER}'|
s|option pass '.*'|option pass '${MQTT_PASS}'|
s|option base_topic '.*'|option base_topic '${BASE_TOPIC}'|
}" "$CONFIG_FILE"
info "Конфигурация создана: $CONFIG_FILE"
fi fi
# === ДОБАВЛЕНИЕ УСТРОЙСТВ ===
if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then if [ "$SKIP_CONFIG" = "false" ] || [ "$ADD_DEVICE_ONLY" = "true" ]; then
echo "" echo ""
printf "Добавить устройство прямо сейчас? [Y/n]: " printf "Добавить устройство прямо сейчас? [Y/n]: "
read answer read answer
case "$answer" in [nN]*) ADD_DEVICE_ONLY=false ;; esac case "$answer" in [nN]*) SKIP_DEVICES=true ;; *) SKIP_DEVICES=false ;; esac
fi fi
if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answer" != "n" ] && [ "$answer" != "N" ]; }; then if [ "$SKIP_DEVICES" != "true" ]; then
DEVICE_COUNT=1 # Определяем номер следующего устройства
if [ "$ADD_DEVICE_ONLY" = "true" ]; then DEVICE_COUNT=$(grep -c "^config device" "$CONFIG_FILE" 2>/dev/null || echo 0)
DEVICE_COUNT=$(uci show openwrt_ha 2>/dev/null | grep -c "\.name=" || echo 0)
DEVICE_COUNT=$((DEVICE_COUNT + 1)) DEVICE_COUNT=$((DEVICE_COUNT + 1))
fi
while true; do while true; do
echo "" echo ""
@@ -125,7 +140,8 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
DEVICE_NAME=${DEVICE_NAME:-Устройство $DEVICE_COUNT} DEVICE_NAME=${DEVICE_NAME:-Устройство $DEVICE_COUNT}
while true; do while true; do
echo "Введите MAC-адрес(а) через пробел (пример: 14:e0:1d:c7:05:76 или 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff)" echo "Введите MAC-адрес(а) через пробел"
echo "Пример: 14:e0:1d:c7:05:76 или 14:e0:1d:c7:05:76 aa:bb:cc:dd:ee:ff"
printf "MAC-адрес(а): " printf "MAC-адрес(а): "
read DEVICE_MACS read DEVICE_MACS
@@ -164,12 +180,15 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
read DEVICE_DELAY read DEVICE_DELAY
DEVICE_DELAY=${DEVICE_DELAY:-$DEFAULT_DELAY} DEVICE_DELAY=${DEVICE_DELAY:-$DEFAULT_DELAY}
DEVICE_ID="device${DEVICE_COUNT}" # Дописываем секцию устройства в конец конфига
uci set openwrt_ha.${DEVICE_ID}='device' cat >> "$CONFIG_FILE" << EOF
uci set openwrt_ha.${DEVICE_ID}.name="$DEVICE_NAME"
uci set openwrt_ha.${DEVICE_ID}.macs="$DEVICE_MACS" config device 'device${DEVICE_COUNT}'
uci set openwrt_ha.${DEVICE_ID}.type="$DEVICE_TYPE" option name '${DEVICE_NAME}'
uci set openwrt_ha.${DEVICE_ID}.delay="$DEVICE_DELAY" option macs '${DEVICE_MACS}'
option type '${DEVICE_TYPE}'
option delay '${DEVICE_DELAY}'
EOF
info "Устройство '$DEVICE_NAME' добавлено." info "Устройство '$DEVICE_NAME' добавлено."
@@ -178,23 +197,12 @@ if [ "$ADD_DEVICE_ONLY" = "true" ] || { [ "$SKIP_CONFIG" = "false" ] && [ "$answ
case "$answer" in [nN]*) break ;; esac case "$answer" in [nN]*) break ;; esac
DEVICE_COUNT=$((DEVICE_COUNT + 1)) DEVICE_COUNT=$((DEVICE_COUNT + 1))
done done
uci commit openwrt_ha
fi
if [ "$SKIP_CONFIG" = "false" ]; then
uci set openwrt_ha.main='mqtt'
uci set openwrt_ha.main.host="$MQTT_HOST"
uci set openwrt_ha.main.port="$MQTT_PORT"
uci set openwrt_ha.main.user="$MQTT_USER"
uci set openwrt_ha.main.pass="$MQTT_PASS"
uci set openwrt_ha.main.base_topic="$BASE_TOPIC"
uci commit openwrt_ha
fi fi
# === СКАЧИВАНИЕ СКРИПТОВ ===
info "Загрузка файлов из репозитория..." info "Загрузка файлов из репозитория..."
if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then if ! wget --spider --no-check-certificate "$GITEA_RAW_URL/hostapd.user" >/dev/null 2>&1; then
error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL" error "Не удалось подключиться к репозиторию: $GITEA_RAW_URL"
error "Проверьте правильность URL в начале скрипта install.sh"
exit 1 exit 1
fi fi
@@ -204,6 +212,7 @@ wget --no-check-certificate -O /etc/init.d/openwrt_presence "$GITEA_RAW_URL/open
chmod +x /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence chmod +x /etc/hostapd.user /usr/bin/mqtt_ha_discovery.sh /etc/init.d/openwrt_presence
# === АВТОЗАПУСК ===
info "Настройка автозапуска..." info "Настройка автозапуска..."
/etc/init.d/openwrt_presence enable >/dev/null 2>&1 /etc/init.d/openwrt_presence enable >/dev/null 2>&1
/etc/init.d/openwrt_presence restart >/dev/null 2>&1 /etc/init.d/openwrt_presence restart >/dev/null 2>&1
@@ -211,10 +220,11 @@ info "Настройка автозапуска..."
sleep 2 sleep 2
if ! ps | grep -q "[h]ostapd_cli"; then if ! ps | grep -q "[h]ostapd_cli"; then
warn "Служба запущена, но процесс hostapd_cli не найден." warn "Служба запущена, но процесс hostapd_cli не найден."
echo "Проверьте логи: logread | grep hostapd" echo "Проверьте: logread | grep hostapd"
echo "Возможно, ваши интерфейсы Wi-Fi называются не phy0-ap0/phy1-ap0 (проверьте через 'iw dev')" echo "Возможно, ваши интерфейсы Wi-Fi называются не phy0-ap0/phy1-ap0 (проверьте: iw dev)"
fi fi
# === CRON ===
info "Настройка Cron..." info "Настройка Cron..."
if command -v crontab >/dev/null 2>&1; then if command -v crontab >/dev/null 2>&1; then
if ! crontab -l 2>/dev/null | grep -q "mqtt_ha_discovery.sh"; then if ! crontab -l 2>/dev/null | grep -q "mqtt_ha_discovery.sh"; then
@@ -222,9 +232,10 @@ if command -v crontab >/dev/null 2>&1; then
/etc/init.d/cron restart 2>/dev/null /etc/init.d/cron restart 2>/dev/null
fi fi
else else
warn "Cron не установлен. Установите вручную: opkg install cron" warn "Cron не установлен. Установите: opkg install cron"
fi fi
# === ИНИЦИАЛИЗАЦИЯ ===
info "Первичная инициализация..." info "Первичная инициализация..."
/usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Инициализация завершилась с ошибкой." /usr/bin/mqtt_ha_discovery.sh >/dev/null 2>&1 || warn "Инициализация завершилась с ошибкой."
@@ -232,6 +243,8 @@ echo ""
echo "==================================================" echo "=================================================="
info "Установка успешно завершена!" info "Установка успешно завершена!"
echo "==================================================" echo "=================================================="
echo "Для редактирования настроек: vi /etc/config/openwrt_ha" echo "Конфигурация: vi /etc/config/openwrt_ha"
echo "Для просмотра логов: logread | grep wifi_tracker" echo "Логи: logread | grep wifi_tracker"
echo "Для проверки: выключите Wi-Fi на добавленном устройстве и проверьте лог через указанную задержку." echo ""
echo "Для проверки: выключите Wi-Fi на добавленном устройстве"
echo "и проверьте лог через указанную задержку."