Files
Go-VPN-Client/Markdown/BUILD_INSTRUCTIONS.md
arkonsadter e0a5f0f746 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
2026-04-06 18:57:58 +06:00

8.5 KiB
Raw Permalink Blame History

Инструкции по сборке VPN Client GUI

Требования

Общие

  • Go 1.21 или выше
  • Git (для клонирования репозитория)
  • Интернет соединение (для загрузки зависимостей)

Windows

  • Windows 10 или выше
  • MinGW-w64 или TDM-GCC (для компиляции C кода Fyne)
  • Или используйте готовые бинарники

Linux

# 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

# Установите Xcode Command Line Tools
xcode-select --install

Быстрая сборка

Windows

# 1. Инициализация (первый раз)
init_gui.bat

# 2. Сборка
build_gui.bat

# Результат: vpn-client-gui.exe

Linux/macOS

# 1. Сделайте скрипты исполняемыми
chmod +x init_gui.sh build_gui.sh

# 2. Инициализация (первый раз)
./init_gui.sh

# 3. Сборка
./build_gui.sh

# Результат: vpn-client-gui

Ручная сборка

Шаг 1: Установка зависимостей

cd vpn_client_go
go mod download
go mod tidy

Шаг 2: Сборка

Windows (с GUI):

go build -ldflags="-s -w -H windowsgui" -o vpn-client-gui.exe main.go

Windows (с консолью для отладки):

go build -ldflags="-s -w" -o vpn-client-gui.exe main.go

Linux:

go build -ldflags="-s -w" -o vpn-client-gui main.go

macOS:

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/

Оптимизация размера

Минимальный размер

# Используйте 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

# Установите 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

# Установите кросс-компилятор
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:

# Используйте старые скрипты
# Windows
build.bat

# Linux/macOS
./build.sh

Или вручную:

go build -ldflags="-s -w" -tags cli -o vpn-client main.go

Проверка сборки

Тест запуска

# GUI режим
./vpn-client-gui

# CLI режим
./vpn-client-gui --cli

Проверка зависимостей

# Список зависимостей
go list -m all

# Проверка на уязвимости
go list -json -m all | nancy sleuth

Проверка размера

# Windows
dir vpn-client-gui.exe

# Linux/macOS
ls -lh vpn-client-gui

Отладка проблем сборки

Ошибка: "gcc not found"

Windows:

Linux:

sudo apt-get install build-essential

macOS:

xcode-select --install

Ошибка: "package fyne.io/fyne/v2 not found"

go clean -modcache
go mod download
go mod tidy

Ошибка: "undefined reference to..."

Это проблема с CGO. Убедитесь, что:

  1. Установлен GCC
  2. CGO_ENABLED=1 (по умолчанию)
  3. Установлены системные библиотеки (см. Требования)

Ошибка при запуске: "cannot open display"

Это означает, что нет графической среды. Используйте CLI режим:

./vpn-client-gui --cli

Создание установщика

Windows (NSIS)

  1. Установите NSIS: https://nsis.sourceforge.io/
  2. Создайте installer.nsi:
!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
  1. Соберите:
makensis installer.nsi

Linux (DEB пакет)

# Создайте структуру
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)

# Создайте .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:

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. Убедитесь в наличии всех системных библиотек

Успешной сборки! 🚀