version0.4 Общие исправления
This commit is contained in:
+79
-10
@@ -88,8 +88,9 @@ apt-get install -y -qq \
|
||||
iptables ipset ufw \
|
||||
fail2ban openssl \
|
||||
net-tools \
|
||||
python3 python3-yaml \
|
||||
2>/dev/null
|
||||
ok "Базовые пакеты установлены (включая fail2ban, ufw, ipset)"
|
||||
ok "Базовые пакеты установлены (включая fail2ban, ufw, ipset, python3-yaml)"
|
||||
|
||||
# =============================================================================
|
||||
# УСТАНОВКА MITA
|
||||
@@ -264,7 +265,8 @@ WARP_PORT=$WARP_PORT
|
||||
MITA_PORT_RANGE="$MITA_PORT_RANGE"
|
||||
MITA_PROTOCOL="$MITA_PROTOCOL"
|
||||
MITA_LOG_LEVEL="$MITA_LOG_LEVEL"
|
||||
GEOSITE_BASE="https://raw.githubusercontent.com/v2fly/domain-list-community/release"
|
||||
GEOSITE_YML_URL="https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat_plain.yml"
|
||||
GEOSITE_CACHE="/var/cache/mita-geosite.yml"
|
||||
GEOIP_BASE="https://raw.githubusercontent.com/herrbischoff/country-ip-blocks/master/ipv4"
|
||||
|
||||
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] \$*" | tee -a /var/log/mita-update.log; }
|
||||
@@ -276,6 +278,31 @@ TMP_DOMAINS=\$(mktemp)
|
||||
# Пользовательские домены
|
||||
grep -v '^\s*#' "\$LISTS_DIR/custom_domains.txt" | grep -v '^\s*$' >> "\$TMP_DOMAINS" || true
|
||||
|
||||
# Проверяем, нужен ли geosite YAML (есть хотя бы одна строка geosite: в auto_domains.txt)
|
||||
NEED_GEOSITE=false
|
||||
grep -q '^geosite:' "\$LISTS_DIR/auto_domains.txt" 2>/dev/null && NEED_GEOSITE=true
|
||||
|
||||
if \$NEED_GEOSITE; then
|
||||
mkdir -p "\$(dirname "\$GEOSITE_CACHE")"
|
||||
CACHE_AGE_DAYS=999
|
||||
if [[ -f "\$GEOSITE_CACHE" ]]; then
|
||||
CACHE_AGE_SEC=\$(( \$(date +%s) - \$(stat -c %Y "\$GEOSITE_CACHE" 2>/dev/null || echo 0) ))
|
||||
CACHE_AGE_DAYS=\$(( CACHE_AGE_SEC / 86400 ))
|
||||
fi
|
||||
if [[ \$CACHE_AGE_DAYS -ge 7 ]]; then
|
||||
log "Загрузка базы geosite (dlc.dat_plain.yml, ~10-15 МБ, кэш обновляется раз в 7 дней)..."
|
||||
if curl -sfL --max-time 60 "\$GEOSITE_YML_URL" -o "\$GEOSITE_CACHE.tmp" 2>/dev/null; then
|
||||
mv "\$GEOSITE_CACHE.tmp" "\$GEOSITE_CACHE"
|
||||
log "База geosite обновлена"
|
||||
else
|
||||
log "WARN: не удалось загрузить базу geosite — используется старый кэш (если есть)"
|
||||
rm -f "\$GEOSITE_CACHE.tmp"
|
||||
fi
|
||||
else
|
||||
log "База geosite в кэше актуальна (обновлена \$CACHE_AGE_DAYS дн. назад)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Автоматические источники
|
||||
while IFS= read -r line; do
|
||||
line="\$(echo "\$line" | xargs)"
|
||||
@@ -284,10 +311,40 @@ while IFS= read -r line; do
|
||||
if [[ "\$line" == geosite:* ]]; then
|
||||
category="\${line#geosite:}"
|
||||
log " geosite:\$category"
|
||||
curl -sf "\$GEOSITE_BASE/\${category}.txt" 2>/dev/null \
|
||||
| grep -v '^\s*#' | grep -v '^\s*$' | grep -v 'include:' | grep -v 'regexp:' \
|
||||
| sed 's/^full://' \
|
||||
>> "\$TMP_DOMAINS" || log " WARN: не удалось загрузить geosite:\$category"
|
||||
if [[ -f "\$GEOSITE_CACHE" ]]; then
|
||||
python3 -c "
|
||||
import yaml, sys
|
||||
try:
|
||||
with open('\$GEOSITE_CACHE') as f:
|
||||
data = yaml.safe_load(f)
|
||||
found = False
|
||||
for entry in data.get('lists', []):
|
||||
if entry.get('name','').lower() == '\$category'.lower():
|
||||
found = True
|
||||
for rule in entry.get('rules', []):
|
||||
d = rule
|
||||
for prefix in ('domain:', 'full:'):
|
||||
if d.startswith(prefix):
|
||||
d = d[len(prefix):]
|
||||
print(d)
|
||||
break
|
||||
else:
|
||||
# regexp: и include: пропускаем — не доменные правила
|
||||
pass
|
||||
if not found:
|
||||
sys.stderr.write('NOTFOUND\\n')
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'ERROR:{e}\\n')
|
||||
" >> "\$TMP_DOMAINS" 2>/tmp/geosite_err.log
|
||||
if grep -q "NOTFOUND" /tmp/geosite_err.log 2>/dev/null; then
|
||||
log " WARN: категория geosite:\$category не найдена в базе"
|
||||
elif grep -q "ERROR" /tmp/geosite_err.log 2>/dev/null; then
|
||||
log " WARN: ошибка парсинга geosite:\$category — $(cat /tmp/geosite_err.log)"
|
||||
fi
|
||||
rm -f /tmp/geosite_err.log
|
||||
else
|
||||
log " WARN: база geosite недоступна, пропускаю geosite:\$category"
|
||||
fi
|
||||
|
||||
elif [[ "\$line" == http* ]]; then
|
||||
log " URL: \$line"
|
||||
@@ -598,12 +655,24 @@ echo ""
|
||||
# =============================================================================
|
||||
section "Веб-панель управления"
|
||||
|
||||
PANEL_INSTALLER="$SCRIPT_DIR/mita-panel-pkg/install-panel.sh"
|
||||
# Ищем install-panel.sh в нескольких возможных местах:
|
||||
# 1) Прямо рядом с install.sh (актуальная структура архива)
|
||||
# 2) В подпапке mita-panel-pkg/ (старая структура архива)
|
||||
PANEL_INSTALLER=""
|
||||
for candidate in \
|
||||
"$SCRIPT_DIR/install-panel.sh" \
|
||||
"$SCRIPT_DIR/mita-panel-pkg/install-panel.sh"
|
||||
do
|
||||
if [[ -f "$candidate" ]]; then
|
||||
PANEL_INSTALLER="$candidate"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ! -f "$PANEL_INSTALLER" ]]; then
|
||||
if [[ -z "$PANEL_INSTALLER" ]]; then
|
||||
warn "Файл install-panel.sh не найден рядом со скриптом."
|
||||
warn "Ожидаемый путь: $PANEL_INSTALLER"
|
||||
warn "Скачайте архив mita-panel.zip, распакуйте рядом с install.sh и запустите install-panel.sh вручную."
|
||||
warn "Искал в: $SCRIPT_DIR/ и $SCRIPT_DIR/mita-panel-pkg/"
|
||||
warn "Убедитесь что install-panel.sh, app.py и templates/ распакованы рядом с install.sh."
|
||||
else
|
||||
echo -e "Установить веб-панель управления mita? (логин/пароль и секретный путь генерируются автоматически)"
|
||||
echo -e " ${GREEN}y${NC} — да, установить сейчас"
|
||||
|
||||
Reference in New Issue
Block a user