Update install.sh
This commit is contained in:
+52
-39
@@ -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 "и проверьте лог через указанную задержку."
|
||||||
Reference in New Issue
Block a user