Skip to content

Удаление туннеля с устройства

Скрипты dixsu-remove полностью удаляют device_client с устройства: останавливают сервис, убивают процесс, удаляют service-файл. Работают на любой платформе без предварительной настройки.


Быстрый старт

curl -fsSL https://dix.su/downloads/dixsu-remove.sh | SLUG=myslug sh
& ([scriptblock]::Create((irm https://dix.su/downloads/dixsu-remove.ps1))) -Slug myslug

Или скачать и запустить:

Invoke-WebRequest https://dix.su/downloads/dixsu-remove.ps1 -OutFile dixsu-remove.ps1
.\dixsu-remove.ps1 -Slug myslug

Параметры

Параметр sh-скрипт PowerShell Описание
Slug SLUG=myslug или первый аргумент -Slug myslug Обязательный. Имя слага для удаления
Dry-run --dry-run -DryRun Показать что будет сделано, ничего не менять
Удалить бинарник --remove-binary -RemoveBinary Также удалить бинарник device_client

Примеры:

# Показать что произойдёт (без изменений)
SLUG=myslug sh dixsu-remove.sh --dry-run

# Удалить туннель и бинарник
SLUG=myslug sh dixsu-remove.sh --remove-binary
# Windows — dry-run
.\dixsu-remove.ps1 -Slug myslug -DryRun

# Windows — удалить туннель и бинарник
.\dixsu-remove.ps1 -Slug myslug -RemoveBinary

Как работает sh-скрипт

Скрипт написан на POSIX sh (совместим с bash, dash, ash, BusyBox) и работает без внешних зависимостей.

1. Определение платформы и init-системы

uname -s → Linux / Darwin
    ↓
/etc/openwrt_release? → procd (OpenWrt)
rc-service доступен?  → OpenRC (Alpine, PostmarketOS)
systemctl доступен?   → systemd (Debian, Ubuntu, Arch, RPi OS)
uname = Darwin?       → launchd (macOS)

2. Удаление сервиса

В зависимости от init-системы:

Init Действия
systemd systemctl stop/disable device-client-{slug} → удалить .service → daemon-reload
OpenRC rc-service stop → rc-update del → удалить /etc/init.d/device-client-{slug}
procd /etc/init.d/device-client-{slug} stop/disable → удалить скрипт
launchd launchctl unload → удалить ~/Library/LaunchAgents/su.dix.device-client.{slug}.plist

Имя сервиса по умолчанию: device-client-{slug} — именно так его создаёт install.sh.

3. Docker Compose

Если в директории найден .env с COMPOSE_PROFILES=tunnel:

  1. docker stop + docker rm контейнера с device_client {slug} в команде
  2. Убирает tunnel из COMPOSE_PROFILES в .env

4. Kill процесса

Ищет через ps aux | grep "device_client.*{slug}" (и BusyBox-вариант ps). Посылает SIGTERM, через 1 сек — SIGKILL если процесс не завершился.


Как работает PowerShell-скрипт

1. NSSM сервис

Перебирает все сервисы из nssm list и проверяет AppParameters на наличие имени слага. Если найден — nssm stop + nssm remove ... confirm.

2. Windows Service (без NSSM)

Ищет через Get-Service по имени device-client-{slug}, затем через Get-WmiObject Win32_Service по пути бинарника. Stop-Service + sc.exe delete.

3. Scheduled Task

Get-ScheduledTask — проверяет имя задачи и аргументы Actions на совпадение со slugом. Stop-ScheduledTask + Unregister-ScheduledTask -Confirm:$false.

4. Kill процесса

Get-Process по имени device_client*, затем Get-WmiObject Win32_Process для проверки командной строки. Stop-Process -Force.


Что НЕ делает скрипт

  • Не отзывает токен — токен остаётся действующим на сервере dix.su. Отозвать: dix.su → Личный кабинет → «Перевыпустить токен».
  • Не удаляет приложение пользователя — только device_client.
  • Не трогает Docker-контейнеры кроме туннельного (профиль tunnel).

Ручное удаление

Если скрипт не сработал, вот что он делает под капотом:

systemctl stop  device-client-myslug
systemctl disable device-client-myslug
rm /etc/systemd/system/device-client-myslug.service
systemctl daemon-reload
rc-service device-client-myslug stop
rc-update del device-client-myslug
rm /etc/init.d/device-client-myslug
/etc/init.d/device-client-myslug stop
/etc/init.d/device-client-myslug disable
rm /etc/init.d/device-client-myslug
nssm stop   device-client-myslug
nssm remove device-client-myslug confirm
Stop-ScheduledTask      "device-client-myslug"
Unregister-ScheduledTask "device-client-myslug" -Confirm:$false
docker compose --profile tunnel stop tunnel
docker compose --profile tunnel rm -f tunnel
# В .env: убрать tunnel из COMPOSE_PROFILES

Связанные гайды