feat(gui): add GUI (Test) implementation with documentation and admin support
- Add GUI (Test) module with Fyne-based interface (internal/gui/gui.go, internal/gui/server.go) - Add CLI monitoring capability (internal/cli/monitor.go) - Add main_cli.go entry point for CLI-only builds - Add comprehensive documentation suite covering setup, build, quick start, and changelog - Add admin manifest (admin.manifest) for Windows UAC elevation support - Add rsrc.syso.json configuration for resource embedding - Update .gitignore to exclude build scripts (*.bat, *.sh) - Update main.go and cli.go to support dual GUI (Test)/CLI modes - Update README.md with new project information - Enables users to build and run both GUI (Test)and CLI versions with proper admin privileges on Windows
This commit is contained in:
392
Markdown/BUILD_INSTRUCTIONS.md
Normal file
392
Markdown/BUILD_INSTRUCTIONS.md
Normal file
@@ -0,0 +1,392 @@
|
||||
# Инструкции по сборке VPN Client GUI
|
||||
|
||||
## Требования
|
||||
|
||||
### Общие
|
||||
- Go 1.21 или выше
|
||||
- Git (для клонирования репозитория)
|
||||
- Интернет соединение (для загрузки зависимостей)
|
||||
|
||||
### Windows
|
||||
- Windows 10 или выше
|
||||
- MinGW-w64 или TDM-GCC (для компиляции C кода Fyne)
|
||||
- Или используйте готовые бинарники
|
||||
|
||||
### Linux
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get install gcc libgl1-mesa-dev xorg-dev
|
||||
|
||||
# Fedora
|
||||
sudo dnf install gcc mesa-libGL-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libXxf86vm-devel
|
||||
|
||||
# Arch
|
||||
sudo pacman -S go gcc libxcursor libxrandr libxinerama libxi
|
||||
```
|
||||
|
||||
### macOS
|
||||
```bash
|
||||
# Установите Xcode Command Line Tools
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
## Быстрая сборка
|
||||
|
||||
### Windows
|
||||
|
||||
```bash
|
||||
# 1. Инициализация (первый раз)
|
||||
init_gui.bat
|
||||
|
||||
# 2. Сборка
|
||||
build_gui.bat
|
||||
|
||||
# Результат: vpn-client-gui.exe
|
||||
```
|
||||
|
||||
### Linux/macOS
|
||||
|
||||
```bash
|
||||
# 1. Сделайте скрипты исполняемыми
|
||||
chmod +x init_gui.sh build_gui.sh
|
||||
|
||||
# 2. Инициализация (первый раз)
|
||||
./init_gui.sh
|
||||
|
||||
# 3. Сборка
|
||||
./build_gui.sh
|
||||
|
||||
# Результат: vpn-client-gui
|
||||
```
|
||||
|
||||
## Ручная сборка
|
||||
|
||||
### Шаг 1: Установка зависимостей
|
||||
|
||||
```bash
|
||||
cd vpn_client_go
|
||||
go mod download
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
### Шаг 2: Сборка
|
||||
|
||||
**Windows (с GUI):**
|
||||
```bash
|
||||
go build -ldflags="-s -w -H windowsgui" -o vpn-client-gui.exe main.go
|
||||
```
|
||||
|
||||
**Windows (с консолью для отладки):**
|
||||
```bash
|
||||
go build -ldflags="-s -w" -o vpn-client-gui.exe main.go
|
||||
```
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
go build -ldflags="-s -w" -o vpn-client-gui main.go
|
||||
```
|
||||
|
||||
**macOS:**
|
||||
```bash
|
||||
go build -ldflags="-s -w" -o vpn-client-gui main.go
|
||||
|
||||
# Для создания .app bundle
|
||||
mkdir -p VPNClient.app/Contents/MacOS
|
||||
cp vpn-client-gui VPNClient.app/Contents/MacOS/
|
||||
```
|
||||
|
||||
## Оптимизация размера
|
||||
|
||||
### Минимальный размер
|
||||
|
||||
```bash
|
||||
# Используйте UPX для сжатия (опционально)
|
||||
# Скачайте UPX: https://upx.github.io/
|
||||
|
||||
# Windows
|
||||
upx --best --lzma vpn-client-gui.exe
|
||||
|
||||
# Linux/macOS
|
||||
upx --best --lzma vpn-client-gui
|
||||
```
|
||||
|
||||
### Результаты сжатия
|
||||
- Без UPX: ~25-30 MB
|
||||
- С UPX: ~10-12 MB
|
||||
|
||||
## Кросс-компиляция
|
||||
|
||||
### Из Linux в Windows
|
||||
|
||||
```bash
|
||||
# Установите MinGW
|
||||
sudo apt-get install gcc-mingw-w64
|
||||
|
||||
# Сборка
|
||||
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 \
|
||||
go build -ldflags="-s -w -H windowsgui" -o vpn-client-gui.exe main.go
|
||||
```
|
||||
|
||||
### Из macOS в Linux
|
||||
|
||||
```bash
|
||||
# Установите кросс-компилятор
|
||||
brew install FiloSottile/musl-cross/musl-cross
|
||||
|
||||
# Сборка
|
||||
CGO_ENABLED=1 CC=x86_64-linux-musl-gcc GOOS=linux GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" -o vpn-client-gui main.go
|
||||
```
|
||||
|
||||
## Сборка только CLI
|
||||
|
||||
Если вам нужна только CLI версия без GUI:
|
||||
|
||||
```bash
|
||||
# Используйте старые скрипты
|
||||
# Windows
|
||||
build.bat
|
||||
|
||||
# Linux/macOS
|
||||
./build.sh
|
||||
```
|
||||
|
||||
Или вручную:
|
||||
```bash
|
||||
go build -ldflags="-s -w" -tags cli -o vpn-client main.go
|
||||
```
|
||||
|
||||
## Проверка сборки
|
||||
|
||||
### Тест запуска
|
||||
|
||||
```bash
|
||||
# GUI режим
|
||||
./vpn-client-gui
|
||||
|
||||
# CLI режим
|
||||
./vpn-client-gui --cli
|
||||
```
|
||||
|
||||
### Проверка зависимостей
|
||||
|
||||
```bash
|
||||
# Список зависимостей
|
||||
go list -m all
|
||||
|
||||
# Проверка на уязвимости
|
||||
go list -json -m all | nancy sleuth
|
||||
```
|
||||
|
||||
### Проверка размера
|
||||
|
||||
```bash
|
||||
# Windows
|
||||
dir vpn-client-gui.exe
|
||||
|
||||
# Linux/macOS
|
||||
ls -lh vpn-client-gui
|
||||
```
|
||||
|
||||
## Отладка проблем сборки
|
||||
|
||||
### Ошибка: "gcc not found"
|
||||
|
||||
**Windows:**
|
||||
- Установите MinGW-w64: https://www.mingw-w64.org/
|
||||
- Или TDM-GCC: https://jmeubank.github.io/tdm-gcc/
|
||||
- Добавьте в PATH
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
sudo apt-get install build-essential
|
||||
```
|
||||
|
||||
**macOS:**
|
||||
```bash
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
### Ошибка: "package fyne.io/fyne/v2 not found"
|
||||
|
||||
```bash
|
||||
go clean -modcache
|
||||
go mod download
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
### Ошибка: "undefined reference to..."
|
||||
|
||||
Это проблема с CGO. Убедитесь, что:
|
||||
1. Установлен GCC
|
||||
2. CGO_ENABLED=1 (по умолчанию)
|
||||
3. Установлены системные библиотеки (см. Требования)
|
||||
|
||||
### Ошибка при запуске: "cannot open display"
|
||||
|
||||
Это означает, что нет графической среды. Используйте CLI режим:
|
||||
```bash
|
||||
./vpn-client-gui --cli
|
||||
```
|
||||
|
||||
## Создание установщика
|
||||
|
||||
### Windows (NSIS)
|
||||
|
||||
1. Установите NSIS: https://nsis.sourceforge.io/
|
||||
2. Создайте installer.nsi:
|
||||
|
||||
```nsis
|
||||
!define APP_NAME "VPN Client"
|
||||
!define APP_VERSION "2.0.0"
|
||||
|
||||
Name "${APP_NAME}"
|
||||
OutFile "vpn-client-installer.exe"
|
||||
InstallDir "$PROGRAMFILES\${APP_NAME}"
|
||||
|
||||
Section "Install"
|
||||
SetOutPath $INSTDIR
|
||||
File "vpn-client-gui.exe"
|
||||
File /r "xray"
|
||||
CreateShortcut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\vpn-client-gui.exe"
|
||||
SectionEnd
|
||||
```
|
||||
|
||||
3. Соберите:
|
||||
```bash
|
||||
makensis installer.nsi
|
||||
```
|
||||
|
||||
### Linux (DEB пакет)
|
||||
|
||||
```bash
|
||||
# Создайте структуру
|
||||
mkdir -p vpn-client_2.0.0/DEBIAN
|
||||
mkdir -p vpn-client_2.0.0/usr/bin
|
||||
mkdir -p vpn-client_2.0.0/usr/share/applications
|
||||
|
||||
# Скопируйте файлы
|
||||
cp vpn-client-gui vpn-client_2.0.0/usr/bin/
|
||||
|
||||
# Создайте control файл
|
||||
cat > vpn-client_2.0.0/DEBIAN/control << EOF
|
||||
Package: vpn-client
|
||||
Version: 2.0.0
|
||||
Architecture: amd64
|
||||
Maintainer: Your Name <your@email.com>
|
||||
Description: VPN Client with GUI
|
||||
EOF
|
||||
|
||||
# Соберите пакет
|
||||
dpkg-deb --build vpn-client_2.0.0
|
||||
```
|
||||
|
||||
### macOS (DMG)
|
||||
|
||||
```bash
|
||||
# Создайте .app bundle
|
||||
mkdir -p VPNClient.app/Contents/MacOS
|
||||
mkdir -p VPNClient.app/Contents/Resources
|
||||
|
||||
cp vpn-client-gui VPNClient.app/Contents/MacOS/
|
||||
|
||||
# Создайте Info.plist
|
||||
cat > VPNClient.app/Contents/Info.plist << EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>vpn-client-gui</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>VPN Client</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.0.0</string>
|
||||
</dict>
|
||||
</plist>
|
||||
EOF
|
||||
|
||||
# Создайте DMG
|
||||
hdiutil create -volname "VPN Client" -srcfolder VPNClient.app -ov -format UDZO vpn-client.dmg
|
||||
```
|
||||
|
||||
## CI/CD
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
Создайте `.github/workflows/build.yml`:
|
||||
|
||||
```yaml
|
||||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.21'
|
||||
|
||||
- name: Install dependencies (Linux)
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y gcc libgl1-mesa-dev xorg-dev
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cd vpn_client_go
|
||||
go mod download
|
||||
go build -ldflags="-s -w" -o vpn-client-gui main.go
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: vpn-client-${{ runner.os }}
|
||||
path: vpn_client_go/vpn-client-gui*
|
||||
```
|
||||
|
||||
## Производительность
|
||||
|
||||
### Время сборки
|
||||
- Первая сборка: 2-5 минут (загрузка зависимостей)
|
||||
- Последующие: 30-60 секунд
|
||||
|
||||
### Размер бинарника
|
||||
- Windows: ~28 MB (без UPX), ~11 MB (с UPX)
|
||||
- Linux: ~26 MB (без UPX), ~10 MB (с UPX)
|
||||
- macOS: ~27 MB (без UPX), ~11 MB (с UPX)
|
||||
|
||||
### Потребление ресурсов
|
||||
- RAM: 50-100 MB (GUI), 20-30 MB (CLI)
|
||||
- CPU: <1% в режиме ожидания
|
||||
- Диск: 100 MB (с зависимостями)
|
||||
|
||||
## Лицензирование
|
||||
|
||||
При распространении убедитесь, что включены:
|
||||
- LICENSE файл
|
||||
- Зависимости Xray (папка xray/)
|
||||
- Документация (README.md, GUI_GUIDE.md)
|
||||
|
||||
## Поддержка
|
||||
|
||||
При проблемах со сборкой:
|
||||
1. Проверьте версию Go: `go version`
|
||||
2. Очистите кеш: `go clean -modcache`
|
||||
3. Обновите зависимости: `go mod tidy`
|
||||
4. Проверьте логи сборки
|
||||
5. Убедитесь в наличии всех системных библиотек
|
||||
|
||||
---
|
||||
|
||||
**Успешной сборки! 🚀**
|
||||
Reference in New Issue
Block a user