Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28fed0c8a0 | ||
|
|
c27dfbfba7 | ||
|
|
8d55a2629c | ||
|
|
67292b2697 | ||
|
|
491feb04ac |
2
libcore
2
libcore
Submodule libcore updated: 8b6f4d6f20...6dfe63ea76
284
update-server/CODE_SIGNING_WINDOWS.md
Normal file
284
update-server/CODE_SIGNING_WINDOWS.md
Normal file
@@ -0,0 +1,284 @@
|
||||
# Подпись кода для Windows (Code Signing)
|
||||
|
||||
## Зачем нужен сертификат?
|
||||
|
||||
При установке `.exe` файла без цифровой подписи Windows показывает предупреждения:
|
||||
- ⚠️ "Неизвестный издатель"
|
||||
- ⚠️ "Windows защитила ваш компьютер"
|
||||
- ⚠️ Windows Defender может блокировать файл
|
||||
|
||||
**С сертификатом:**
|
||||
- ✅ "Проверенный издатель: Umbrix Team"
|
||||
- ✅ Нет предупреждений SmartScreen
|
||||
- ✅ Пользователи доверяют приложению
|
||||
|
||||
## Текущее состояние (БЕЗ сертификата)
|
||||
|
||||
Приложение **РАБОТАЕТ**, но:
|
||||
1. При установке Windows показывает "Неизвестный издатель"
|
||||
2. Пользователь должен нажать "Все равно запустить"
|
||||
3. Антивирус может блокировать (ложное срабатывание)
|
||||
|
||||
**Для внутреннего использования это НОРМАЛЬНО** ✅
|
||||
|
||||
## Где получить сертификат?
|
||||
|
||||
### 1. Коммерческие сертификаты (EV Code Signing)
|
||||
|
||||
**Recommended:** Extended Validation (EV) - сразу доверие Windows
|
||||
|
||||
| Провайдер | Цена/год | Особенности |
|
||||
|-----------|----------|-------------|
|
||||
| **DigiCert** | $469-799 | Лучшая репутация, EV на USB токене |
|
||||
| **Sectigo (Comodo)** | $399-599 | Популярный, хорошая поддержка |
|
||||
| **GlobalSign** | $349-599 | Быстрое получение (1-2 дня) |
|
||||
| **SSL.com** | $299-499 | Дешевле, но дольше проверка |
|
||||
| **Certum** | €199-399 | Европейский, принимают криптовалюту |
|
||||
|
||||
**EV сертификат (Extended Validation):**
|
||||
- ✅ Сразу доверие Windows SmartScreen
|
||||
- ✅ Зелёная подпись "Проверенный издатель"
|
||||
- ✅ Никаких предупреждений
|
||||
- 📦 Выдается на USB токене (нельзя скопировать)
|
||||
- ⏱️ Проверка документов 3-7 дней
|
||||
|
||||
**Обычный Code Signing (не EV):**
|
||||
- ⚠️ Доверие нарастает со временем (нужно минимум 100-1000 установок)
|
||||
- ⚠️ Первые месяцы будут предупреждения SmartScreen
|
||||
- 💾 Файл .pfx/.p12 (можно хранить локально)
|
||||
- ⏱️ Получение 1-2 дня
|
||||
|
||||
### 2. Требования для получения
|
||||
|
||||
**Документы:**
|
||||
- Регистрация компании (ИНН, ОГРН, выписка из ЕГРЮЛ)
|
||||
- ИЛИ ИП (ОГРНИП)
|
||||
- ИЛИ личность физлица (паспорт, утилиты)
|
||||
|
||||
**Проверка:**
|
||||
- Подтверждение номера телефона
|
||||
- Email компании (домен должен совпадать)
|
||||
- Банковские реквизиты
|
||||
- Адрес офиса (могут позвонить или прислать письмо с кодом)
|
||||
|
||||
### 3. Процесс получения (DigiCert EV пример)
|
||||
|
||||
```
|
||||
1. Заказ → 2-3 минуты (онлайн форма)
|
||||
↓
|
||||
2. Оплата → $799/год
|
||||
↓
|
||||
3. Проверка документов → 3-7 дней
|
||||
- Загрузка ЕГРЮЛ/паспорта
|
||||
- Подтверждение телефона
|
||||
- Проверка адреса
|
||||
↓
|
||||
4. Отправка USB токена → 1-5 дней (DHL/FedEx)
|
||||
↓
|
||||
5. Установка драйверов → 10 минут
|
||||
↓
|
||||
6. Готово! Можно подписывать код
|
||||
```
|
||||
|
||||
## Как подписать файл после получения сертификата
|
||||
|
||||
### С EV сертификатом (USB токен)
|
||||
|
||||
```powershell
|
||||
# 1. Установить Windows SDK (включает signtool.exe)
|
||||
# Скачать: https://developer.microsoft.com/windows/downloads/windows-sdk/
|
||||
|
||||
# 2. Подключить USB токен
|
||||
|
||||
# 3. Подписать EXE
|
||||
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
|
||||
& $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a "umbrix-1.7.3-windows-setup.exe"
|
||||
|
||||
# Результат:
|
||||
# Successfully signed: umbrix-1.7.3-windows-setup.exe
|
||||
```
|
||||
|
||||
### С обычным Code Signing (.pfx файл)
|
||||
|
||||
```powershell
|
||||
# 1. Экспортировать сертификат в .pfx с паролем
|
||||
|
||||
# 2. Подписать EXE
|
||||
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
|
||||
& $signtool sign /f "umbrix-cert.pfx" /p "PASSWORD" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "umbrix-1.7.3-windows-setup.exe"
|
||||
```
|
||||
|
||||
### Проверка подписи
|
||||
|
||||
```powershell
|
||||
# Посмотреть информацию о подписи
|
||||
$signtool verify /pa /v "umbrix-1.7.3-windows-setup.exe"
|
||||
|
||||
# Или через GUI: ПКМ → Свойства → Цифровые подписи
|
||||
```
|
||||
|
||||
## Автоматизация с GitHub Actions
|
||||
|
||||
```yaml
|
||||
name: Build & Sign Windows
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: '3.24.0'
|
||||
|
||||
- name: Build Windows
|
||||
run: flutter build windows --release
|
||||
|
||||
- name: Build Installer
|
||||
run: iscc windows/installer.iss
|
||||
|
||||
# Для EV сертификата - использовать self-hosted runner с USB токеном
|
||||
# Для обычного - загрузить .pfx в GitHub Secrets
|
||||
|
||||
- name: Sign EXE
|
||||
env:
|
||||
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
|
||||
run: |
|
||||
# Импорт .pfx из секрета
|
||||
$cert = [Convert]::FromBase64String("${{ secrets.CERT_BASE64 }}")
|
||||
[IO.File]::WriteAllBytes("cert.pfx", $cert)
|
||||
|
||||
# Подпись
|
||||
$signtool = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
|
||||
& $signtool sign /f cert.pfx /p $env:CERT_PASSWORD /tr http://timestamp.digicert.com /td sha256 /fd sha256 dist/umbrix-1.7.3-windows-setup.exe
|
||||
|
||||
# Удалить временный .pfx
|
||||
Remove-Item cert.pfx
|
||||
|
||||
- name: Upload to Gitea
|
||||
run: |
|
||||
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
|
||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" `
|
||||
--data-binary "@dist/umbrix-1.7.3-windows-setup.exe"
|
||||
```
|
||||
|
||||
## Альтернативы (НЕ рекомендуется)
|
||||
|
||||
### 1. Self-Signed сертификат (для тестирования)
|
||||
|
||||
```powershell
|
||||
# Создать self-signed сертификат
|
||||
$cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Umbrix Team" -CertStoreLocation Cert:\CurrentUser\My
|
||||
|
||||
# Экспортировать
|
||||
$pwd = ConvertTo-SecureString -String "password123" -Force -AsPlainText
|
||||
Export-PfxCertificate -Cert $cert -FilePath umbrix-selfsigned.pfx -Password $pwd
|
||||
|
||||
# Подписать
|
||||
signtool sign /f umbrix-selfsigned.pfx /p password123 /fd sha256 umbrix-1.7.3.exe
|
||||
```
|
||||
|
||||
**⚠️ Проблемы:**
|
||||
- Windows все равно показывает предупреждение
|
||||
- Нужно вручную добавлять сертификат в доверенные
|
||||
- НЕ работает на других компьютерах
|
||||
- Только для внутреннего тестирования
|
||||
|
||||
### 2. Open Source Certificate (StartSSL, Let's Encrypt)
|
||||
|
||||
❌ **Не работает для Code Signing!**
|
||||
- Let's Encrypt выдает только SSL/TLS (для HTTPS)
|
||||
- Code Signing требует проверку юрлица
|
||||
- Нет бесплатных Code Signing сертификатов
|
||||
|
||||
### 3. Использование osslsigncode (Linux подпись Windows файлов)
|
||||
|
||||
```bash
|
||||
# Установка на Linux
|
||||
sudo apt install osslsigncode
|
||||
|
||||
# Подпись (с .pfx сертификатом)
|
||||
osslsigncode sign \
|
||||
-pkcs12 umbrix-cert.pfx \
|
||||
-pass "PASSWORD" \
|
||||
-ts http://timestamp.digicert.com \
|
||||
-in umbrix-1.7.3-windows-setup.exe \
|
||||
-out umbrix-1.7.3-windows-setup-signed.exe
|
||||
```
|
||||
|
||||
## Рекомендации для Umbrix
|
||||
|
||||
### Для разработки и тестирования (СЕЙЧАС):
|
||||
✅ **Без сертификата** - просто предупреждение Windows
|
||||
- Пользователи могут нажать "Все равно запустить"
|
||||
- Работает для внутреннего использования
|
||||
- Бесплатно
|
||||
|
||||
### Для публичного релиза (БУДУЩЕЕ):
|
||||
✅ **DigiCert EV Code Signing** ($799/год)
|
||||
- Сразу доверие Windows
|
||||
- Нет предупреждений
|
||||
- Профессиональный вид
|
||||
- Рекомендуется для коммерческого продукта
|
||||
|
||||
### Для малого бюджета:
|
||||
✅ **Certum Open Source Code Signing** (€199/год)
|
||||
- Дешевле других
|
||||
- Принимают криптовалюту
|
||||
- Специальная цена для Open Source проектов
|
||||
- Требуют ссылку на GitHub/GitLab
|
||||
|
||||
## Ссылки
|
||||
|
||||
**Покупка сертификатов:**
|
||||
- DigiCert: https://www.digicert.com/signing/code-signing-certificates
|
||||
- Sectigo: https://sectigo.com/ssl-certificates-tls/code-signing
|
||||
- GlobalSign: https://www.globalsign.com/en/code-signing-certificate
|
||||
- SSL.com: https://www.ssl.com/certificates/code-signing/
|
||||
- Certum: https://en.sklep.certum.pl/data-safety/code-signing-certificates/
|
||||
|
||||
**Документация:**
|
||||
- Microsoft Code Signing: https://learn.microsoft.com/windows/win32/seccrypto/cryptography-tools
|
||||
- signtool.exe: https://learn.microsoft.com/windows-hardware/drivers/devtest/signtool
|
||||
|
||||
**Проверка репутации SmartScreen:**
|
||||
- https://www.microsoft.com/en-us/wdsi/filesubmission
|
||||
|
||||
## FAQ
|
||||
|
||||
**Q: Можно ли работать без сертификата?**
|
||||
A: Да! Приложение будет работать, но Windows покажет предупреждение "Неизвестный издатель". Для личного/внутреннего использования это OK.
|
||||
|
||||
**Q: Как быстро получить доверие SmartScreen с обычным сертификатом?**
|
||||
A: Нужно минимум 100-1000 установок за 2-3 месяца. EV сертификат дает доверие сразу.
|
||||
|
||||
**Q: Можно ли использовать сертификат на Linux для подписи Windows файлов?**
|
||||
A: Да, через `osslsigncode`. Но EV сертификаты на USB токене работают только на Windows.
|
||||
|
||||
**Q: Что дешевле - EV или обычный Code Signing?**
|
||||
A: Обычный дешевле ($299 vs $799), но нужно ждать наработки репутации. EV дороже, но доверие сразу.
|
||||
|
||||
**Q: Сертификат для Umbrix - обязателен?**
|
||||
A: Для закрытого тестирования - НЕТ. Для публичного релиза - ОЧЕНЬ ЖЕЛАТЕЛЬНО.
|
||||
|
||||
## Итого
|
||||
|
||||
**Текущая конфигурация обновлений:**
|
||||
- ✅ Файл: `.exe` установщик (Inno Setup)
|
||||
- ✅ Приоритет поиска: x64 → amd64 → win64 → setup → installer → любой .exe
|
||||
- ✅ Установка: PowerShell с `/VERYSILENT /SUPPRESSMSGBOXES /NORESTART`
|
||||
- ✅ Автоперезагрузка: через 2 секунды
|
||||
- ⚠️ Сертификат: НЕТ (показывает предупреждение, но работает)
|
||||
|
||||
**Следующие шаги:**
|
||||
1. Собрать Windows версию на машине с Windows
|
||||
2. Создать Inno Setup установщик
|
||||
3. Загрузить в Gitea релиз
|
||||
4. Протестировать автообновление
|
||||
5. (Опционально) Купить сертификат для публичного релиза
|
||||
110
update-server/WINDOWS_BUILD_CHEATSHEET.md
Normal file
110
update-server/WINDOWS_BUILD_CHEATSHEET.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# Windows Build Cheat Sheet
|
||||
|
||||
## 🚀 Быстрая сборка (на Windows машине)
|
||||
|
||||
```powershell
|
||||
# 1. Клонировать репозиторий
|
||||
git clone --recursive https://update.umbrix.net/vodorod/umbrix.git
|
||||
cd umbrix
|
||||
|
||||
# 2. Скачать и заменить libcore.dll
|
||||
curl -L -o libcore.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
|
||||
tar -xzf libcore.tar.gz
|
||||
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
|
||||
|
||||
# 3. Установить flutter_distributor (один раз)
|
||||
dart pub global activate flutter_distributor
|
||||
|
||||
# 4. СОБРАТЬ УСТАНОВЩИК
|
||||
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
|
||||
|
||||
# ✅ Результат: dist\1.7.3+173\umbrix-setup-x64.exe (~60MB)
|
||||
```
|
||||
|
||||
## 📦 Что получается?
|
||||
|
||||
**Один .exe файл** который содержит:
|
||||
- umbrix.exe (основное приложение)
|
||||
- Flutter runtime
|
||||
- libcore.dll (45MB VPN ядро)
|
||||
- WebUI
|
||||
- Все зависимости
|
||||
- Установщик Inno Setup
|
||||
|
||||
## 📤 Загрузка в Gitea
|
||||
|
||||
```powershell
|
||||
# Переименовать для релиза
|
||||
$version = "1.7.3"
|
||||
$file = "dist\$version+173\umbrix-setup-x64.exe"
|
||||
$newName = "umbrix-$version-windows-setup-x64.exe"
|
||||
Copy-Item $file $newName
|
||||
|
||||
# Загрузить
|
||||
$token = "YOUR_GITEA_TOKEN"
|
||||
$releaseId = 1
|
||||
|
||||
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$newName" `
|
||||
-H "Authorization: token $token" `
|
||||
-H "Content-Type: application/octet-stream" `
|
||||
--data-binary "@$newName"
|
||||
```
|
||||
|
||||
## ✅ Тестирование автообновлений
|
||||
|
||||
```powershell
|
||||
# 1. Установить старую версию (например 1.7.0)
|
||||
.\umbrix-1.7.0-windows-setup-x64.exe
|
||||
|
||||
# 2. Запустить приложение
|
||||
# Через 5 секунд появится уведомление об обновлении
|
||||
|
||||
# 3. Нажать "Обновить"
|
||||
# Автоматически скачается, установится, перезапустится
|
||||
|
||||
# 4. Проверить версию
|
||||
# Должна быть 1.7.3
|
||||
```
|
||||
|
||||
## 🔧 Требования
|
||||
|
||||
- Windows 10/11
|
||||
- Flutter 3.24.0+
|
||||
- Visual Studio 2022 с C++
|
||||
- Inno Setup 6.x+ (https://jrsoftware.org/isdl.php)
|
||||
|
||||
## 📚 Документация
|
||||
|
||||
- **Полная инструкция:** [WINDOWS_DISTRIBUTOR_BUILD.md](WINDOWS_DISTRIBUTOR_BUILD.md)
|
||||
- **Подпись кода:** [CODE_SIGNING_WINDOWS.md](CODE_SIGNING_WINDOWS.md)
|
||||
- **Ручная сборка:** [WINDOWS_BUILD_INSTRUCTIONS.md](WINDOWS_BUILD_INSTRUCTIONS.md)
|
||||
|
||||
## ⚠️ Частые ошибки
|
||||
|
||||
**"Failed to lookup symbol 'changeHiddifyOptions'"**
|
||||
→ Используйте libcore.dll из umbrix-libcore, НЕ из оригинального Hiddify
|
||||
|
||||
**"Inno Setup not found"**
|
||||
→ Установите Inno Setup и добавьте в PATH
|
||||
|
||||
**"flutter_distributor command not found"**
|
||||
→ `dart pub global activate flutter_distributor`
|
||||
→ Добавьте `C:\Users\YOUR_NAME\AppData\Local\Pub\Cache\bin` в PATH
|
||||
|
||||
## 💡 Сертификат кода
|
||||
|
||||
**Не обязателен для работы!**
|
||||
- Без сертификата: Windows показывает предупреждение, но приложение работает
|
||||
- С сертификатом: Нет предупреждений, "Проверенный издатель"
|
||||
- Цена: $299-799/год (DigiCert, Sectigo, Certum)
|
||||
- Подробности: [CODE_SIGNING_WINDOWS.md](CODE_SIGNING_WINDOWS.md)
|
||||
|
||||
## 🎯 Итого
|
||||
|
||||
**Одна команда → Один .exe файл → Готово к релизу**
|
||||
|
||||
```powershell
|
||||
dart run flutter_distributor package --platform windows --targets exe
|
||||
```
|
||||
|
||||
Всё остальное делается автоматически! 🚀
|
||||
@@ -1,5 +1,28 @@
|
||||
# Windows Build & Update Instructions
|
||||
|
||||
## ⚡ РЕКОМЕНДУЕТСЯ: flutter_distributor (автоматическая упаковка)
|
||||
|
||||
**Используйте [WINDOWS_DISTRIBUTOR_BUILD.md](WINDOWS_DISTRIBUTOR_BUILD.md)** для автоматической сборки через flutter_distributor.
|
||||
|
||||
Преимущества:
|
||||
- ✅ **Один .exe файл** вместо папки с множеством файлов
|
||||
- ✅ Автоматическая упаковка через Inno Setup
|
||||
- ✅ Та же команда, что для Linux (deb/rpm/appimage)
|
||||
- ✅ Готовый конфиг уже настроен в `windows/packaging/exe/`
|
||||
|
||||
**Команда:**
|
||||
```powershell
|
||||
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
|
||||
```
|
||||
|
||||
**Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` (~60MB) - готов к загрузке!
|
||||
|
||||
---
|
||||
|
||||
## Альтернатива: Ручная сборка через Inno Setup
|
||||
|
||||
Используйте этот метод только если flutter_distributor не работает.
|
||||
|
||||
## Система автообновлений для Windows
|
||||
|
||||
### Требования для Windows EXE сборки
|
||||
|
||||
271
update-server/WINDOWS_DISTRIBUTOR_BUILD.md
Normal file
271
update-server/WINDOWS_DISTRIBUTOR_BUILD.md
Normal file
@@ -0,0 +1,271 @@
|
||||
# Сборка Windows установщика через flutter_distributor
|
||||
|
||||
## ✅ РЕШЕНИЕ: Один .exe файл со всеми зависимостями
|
||||
|
||||
Hiddify использует **flutter_distributor** с **target: exe**, который:
|
||||
1. Собирает Flutter приложение
|
||||
2. Упаковывает ВСЕ файлы (exe + dll + data + libcore.dll)
|
||||
3. Создает **Inno Setup** установщик
|
||||
4. Результат: **ОДИН .exe файл** (~50-60MB)
|
||||
|
||||
## Требования
|
||||
|
||||
1. **Windows машина** (или VM)
|
||||
2. **Flutter SDK** 3.24.0+
|
||||
3. **Visual Studio 2022** с C++ компонентами
|
||||
4. **Inno Setup** 6.x+ (скачать: https://jrsoftware.org/isdl.php)
|
||||
|
||||
## Шаг 1: Клонирование репозитория на Windows
|
||||
|
||||
```powershell
|
||||
# Клонировать с Gitea
|
||||
git clone --recursive https://update.umbrix.net/vodorod/umbrix.git
|
||||
cd umbrix
|
||||
|
||||
# Или обновить submodules если уже клонировано
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
## Шаг 2: Замена libcore.dll
|
||||
|
||||
```powershell
|
||||
# Скачать libcore с Gitea
|
||||
curl -L -o libcore-windows.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
|
||||
|
||||
# Распаковать
|
||||
tar -xzf libcore-windows.tar.gz
|
||||
|
||||
# Заменить в проекте
|
||||
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
|
||||
Copy-Item HiddifyCli.exe -Destination libcore\bin\HiddifyCli.exe -Force
|
||||
Copy-Item -Path webui -Destination libcore\bin\ -Recurse -Force
|
||||
```
|
||||
|
||||
## Шаг 3: Установка flutter_distributor
|
||||
|
||||
```powershell
|
||||
# Активировать плагин
|
||||
dart pub global activate flutter_distributor
|
||||
|
||||
# Добавить в PATH (если еще нет)
|
||||
# C:\Users\YOUR_USERNAME\AppData\Local\Pub\Cache\bin
|
||||
```
|
||||
|
||||
## Шаг 4: Сборка установщика
|
||||
|
||||
```powershell
|
||||
# Собрать Windows .exe установщик
|
||||
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
|
||||
|
||||
# Процесс:
|
||||
# 1. flutter build windows --release (5-10 минут)
|
||||
# 2. Копирование файлов в temp директорию
|
||||
# 3. Запуск Inno Setup для создания установщика (1-2 минуты)
|
||||
# 4. Результат: dist\1.7.3+173\umbrix-setup-x64.exe (~50-60MB)
|
||||
```
|
||||
|
||||
## Что происходит внутри?
|
||||
|
||||
### 1. Flutter Build
|
||||
```
|
||||
build/windows/x64/runner/Release/
|
||||
├── umbrix.exe (основной исполняемый файл)
|
||||
├── data/ (ресурсы Flutter)
|
||||
│ ├── app.so
|
||||
│ ├── icudtl.dat
|
||||
│ └── flutter_assets/
|
||||
├── flutter_windows.dll (Flutter engine)
|
||||
├── libcore.dll (VPN ядро, 45MB)
|
||||
└── другие .dll
|
||||
```
|
||||
|
||||
### 2. Inno Setup упаковывает
|
||||
- Все файлы из `build/windows/x64/runner/Release/`
|
||||
- Создает установщик с GUI на русском/английском
|
||||
- Добавляет ярлыки (рабочий стол + меню Пуск)
|
||||
- Регистрирует в "Установка и удаление программ"
|
||||
- Поддерживает тихую установку `/VERYSILENT`
|
||||
|
||||
### 3. Результат
|
||||
```
|
||||
dist/1.7.3+173/umbrix-setup-x64.exe (~50-60MB)
|
||||
```
|
||||
|
||||
**Этот файл содержит ВСЁ:**
|
||||
- umbrix.exe
|
||||
- Flutter runtime
|
||||
- libcore.dll (45MB)
|
||||
- WebUI
|
||||
- Все зависимости
|
||||
|
||||
## Шаг 5: Тестирование
|
||||
|
||||
```powershell
|
||||
# Запустить установщик
|
||||
.\dist\1.7.3+173\umbrix-setup-x64.exe
|
||||
|
||||
# Или тихая установка (для тестирования автообновлений)
|
||||
.\umbrix-setup-x64.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
|
||||
|
||||
# Проверить установку
|
||||
dir "C:\Program Files\Umbrix"
|
||||
```
|
||||
|
||||
## Шаг 6: Загрузка в Gitea
|
||||
|
||||
```powershell
|
||||
# Переименовать для релиза
|
||||
$version = "1.7.3"
|
||||
$file = "dist\$version+173\umbrix-setup-x64.exe"
|
||||
$newName = "umbrix-$version-windows-setup-x64.exe"
|
||||
Copy-Item $file $newName
|
||||
|
||||
# Загрузить через API
|
||||
$token = "YOUR_GITEA_TOKEN"
|
||||
$releaseId = 1 # ID релиза v1.7.3
|
||||
|
||||
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/$releaseId/assets?name=$newName" `
|
||||
-H "Authorization: token $token" `
|
||||
-H "Content-Type: application/octet-stream" `
|
||||
--data-binary "@$newName"
|
||||
```
|
||||
|
||||
## Автоматизация (GitHub Actions)
|
||||
|
||||
Создайте `.github/workflows/build-windows.yml`:
|
||||
|
||||
```yaml
|
||||
name: Build Windows
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
flutter-version: '3.24.0'
|
||||
|
||||
- name: Download libcore
|
||||
run: |
|
||||
curl -L -o libcore.tar.gz "https://update.umbrix.net/vodorod/umbrix-libcore/releases/download/v1.7.0-umbrix/libcore-windows-amd64-umbrix.tar.gz"
|
||||
tar -xzf libcore.tar.gz
|
||||
Copy-Item libcore.dll -Destination libcore\bin\libcore.dll -Force
|
||||
|
||||
- name: Install flutter_distributor
|
||||
run: dart pub global activate flutter_distributor
|
||||
|
||||
- name: Build Windows EXE
|
||||
run: dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
|
||||
|
||||
- name: Upload to Gitea
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
run: |
|
||||
$file = Get-ChildItem dist\*\umbrix-setup-x64.exe | Select-Object -First 1
|
||||
curl -X POST "https://update.umbrix.net/api/v1/repos/vodorod/umbrix/releases/assets" `
|
||||
-H "Authorization: token $env:GITEA_TOKEN" `
|
||||
--data-binary "@$($file.FullName)"
|
||||
```
|
||||
|
||||
## Конфигурация (уже настроено)
|
||||
|
||||
**windows/packaging/exe/make_config.yaml:**
|
||||
```yaml
|
||||
app_id: 7U904649-52C2-5607-H590-CK880G32B76E
|
||||
publisher: Umbrix Team
|
||||
publisher_url: https://umbrix.net
|
||||
display_name: Umbrix
|
||||
executable_name: umbrix.exe
|
||||
output_base_file_name: umbrix-setup-x64.exe
|
||||
create_desktop_icon: true
|
||||
install_dir_name: "{autopf64}\\Umbrix"
|
||||
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
|
||||
locales:
|
||||
- en
|
||||
- ru
|
||||
```
|
||||
|
||||
**windows/packaging/exe/inno_setup.sas:**
|
||||
- Шаблон Inno Setup с поддержкой тихой установки
|
||||
- Автоматически закрывает старую версию перед установкой
|
||||
- Создает ярлыки на рабочем столе и в меню Пуск
|
||||
|
||||
## Альтернатива: Ручная сборка через Inno Setup
|
||||
|
||||
Если flutter_distributor не работает:
|
||||
|
||||
```powershell
|
||||
# 1. Собрать Flutter
|
||||
flutter build windows --release
|
||||
|
||||
# 2. Создать installer.iss (см. WINDOWS_BUILD_INSTRUCTIONS.md)
|
||||
|
||||
# 3. Скомпилировать через Inno Setup GUI
|
||||
# Или через командную строку:
|
||||
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Ошибка: "Inno Setup not found"**
|
||||
```powershell
|
||||
# Установить Inno Setup
|
||||
# Добавить в PATH: C:\Program Files (x86)\Inno Setup 6
|
||||
```
|
||||
|
||||
**Ошибка: "flutter_distributor command not found"**
|
||||
```powershell
|
||||
# Переустановить
|
||||
dart pub global activate flutter_distributor
|
||||
|
||||
# Проверить PATH
|
||||
echo $env:PATH | Select-String "Pub\\Cache\\bin"
|
||||
```
|
||||
|
||||
**Ошибка: "Failed to lookup symbol 'changeHiddifyOptions'"**
|
||||
```powershell
|
||||
# Убедитесь, что используете libcore.dll из umbrix-libcore репозитория
|
||||
# НЕ используйте оригинальный Hiddify libcore!
|
||||
```
|
||||
|
||||
**Большой размер файла (~60MB)**
|
||||
- Это нормально! Включает:
|
||||
- Flutter runtime (~10MB)
|
||||
- libcore.dll (45MB)
|
||||
- WebUI (~600KB)
|
||||
- Инсталлятор Inno Setup (~5MB)
|
||||
|
||||
## Сравнение с Linux сборкой
|
||||
|
||||
| Платформа | Команда | Результат | Размер |
|
||||
|-----------|---------|-----------|--------|
|
||||
| **Linux** | `dart run flutter_distributor package --platform linux --targets deb` | umbrix-1.7.3-linux.deb | 29MB |
|
||||
| **Windows** | `dart run flutter_distributor package --platform windows --targets exe` | umbrix-setup-x64.exe | 60MB |
|
||||
|
||||
**Почему Windows больше?**
|
||||
- libcore.dll (45MB) vs libcore.so (45MB) - одинаково
|
||||
- Inno Setup упаковщик добавляет ~5MB
|
||||
- Windows DLL зависимости больше чем Linux .so
|
||||
|
||||
## Итого
|
||||
|
||||
✅ **flutter_distributor решает все проблемы:**
|
||||
- Один .exe файл вместо папки с множеством файлов
|
||||
- Автоматическая упаковка через Inno Setup
|
||||
- Поддержка тихой установки `/VERYSILENT`
|
||||
- Совместимость с системой автообновлений
|
||||
- Та же команда, что и для Linux (deb/rpm/appimage)
|
||||
|
||||
🎯 **На Windows машине выполнить одну команду:**
|
||||
```powershell
|
||||
dart run flutter_distributor:main package --platform windows --targets exe --skip-clean
|
||||
```
|
||||
|
||||
**Результат:** `dist/1.7.3+173/umbrix-setup-x64.exe` - готов к загрузке в Gitea!
|
||||
@@ -68,8 +68,8 @@ function InitializeSetup(): Boolean;
|
||||
var
|
||||
ResultCode: Integer;
|
||||
begin
|
||||
Exec('taskkill', '/F /IM hiddify.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Exec('net', 'stop "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Exec('sc.exe', 'delete "HiddifyTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Exec('taskkill', '/F /IM umbrix.exe', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Exec('net', 'stop "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Exec('sc.exe', 'delete "UmbrixTunnelService"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
|
||||
Result := True;
|
||||
end;
|
||||
@@ -1,17 +1,13 @@
|
||||
app_id: 6L903538-42B1-4596-G479-BJ779F21A65D
|
||||
publisher: Hiddify
|
||||
publisher_url: https://github.com/hiddify/hiddify-next
|
||||
display_name: Hiddify
|
||||
executable_name: Hiddify.exe
|
||||
output_base_file_name: Hiddify.exe
|
||||
app_id: 7U904649-52C2-5607-H590-CK880G32B76E
|
||||
publisher: Umbrix Team
|
||||
publisher_url: https://umbrix.net
|
||||
display_name: Umbrix
|
||||
executable_name: umbrix.exe
|
||||
output_base_file_name: umbrix-setup-x64.exe
|
||||
create_desktop_icon: true
|
||||
install_dir_name: "{autopf64}\\Hiddify"
|
||||
install_dir_name: "{autopf64}\\Umbrix"
|
||||
setup_icon_file: ..\..\windows\runner\resources\app_icon.ico
|
||||
locales:
|
||||
- ar
|
||||
- en
|
||||
- fa
|
||||
- ru
|
||||
- pt
|
||||
- tr
|
||||
script_template: inno_setup.sas
|
||||
|
||||
Reference in New Issue
Block a user