v1.2.9: снос убирает всё (список по коду установщика) + проверка после сноса + флаг --clean у установщика
This commit is contained in:
@@ -10,6 +10,19 @@
|
||||
канал обновлений и оговорки. Две картинки — наши (`manuals/assets/fork-banner.svg` и
|
||||
`manuals/assets/script-3x-ui-local.svg`, терминал собран из настоящего вывода скрипта).
|
||||
* Шов в README больше не нужен (`tools/fork_apply.py`): файл наш целиком, как `kit-local.sh`.
|
||||
## v1.2.9: снос действительно убирает всё, повторная установка после сноса
|
||||
|
||||
* Список удаляемого в `kit local uninstall` собран заново **по коду установщика** и дополнен тем, чего
|
||||
не хватало: `/usr/local/lib/kit-sub`, `/root/kit-backup-*` и `/root/x-ui-before-*` (копии kit),
|
||||
`/var/log/kit-install-check.log`, `/usr/bin/x-ui.new`, строка `include kit-stream.conf` в `nginx.conf`,
|
||||
симлинки в `sites-enabled`/`streams-enabled`, файл автообновлений безопасности, пользователь `kit-sub`.
|
||||
Из-за пропущенных файлов установщик после сноса отказывался ставить заново («3X-UI уже установлена»).
|
||||
* После сноса печатается проверка **теми же условиями, что у установщика**, и список того, что осталось
|
||||
на диске — вместо бодрого «удалено» вслепую.
|
||||
* Флаг `--reset-ssh`: снести и наш ssh-дроп-ин (порт возвращается к системному). По умолчанию SSH не трогаем.
|
||||
* У установщика появился флаг **`--clean`**: убрать прошлую установку и поставить заново. Если установщик
|
||||
всё-таки упал на «уже установлена», в подсказке прямо сказано запустить с `--clean`.
|
||||
|
||||
## v1.2.8: доступ к панели в конце установки и снос сервера из меню
|
||||
|
||||
* В конце установки (перед подпиской) печатается **доступ к панели 3X-UI**: адрес, логин и пароль из
|
||||
|
||||
+63
-6
@@ -34,15 +34,17 @@
|
||||
# --yes ни о чём не спрашивать (ping закрою, автообновления включу, порт и пароль — нет)
|
||||
# --no-time не запускать kit fix
|
||||
# --no-check не запускать в конце kit check
|
||||
# --clean убрать прошлую установку и поставить заново (SSH не трогает)
|
||||
# --verify-only только проверить релиз (подпись и SHA256) и выйти
|
||||
# --dry-run показать план и ничего не делать
|
||||
# --clean снести прошлую установку и поставить заново (SSH не трогает)
|
||||
--dry-run показать план и ничего не делать
|
||||
# -h | --help эта справка
|
||||
#
|
||||
# Наш файл: авторские релизы его не перезаписывают, а правки форка живут в scripts/kit-local.sh.
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
KIT_VERSION="1.2.8" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
KIT_VERSION="1.2.9" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||
NS="3x-ui-kit-release"
|
||||
SIG_ID="releases@3x-ui-kit"
|
||||
@@ -78,7 +80,8 @@ usage() {
|
||||
--yes ни о чём не спрашивать (для автоматизации)
|
||||
--site N|random|off сайт-заглушка: конкретный из нашего набора, случайный (по умолчанию) или
|
||||
не трогать авторскую страницу (то же: --no-site)
|
||||
--no-sub не показывать в конце подписку, QR-код и ссылки по протоколам
|
||||
--no-sub не показывать в конце подписку и QR-код
|
||||
--clean снести прошлую установку и поставить заново (если прошлый запуск оборвался)
|
||||
--no-time не запускать kit fix (время и безопасные починки)
|
||||
--no-check не запускать в конце kit check
|
||||
--verify-only только проверить релиз (подпись и SHA256) и выйти
|
||||
@@ -92,6 +95,7 @@ EOF
|
||||
INSTALLER_ARGS=(); harden=auto; ssh_port=""; fix_time=yes; do_check=yes; dry=no; verify_only=no; assume_yes=no
|
||||
site=random # заглушка: случайный сайт из нашего набора (off — не трогать)
|
||||
show_sub=yes # в самом конце показать подписку, QR-код и ссылки
|
||||
clean=no # --clean: убрать прошлую установку перед новой
|
||||
while (($#)); do
|
||||
case $1 in
|
||||
--harden) harden=yes ;;
|
||||
@@ -103,6 +107,7 @@ while (($#)); do
|
||||
--site=*) site=${1#*=} ;;
|
||||
--no-site) site=off ;;
|
||||
--no-sub) show_sub=no ;;
|
||||
--clean) clean=yes ;;
|
||||
--no-time) fix_time=no ;;
|
||||
--no-check) do_check=no ;;
|
||||
--verify-only) verify_only=yes ;;
|
||||
@@ -134,6 +139,7 @@ if [[ $dry == yes ]]; then
|
||||
say "план установки (--dry-run: ничего не делаю)"
|
||||
pre "версия сборки: $KIT_VERSION"
|
||||
pre "откуда: $GITEA (тег v$KIT_VERSION), подпись проверяется ключом форка"
|
||||
[[ $clean == yes ]] && pre "прошлая установка: уберу её перед установкой (--clean), SSH не трону"
|
||||
if ((${#INSTALLER_ARGS[@]})); then pre "установщик автора: bash scripts/3x-ui.sh ${INSTALLER_ARGS[*]}"; else pre "установщик автора: bash scripts/3x-ui.sh — спросит про маскировку и домен"; fi
|
||||
if [[ $harden == auto ]]; then
|
||||
if interactive; then pre "защита: спрошу про ответ на ping и автообновления"
|
||||
@@ -153,7 +159,7 @@ if [[ $dry == yes ]]; then
|
||||
esac
|
||||
[[ $fix_time == yes ]] && pre "после: kit fix (время, безопасные починки)"
|
||||
[[ $do_check == yes ]] && pre "проверка: kit check + kit local hardening"
|
||||
[[ $show_sub == yes ]] && pre "в самом конце: подписка, QR-код и ссылки по протоколам (--no-sub — не надо)"
|
||||
[[ $show_sub == yes ]] && pre "в самом конце: доступ к панели 3X-UI, подписка, QR-код и ссылки (--no-sub — не надо)"
|
||||
echo
|
||||
say "запуск без --dry-run выполнит всё это на сервере"
|
||||
exit 0
|
||||
@@ -275,6 +281,55 @@ ask_protocols() { # печатает итоговый список через з
|
||||
printf '%s' "$(IFS=,; echo "${DEFAULT_PROTOS[*]}")"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------ снос прошлой установки (--clean)
|
||||
|
||||
# Нужен, когда прошлая установка оборвалась: авторский установщик в таком случае отказывается работать
|
||||
# («3X-UI уже установлена этим скриптом»). Убираем то, что создаёт установка, и ставим заново.
|
||||
# SSH не трогаем: ни порт, ни конфиги — иначе можно потерять доступ к серверу.
|
||||
clean_previous() {
|
||||
say "убираю прошлую установку (--clean)"
|
||||
local s p
|
||||
for s in x-ui kit-sub kit-update.timer kit-update.service; do
|
||||
systemctl list-unit-files 2>/dev/null | grep -q "^$s" || continue
|
||||
systemctl disable --now "$s" >/dev/null 2>&1 || true
|
||||
printf ' остановлено: %s\n' "$s"
|
||||
done
|
||||
for p in /usr/local/x-ui /etc/x-ui /usr/bin/x-ui /usr/bin/x-ui.new /etc/systemd/system/x-ui.service \
|
||||
/usr/local/bin/kit /usr/local/lib/kit /usr/local/lib/kit-sub /etc/kit /etc/kit-sub \
|
||||
/etc/systemd/system/kit-sub.service /etc/systemd/system/kit-update.service \
|
||||
/etc/systemd/system/kit-update.timer \
|
||||
/etc/cron.d/kit-nginx-reload /etc/cron.d/kit-xui-menu /etc/cron.d/kit-sub-cert \
|
||||
/etc/nginx/kit-stream.conf /etc/nginx/conf.d/kit.conf /var/www/kit \
|
||||
/root/3x-ui.txt /root/cert /var/log/kit-install-check.log \
|
||||
/root/kit-local-backup-* /root/kit-backup-* /root/x-ui-before-sni-* /root/x-ui-before-update-*; do
|
||||
[[ -e $p ]] || continue
|
||||
rm -rf $p && printf ' удалено: %s\n' "$p"
|
||||
done
|
||||
if [[ -f /etc/nginx/nginx.conf ]] && grep -q 'kit-stream\.conf' /etc/nginx/nginx.conf; then
|
||||
sed -i '/kit-stream\.conf/d' /etc/nginx/nginx.conf
|
||||
printf ' из nginx.conf убрана наша строка включения\n'
|
||||
fi
|
||||
if id -u kit-sub >/dev/null 2>&1; then
|
||||
pkill -u kit-sub >/dev/null 2>&1 || true
|
||||
userdel -r kit-sub >/dev/null 2>&1 || true
|
||||
printf ' удалён пользователь kit-sub\n'
|
||||
fi
|
||||
systemctl daemon-reload
|
||||
if [[ -f /root/3x-ui.txt && -x /usr/local/x-ui/x-ui ]]; then
|
||||
warn "часть файлов прошлой установки осталась — проверьте: ls -la /usr/local/x-ui /root/3x-ui.txt"
|
||||
else
|
||||
printf ' готово: место под установку свободно\n'
|
||||
fi
|
||||
}
|
||||
|
||||
installer_failed() {
|
||||
if [[ -f /root/3x-ui.txt && -x /usr/local/x-ui/x-ui ]]; then
|
||||
printf '\n%s!%s %s\n' "$Y" "$N" \
|
||||
"На сервере осталась прошлая установка (установщик так и пишет). Запустите ещё раз с флагом --clean — он уберёт старое и поставит заново." >&2
|
||||
fi
|
||||
die "установщик остановился с ошибкой — смотрите его вывод выше"
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------ установка
|
||||
|
||||
if [[ -z $proto_flag ]]; then
|
||||
@@ -285,14 +340,16 @@ else
|
||||
fi
|
||||
say "протоколы: $protos — под остальные не создаётся ничего"
|
||||
|
||||
[[ $clean == yes ]] && clean_previous
|
||||
|
||||
say "запускаю установщик автора (панель 3X-UI, протоколы, сайт-заглушка, подписка)"
|
||||
if ((${#INSTALLER_ARGS[@]})); then printf ' флаги: %s\n' "${INSTALLER_ARGS[*]}"; else printf ' флагов нет: установщик задаст вопросы (маскировка, домен)\n'; fi
|
||||
# stdin: если есть терминал — отдаём его установщику (там есть вопросы), иначе /dev/null,
|
||||
# иначе установщик начнёт читать наш собственный скрипт вместо ответов.
|
||||
if [[ -r /dev/tty ]]; then
|
||||
bash "$tmp/scripts/3x-ui.sh" ${INSTALLER_ARGS[@]+"${INSTALLER_ARGS[@]}"} </dev/tty || die "установщик остановился с ошибкой — смотрите его вывод выше"
|
||||
bash "$tmp/scripts/3x-ui.sh" ${INSTALLER_ARGS[@]+"${INSTALLER_ARGS[@]}"} </dev/tty || installer_failed
|
||||
else
|
||||
bash "$tmp/scripts/3x-ui.sh" ${INSTALLER_ARGS[@]+"${INSTALLER_ARGS[@]}"} </dev/null || die "установщик остановился с ошибкой (нет терминала — вопросы задать некому)"
|
||||
bash "$tmp/scripts/3x-ui.sh" ${INSTALLER_ARGS[@]+"${INSTALLER_ARGS[@]}"} </dev/null || installer_failed
|
||||
fi
|
||||
command -v kit >/dev/null || die "после установки нет команды kit — что-то пошло не так, смотрите вывод выше"
|
||||
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ wait_apt_idle() {
|
||||
XUI_VERSION="v3.9.0"
|
||||
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
||||
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
||||
KIT_VERSION="1.2.8"
|
||||
KIT_VERSION="1.2.9"
|
||||
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
||||
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||
# останавливается и не заменяет команду hy2.
|
||||
|
||||
KIT_VERSION="1.2.8"
|
||||
KIT_VERSION="1.2.9"
|
||||
|
||||
cat >&2 <<'MSG'
|
||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||
|
||||
+83
-41
@@ -920,40 +920,43 @@ kit_local_cmd() {
|
||||
# kit local uninstall --dry-run только покажет, что будет удалено
|
||||
kit_local_uninstall() {
|
||||
kl_args "$@"
|
||||
local arg=${KL_REST[0]:-} ans answer
|
||||
local arg=${KL_REST[0]:-} ans found
|
||||
local reset_ssh=no
|
||||
case $arg in
|
||||
"") ;;
|
||||
--dry-run) KL_DRY=yes ;;
|
||||
*) kl_die "kit local uninstall [--dry-run]"; return 1 ;;
|
||||
--reset-ssh) reset_ssh=yes ;;
|
||||
*) kl_die "kit local uninstall [--dry-run] [--reset-ssh]"; return 1 ;;
|
||||
esac
|
||||
|
||||
local -a svc=(x-ui kit-sub kit-update.timer kit-update.service)
|
||||
local -a files=(
|
||||
/usr/local/x-ui /etc/x-ui /usr/bin/x-ui /etc/systemd/system/x-ui.service
|
||||
/usr/local/bin/kit /usr/local/lib/kit /etc/kit /etc/kit-sub
|
||||
# Список собран по коду установщика (scripts/3x-ui.sh) и нашего слоя: убираем всё, что они создают.
|
||||
local -a paths=(
|
||||
/usr/local/x-ui /etc/x-ui /usr/bin/x-ui /usr/bin/x-ui.new /etc/systemd/system/x-ui.service
|
||||
/usr/local/bin/kit /usr/local/lib/kit /usr/local/lib/kit-sub /etc/kit /etc/kit-sub
|
||||
/etc/systemd/system/kit-sub.service /etc/systemd/system/kit-update.service
|
||||
/etc/systemd/system/kit-update.timer
|
||||
/etc/cron.d/kit-nginx-reload /etc/cron.d/kit-xui-menu /etc/cron.d/kit-sub-cert
|
||||
/etc/nginx/kit-stream.conf /etc/nginx/conf.d/kit.conf
|
||||
/var/www/kit /root/3x-ui.txt /root/cert /root/.acme.sh /etc/letsencrypt
|
||||
/etc/nginx/kit-stream.conf /etc/nginx/conf.d/kit.conf /var/www/kit
|
||||
/root/3x-ui.txt /root/cert /root/.acme.sh /etc/letsencrypt /var/log/kit-install-check.log
|
||||
/etc/sysctl.d/99-kit-local-icmp.conf /etc/apt/apt.conf.d/52-kit-local-upgrades
|
||||
/etc/apt/apt.conf.d/20auto-upgrades
|
||||
)
|
||||
local -a backups=()
|
||||
local b
|
||||
for b in /root/kit-local-backup-*; do [[ -e $b ]] && backups+=("$b"); done
|
||||
local -a masks=(/root/kit-local-backup-* /root/kit-backup-* /root/x-ui-before-sni-* /root/x-ui-before-update-*)
|
||||
local -a extra=()
|
||||
local m
|
||||
for m in "${masks[@]}"; do for f in $m; do [[ -e $f ]] && extra+=("$f"); done; done
|
||||
|
||||
kl_step "Будет удалено"
|
||||
printf ' службы: %s\n' "${svc[*]}"
|
||||
printf ' файлы и каталоги: %s\n' "${files[*]}"
|
||||
[[ ${#backups[@]} -eq 0 ]] || printf ' наши копии изменённых файлов: %s\n' "${backups[*]}"
|
||||
printf ' правила ufw для 80/tcp и 443/tcp (правило для SSH не трогаем)\n'
|
||||
printf ' ответ на ping вернём (снимем наше правило)\n'
|
||||
if kl_ufw_active; then
|
||||
if [[ $(grep -c '^# -A ufw-before-input -p icmp --icmp-type echo-request' /etc/ufw/before.rules 2>/dev/null || echo 0) -gt 0 ]]; then
|
||||
printf ' %s\n' "правило ICMP наше (строка закомментирована) — вернём как было"
|
||||
fi
|
||||
printf ' файлы и каталоги: %s\n' "${paths[*]}"
|
||||
[[ ${#extra[@]} -eq 0 ]] || printf ' копии и журналы: %s\n' "${extra[*]}"
|
||||
printf ' пользователь kit-sub (если создавался)\n'
|
||||
printf ' правила ufw для 80/tcp, 443/tcp и 443/udp; ответ на ping возвращается\n'
|
||||
kl_ok "SSH не трогаем: ни порт, ни конфиги, ни правила — иначе можно потерять доступ"
|
||||
if [[ $reset_ssh == yes ]]; then
|
||||
kl_warn "--reset-ssh: снесу и наш ssh-дроп-ин (порт вернётся к системному). Убедитесь, что вход по нему работает!"
|
||||
fi
|
||||
kl_ok "перезагрузка не потребуется, SSH и его порт не затрагиваются"
|
||||
|
||||
if kl_dry; then
|
||||
printf '\n (dry-run) ничего не делаю. Запустить по-настоящему: kit local uninstall\n'
|
||||
@@ -970,51 +973,90 @@ kit_local_uninstall() {
|
||||
kl_step "Останавливаю и отключаю службы"
|
||||
local s
|
||||
for s in "${svc[@]}"; do
|
||||
systemctl disable --now "$s" >/dev/null 2>&1 && kl_ok "остановлено и отключено: $s" || kl_warn "служба $s не найдена (уже удалена?)"
|
||||
if systemctl list-unit-files 2>/dev/null | grep -q "^$s"; then
|
||||
systemctl disable --now "$s" >/dev/null 2>&1 && kl_ok "остановлено и отключено: $s" || kl_warn "не смог остановить: $s"
|
||||
fi
|
||||
done
|
||||
if kl_have nginx; then
|
||||
local others
|
||||
others=$(find /etc/nginx/conf.d /etc/nginx/sites-enabled -type f -o -type l 2>/dev/null | grep -vE 'kit\.conf$|default$' | wc -l)
|
||||
others=$(find /etc/nginx/conf.d /etc/nginx/sites-enabled /etc/nginx/streams-enabled -mindepth 1 2>/dev/null \
|
||||
| grep -vE 'kit\.conf$|(^|/)default$' | wc -l)
|
||||
if [[ $others -eq 0 ]]; then
|
||||
kl_run systemctl disable --now nginx >/dev/null 2>&1 && kl_ok "nginx остановлен (своих сайтов, кроме нашего, не было)"
|
||||
systemctl disable --now nginx >/dev/null 2>&1 && kl_ok "nginx остановлен (чужих сайтов в нём не было)"
|
||||
KL_NGINX_PURGE=yes
|
||||
else
|
||||
kl_ok "nginx оставляю: в нём есть другие сайты ($others) — уберу только наши конфиги"
|
||||
kl_ok "nginx оставляю: в нём есть другие сайты — уберу только наши строки и файлы"
|
||||
KL_NGINX_PURGE=no
|
||||
fi
|
||||
fi
|
||||
|
||||
kl_step "Убираю файлы"
|
||||
for f in "${files[@]}"; do
|
||||
local f
|
||||
for f in "${paths[@]}"; do
|
||||
[[ -e $f ]] || continue
|
||||
kl_run rm -rf "$f" && kl_ok "удалено: $f"
|
||||
rm -rf "$f" && kl_ok "удалено: $f" || kl_warn "не удалось удалить: $f"
|
||||
done
|
||||
for f in "${backups[@]}"; do kl_run rm -rf "$f" && kl_ok "удалено: $f"; done
|
||||
[[ ${KL_NGINX_PURGE:-no} == yes ]] && { kl_run apt-get remove -y --purge nginx nginx-common >/dev/null 2>&1 && kl_ok "пакет nginx удалён"; }
|
||||
for f in ${extra[@]+"${extra[@]}"}; do rm -rf "$f" && kl_ok "удалено: $f"; done
|
||||
|
||||
# Наши строки в чужом nginx: include stream-конфига и симлинки, если были.
|
||||
if [[ -f /etc/nginx/nginx.conf ]] && grep -q 'kit-stream.conf' /etc/nginx/nginx.conf; then
|
||||
kl_backup /etc/nginx/nginx.conf
|
||||
sed -i '/kit-stream\.conf/d' /etc/nginx/nginx.conf && kl_ok "из nginx.conf убрана наша строка включения"
|
||||
fi
|
||||
local lnk
|
||||
for lnk in /etc/nginx/sites-enabled/*kit* /etc/nginx/streams-enabled/*kit*; do
|
||||
[[ -e $lnk || -L $lnk ]] && rm -f "$lnk" && kl_ok "удалена ссылка: $lnk"
|
||||
done
|
||||
if [[ ${KL_NGINX_PURGE:-no} == yes ]]; then
|
||||
apt-get remove -y --purge nginx nginx-common >/dev/null 2>&1 && kl_ok "пакет nginx удалён"
|
||||
fi
|
||||
|
||||
# Пользователь подписки (работает не от root).
|
||||
if id -u kit-sub >/dev/null 2>&1; then
|
||||
pkill -u kit-sub >/dev/null 2>&1 || true
|
||||
userdel -r kit-sub >/dev/null 2>&1 && kl_ok "пользователь kit-sub удалён" || kl_warn "не смог удалить пользователя kit-sub"
|
||||
fi
|
||||
|
||||
kl_step "Возвращаю систему"
|
||||
kl_run systemctl daemon-reload
|
||||
if kl_ufw_active; then
|
||||
systemctl daemon-reload
|
||||
if [[ $reset_ssh == yes && -f /etc/systemd/system/ssh.socket.d/99-kit-local-port.conf ]]; then
|
||||
rm -f /etc/systemd/system/ssh.socket.d/99-kit-local-port.conf
|
||||
rm -f /etc/ssh/sshd_config.d/99-kit-local-port.conf
|
||||
systemctl daemon-reload
|
||||
kl_run systemctl restart ssh.socket 2>/dev/null || kl_run systemctl restart ssh 2>/dev/null || true
|
||||
kl_warn "ssh-дроп-ин удалён: порт вернулся к системному. Проверьте вход в НОВОМ окне!"
|
||||
fi
|
||||
if kl_have ufw && kl_ufw_active; then
|
||||
local p
|
||||
for p in 80/tcp 443/tcp 443/udp; do kl_run ufw delete allow "$p" >/dev/null 2>&1 && kl_ok "правило ufw снято: $p"; done
|
||||
for p in 80/tcp 443/tcp 443/udp; do ufw delete allow "$p" >/dev/null 2>&1 && kl_ok "правило ufw снято: $p"; done
|
||||
if [[ -f $KL_UFW_RULES ]]; then
|
||||
kl_backup "$KL_UFW_RULES"; kl_backup "$KL_UFW6_RULES"
|
||||
kl_run sed -i 's/^# -A ufw-before-input -p icmp --icmp-type echo-request/-A ufw-before-input -p icmp --icmp-type echo-request/' "$KL_UFW_RULES"
|
||||
[[ -f $KL_UFW6_RULES ]] && kl_run sed -i 's/^# -A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/' "$KL_UFW6_RULES"
|
||||
kl_run ufw reload >/dev/null 2>&1
|
||||
kl_ok "ответ на ping возвращён"
|
||||
sed -i 's/^# -A ufw-before-input -p icmp --icmp-type echo-request/-A ufw-before-input -p icmp --icmp-type echo-request/' "$KL_UFW_RULES"
|
||||
[[ -f $KL_UFW6_RULES ]] && sed -i 's/^# -A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/' "$KL_UFW6_RULES"
|
||||
ufw reload >/dev/null 2>&1 && kl_ok "ответ на ping возвращён"
|
||||
fi
|
||||
fi
|
||||
kl_run sysctl -q -w net.ipv4.icmp_echo_ignore_all=0 >/dev/null 2>&1 || true
|
||||
sysctl -q -w net.ipv4.icmp_echo_ignore_all=0 >/dev/null 2>&1 || true
|
||||
|
||||
kl_step "Проверка"
|
||||
kl_step "Проверка (теми же условиями, что и установщик)"
|
||||
local left=0
|
||||
for s in "${svc[@]}"; do systemctl list-unit-files 2>/dev/null | grep -q "^$s" && { kl_warn "осталась служба: $s"; left=1; }; done
|
||||
command -v kit >/dev/null && { kl_warn "команда kit ещё на месте (запустите команду ещё раз или удалите /usr/local/bin/kit)"; left=1; }
|
||||
if [[ -f /root/3x-ui.txt && -x /usr/local/x-ui/x-ui ]]; then
|
||||
kl_warn "установщик всё ещё считает панель установленной"; left=1
|
||||
fi
|
||||
for s in "${svc[@]}"; do
|
||||
systemctl list-unit-files 2>/dev/null | grep -q "^$s" && { kl_warn "осталась служба: $s"; left=1; }
|
||||
done
|
||||
found=$(ls -d /etc/kit* /usr/local/lib/kit* /usr/local/bin/kit /etc/cron.d/kit-* /var/www/kit \
|
||||
/root/3x-ui.txt /root/cert /etc/x-ui /usr/local/x-ui 2>/dev/null | head -20)
|
||||
[[ -z $found ]] || { kl_warn "осталось на диске:"; printf ' %s\n' $found; left=1; }
|
||||
ss -H -ltn 2>/dev/null | awk '{print $4}' | grep -qE '[:.]443$' && { kl_warn "порт 443 всё ещё кем-то слушается"; left=1; }
|
||||
(( left )) || kl_ok "от установки ничего не осталось, порт 443 свободен"
|
||||
kl_ok "SSH не тронут: порт 22 (или ваш текущий) и правила для него на месте"
|
||||
kl_step "Готово. Сервер вернулся к состоянию до установки."
|
||||
if ((left)); then
|
||||
kl_warn "что-то осталось — пришлите этот вывод, поправим список в kit local uninstall"
|
||||
else
|
||||
kl_ok "чисто: от установки не осталось ни файлов, ни служб, порт 443 свободен"
|
||||
fi
|
||||
kl_ok "SSH не тронут (если не указан --reset-ssh)"
|
||||
kl_step "Готово: сервер в состоянии до установки, можно ставить заново"
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------- полная справка `kit help`
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
set -Eeuo pipefail
|
||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||
|
||||
KIT_VERSION="1.2.8"
|
||||
KIT_VERSION="1.2.9"
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
||||
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
||||
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
||||
|
||||
Reference in New Issue
Block a user