# 📖 Полная инструкция по установке DVSwitch-Server на Ubuntu 22.04

> **Автор:** ua1zbe  
> **Дата:** Апрель 2026  
> **Сервер:** 192.168.1.34 (Ubuntu 22.04 LTS)

---

## 📋 Оглавление

1. [Введение](#введение)
2. [Требования к системе](#требования-к-системе)
3. [Проблемы при установке и их решения](#проблемы-при-установке-и-их-решения)
4. [Пошаговая установка](#пошаговая-установка)
5. [Настройка веб-дашборда](#настройка-веб-дашборда)
6. [Настройка Android приложения](#настройка-android-приложения)
7. [Конфигурация DVSwitch](#конфигурация-dvswitch)
8. [Управление сервисами](#управление-сервисами)
9. [Диагностика проблем](#диагностика-проблем)

---

## 📌 Введение

**DVSwitch-Server** — это серверное ПО для радиолюбителей, позволяющее подключаться к цифровым сетям (DMR, D-STAR, YSF, NXDN, P25) через IP. Состоит из нескольких компонентов:

| Компонент | Назначение |
|-----------|------------|
| **Analog_Bridge** | Преобразование между аналоговым и цифровым аудио (AMBE/IMBE ↔ PCM) |
| **MMDVM_Bridge** | Мост между различными цифровыми режимами |
| **DVSwitch-Server** | Основной серверный пакет |
| **Web_Proxy** | Веб-интерфейс для передачи аудио |
| **DVSwitch Dashboard** | Веб-дашборд для мониторинга |
| **md380-emu** | Эмулятор AMBE вокодера |

---

## 🖥️ Требования к системе

- **ОС:** Ubuntu 20.04/22.04 LTS или Debian 10/11/12
- **RAM:** Минимум 512 MB (рекомендуется 1 GB)
- **Диск:** 2 GB свободного места
- **Сеть:** Статический IP-адрес
- **Права:** root или sudo доступ

---

## ⚠️ Проблемы при установке и их решения

### Проблема 1: Репозиторий DVSwitch недоступен для Ubuntu 22.04

**Симптомы:**
```bash
wget http://dvswitch.org/buster
./buster
# Ошибка: Distribution is 'bookworm', exiting.
```

**Причина:** Скрипт `buster` проверяет версию ОС и отказывается работать на Ubuntu 22.04 (jammy).

**Решение:** Использовать скрипт `bookworm` вместо `buster`:
```bash
wget http://dvswitch.org/bookworm
chmod +x bookworm
sudo ./bookworm
```

---

### Проблема 2: Конфликт веб-серверов (Apache vs lighttpd)

**Симптомы:**
```bash
Job for apache2.service failed because the control process exited with error code.
(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
```

**Причина:** DVSwitch устанавливает lighttpd, но Apache также пытается занять порт 80.

**Решение:**
```bash
# Остановить Apache
sudo systemctl stop apache2
sudo systemctl disable apache2

# Запустить lighttpd
sudo systemctl restart lighttpd
```

---

### Проблема 3: Dashboard показывает страницу Apache вместо DVSwitch

**Симптомы:** При открытии http://IP-адрес/ показывается "Apache2 Ubuntu Default Page"

**Причина:** DVSwitch Dashboard установлен в `/usr/share/dvswitch/`, но lighttpd настроен на `/var/www/html`.

**Решение:**
```bash
# Изменить конфигурацию lighttpd
sudo sed -i 's|server.document-root.*|server.document-root = "/usr/share/dvswitch/"|' /etc/lighttpd/lighttpd.conf

# Перезапустить lighttpd
sudo systemctl restart lighttpd
```

---

### Проблема 4: Сервисы не запускаются автоматически

**Симптомы:**
```bash
systemctl status analog_bridge
# Active: inactive (dead)
```

**Причина:** Конфигурационные файлы могут содержать ошибки или отсутствовать.

**Решение:**
```bash
# Проверить конфигурацию
cat /opt/Analog_Bridge/Analog_Bridge.ini

# Запустить вручную для проверки
/opt/Analog_Bridge/Analog_Bridge /opt/Analog_Bridge/Analog_Bridge.ini

# Если OK, запустить сервис
sudo systemctl start analog_bridge
sudo systemctl enable analog_bridge
```

---

### Проблема 5: Ошибки при загрузке TGList и YSFHosts

**Симптомы:**
```bash
Error, YSFHosts.txt file does not seem to be valid
Warning, download failure
Error, TGList_TGIF.txt file does not seem to exist
```

**Причина:** Файлы баз данных не загрузились при установке.

**Решение:**
```bash
# Перезапустить сервисы для повторной попытки
sudo systemctl restart mmdvm_bridge

# Или скачать вручную
cd /opt/MMDVM_Bridge
wget https://raw.githubusercontent.com/DVSwitch/YSFGateway/master/YSFHosts.txt
```

---

## 🚀 Пошаговая установка

### Шаг 1: Подготовка системы

```bash
# Обновить систему
sudo apt update && sudo apt upgrade -y

# Установить необходимые пакеты
sudo apt install -y wget curl git net-tools
```

---

### Шаг 2: Добавление репозитория DVSwitch

```bash
# Скачать скрипт репозитория (bookworm для Ubuntu 22.04)
cd ~
wget http://dvswitch.org/bookworm

# Сделать исполняемым
chmod +x bookworm

# Запустить от root
sudo ./bookworm
```

**Ожидаемый вывод:**
```
Starting DVSwitch repository install/correction
Downloading DVSwitch GPG keyring...
Verified: Valid DVSwitch Keyring (72147EC1E788D4C3)
Configuring /etc/apt/sources.list.d/dvswitch.list...
Updating package information...
Finished DVSwitch repository install
```

---

### Шаг 3: Установка DVSwitch-Server

```bash
# Обновить список пакетов
sudo apt update

# Установить DVSwitch-Server с веб-сервером
sudo apt install -y dvswitch-server lighttpd php-cgi
```

**Время установки:** ~5-10 минут  
**Занимаемое место:** ~238 MB

---

### Шаг 4: Исправление конфликта веб-серверов

```bash
# Остановить Apache (если установлен)
sudo systemctl stop apache2
sudo systemctl disable apache2

# Настроить lighttpd для DVSwitch Dashboard
sudo sed -i 's|server.document-root.*|server.document-root = "/usr/share/dvswitch/"|' /etc/lighttpd/lighttpd.conf

# Перезапустить lighttpd
sudo systemctl restart lighttpd
```

---

### Шаг 5: Проверка установки

```bash
# Проверить версию
dvs --version

# Проверить сервисы
sudo systemctl status analog_bridge
sudo systemctl status mmdvm_bridge
sudo systemctl status webproxy

# Проверить веб-дашборд
curl http://localhost/ | grep "DVSwitch Dashboard"
```

---

## 🌐 Настройка веб-дашборда

### Доступ к дашборду

1. Откройте браузер
2. Введите: `http://192.168.1.34/` (замените на ваш IP)
3. Должен открыться **DVSwitch Dashboard**

### Разделы дашборда:

| Раздел | Описание |
|--------|----------|
| **Last Heard** | Последние прослушанные станции |
| **Local RF** | Локальные передачи |
| **System Monitor** | Загрузка CPU, память, температура |
| **Settings** | Текущие настройки сервера |

---

## 📱 Настройка Android приложения

### Шаг 1: Установка DVSwitch Mobile

**Вариант A: Google Play Store**
```
1. Откройте Google Play Store
2. Найдите "DVSwitch Mobile"
3. Установите приложение
```

**Вариант B: APK файл**
```
1. Посетите: https://apkpure.com/dvswitch-mobile/org.dvswitch
2. Скачайте последнюю версию APK
3. Установите на устройство (разрешите установку из неизвестных источников)
```

---

### Шаг 2: Настройка подключения

1. **Откройте DVSwitch Mobile**

2. **Нажмите "Add Connection"**

3. **Заполните параметры:**

   | Параметр | Значение |
   |----------|----------|
   | **Connection Type** | USRP (Analog_Bridge) |
   | **IP Address** | 192.168.1.34 (IP вашего сервера) |
   | **Port** | 31001 |
   | **Username** | (оставьте пустым) |
   | **Password** | (оставьте пустым) |
   | **Caller ID** | Ваш DMR ID |

4. **Нажмите "Save"**

5. **Подключитесь:** Нажмите на созданное подключение

---

### Шаг 3: Проверка подключения

1. Нажмите **PTT** (Push-To-Talk) в приложении
2. Говорите в микрофон
3. Проверьте дашборд — должна появиться активность
4. Проверьте логи сервера:
   ```bash
   sudo journalctl -u analog_bridge -f
   ```

---

## ⚙️ Конфигурация DVSwitch

### Настройка Analog_Bridge

**Файл:** `/opt/Analog_Bridge/Analog_Bridge.ini`

```ini
[GENERAL]
logLevel = 2
exportMetadata = true
transferRootDir = /tmp
subscriberFile = /var/lib/dvswitch/subscriber_ids.csv
decoderFallBack = true
useEmulator = true
emulatorAddress = 127.0.0.1:2470
pcmPort = 2222

[AMBE_AUDIO]
address = 127.0.0.1
txPort = 31103
rxPort = 31100
ambeMode = DMR
minTxTimeMS = 2500
gatewayDmrId = 1234567        ; ← Ваш DMR ID
repeaterID = 123456789        ; ← Ваш ID повторителя
txTg = 9                      ; ← TG по умолчанию
txTs = 2                      ; ← Слот (1 или 2)
colorCode = 1

[USRP]
address = 0.0.0.0             ; ← Слушать все интерфейсы
txPort = 31001                ; ← Порт для DVSwitch Mobile
rxPort = 31001
usrpAudio = AUDIO_USE_GAIN
usrpGain = 1.10
```

---

### Настройка MMDVM_Bridge

**Файл:** `/opt/MMDVM_Bridge/MMDVM_Bridge.ini`

```ini
[General]
Callsign=UA1ZBE
RptAddress=127.0.0.1
RptPort=31103
LocalAddress=127.0.0.1
LocalPort=31100
Debug=0

[DMR Network]
Enable=1
Address=brandmeister.network
Port=62031
Password=ваш_пароль      ; ← Пароль от BrandMeister
Id=1234567                ; ← Ваш DMR ID
```

---

### Настройка для BrandMeister

1. **Получите пароль:**
   - Посетите: https://brandmeister.network/
   - Войдите под своим DMR ID
   - Получите пароль для DVSwitch

2. **Отредактируйте MMDVM_Bridge.ini:**
   ```ini
   [DMR Network]
   Enable=1
   Address=brandmeister.network
   Port=62031
   Password=ваш_пароль_от_BrandMeister
   Id=1234567
   ```

3. **Перезапустите сервисы:**
   ```bash
   sudo systemctl restart mmdvm_bridge
   sudo systemctl restart analog_bridge
   ```

---

## 🔧 Управление сервисами

### Запуск/остановка/перезапуск

```bash
# Analog_Bridge
sudo systemctl start analog_bridge
sudo systemctl stop analog_bridge
sudo systemctl restart analog_bridge

# MMDVM_Bridge
sudo systemctl start mmdvm_bridge
sudo systemctl stop mmdvm_bridge
sudo systemctl restart mmdvm_bridge

# Web_Proxy
sudo systemctl start webproxy
sudo systemctl stop webproxy
sudo systemctl restart webproxy

# Все сервисы сразу
sudo systemctl restart analog_bridge mmdvm_bridge webproxy
```

### Автозапуск при загрузке

```bash
sudo systemctl enable analog_bridge
sudo systemctl enable mmdvm_bridge
sudo systemctl enable webproxy
sudo systemctl enable md380-emu
```

### Просмотр логов

```bash
# В реальном времени
sudo journalctl -u analog_bridge -f
sudo journalctl -u mmdvm_bridge -f

# Последние 50 строк
sudo journalctl -u analog_bridge -n 50

# За сегодня
sudo journalctl -u analog_bridge --since today
```

### Проверка статуса

```bash
# Все сервисы DVSwitch
sudo systemctl list-units --type=service | grep -E "analog|mmdvm|webproxy|dvswitch"

# Детальный статус
sudo systemctl status analog_bridge --no-pager
```

---

## 🐛 Диагностика проблем

### Сервис не запускается

```bash
# Проверить статус
sudo systemctl status analog_bridge

# Проверить логи
sudo journalctl -u analog_bridge -n 100

# Проверить конфигурацию
/opt/Analog_Bridge/Analog_Bridge --check /opt/Analog_Bridge/Analog_Bridge.ini

# Запустить вручную для отладки
/opt/Analog_Bridge/Analog_Bridge /opt/Analog_Bridge/Analog_Bridge.ini
```

---

### Веб-дашборд не открывается

```bash
# Проверить lighttpd
sudo systemctl status lighttpd

# Проверить порт 80
sudo netstat -tlnp | grep :80

# Проверить конфигурацию
cat /etc/lighttpd/lighttpd.conf | grep document-root

# Перезапустить
sudo systemctl restart lighttpd
```

---

### Нет звука при передаче

1. **Проверьте настройки gain в Analog_Bridge.ini:**
   ```ini
   usrpAudio = AUDIO_USE_GAIN
   usrpGain = 1.50    ; Увеличьте значение
   ```

2. **Проверьте логи на ошибки AMBE:**
   ```bash
   sudo journalctl -u analog_bridge | grep -i ambe
   ```

3. **Убедитесь, что md380-emu запущен:**
   ```bash
   sudo systemctl status md380-emu
   ```

---

### Приложение не подключается

1. **Проверьте брандмауэр:**
   ```bash
   sudo ufw status
   sudo ufw allow 31001/udp
   sudo ufw allow 2222/udp
   ```

2. **Проверьте, что порт слушается:**
   ```bash
   sudo netstat -ulnp | grep 31001
   ```

3. **Проверьте IP-адрес в приложении:**
   - Должен совпадать с `hostname -I` на сервере

---

## 📊 Порты и протоколы

| Порт | Протокол | Назначение |
|------|----------|------------|
| 31001 | UDP | USRP (DVSwitch Mobile) |
| 31100 | UDP | MMDVM_Bridge ↔ Analog_Bridge (RX) |
| 31103 | UDP | MMDVM_Bridge ↔ Analog_Bridge (TX) |
| 2222 | UDP | Web_Proxy (аудио поток) |
| 2470 | UDP | md380-emu (AMBE эмулятор) |
| 80 | TCP | Веб-дашборд |

---

## 📝 Полезные команды

```bash
# Проверка версии DVSwitch
dvs --version

# Меню конфигурации (интерактивное)
sudo dvs

# Пересоздать конфигурацию
sudo /usr/local/dvs/init_config.sh

# Обновить базу DMR ID
sudo /usr/local/dvs/tgdb.sh

# Проверка сети
ping -c 4 brandmeister.network

# Мониторинг в реальном времени
watch -n 1 'sudo systemctl status analog_bridge mmdvm_bridge --no-pager'
```

---

## 🔗 Полезные ссылки

- **Официальный сайт:** http://dvswitch.org/
- **GitHub DVSwitch:** https://github.com/DVSwitch
- **DVSwitch Mobile (APK):** https://apkpure.com/dvswitch-mobile/org.dvswitch
- **BrandMeister:** https://brandmeister.network/
- **Форум DVSwitch:** https://dvswitch.groups.io/g/main
- **Wiki DVSwitch Mobile:** https://dvswitch.groups.io/g/Mobile/wiki

---

## 📞 Поддержка

Если возникли проблемы:

1. Проверьте логи: `sudo journalctl -u analog_bridge -f`
2. Проверьте конфигурацию: `cat /opt/Analog_Bridge/Analog_Bridge.ini`
3. Обратитесь на форум: https://dvswitch.groups.io/
4. Проверьте wiki: https://dvswitch.groups.io/g/main/wiki

---

**Версия инструкции:** 1.0  
**Последнее обновление:** Апрель 2026  
**Протестировано на:** Ubuntu 22.04 LTS
