# Инструкции по сборке 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 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 CFBundleExecutable vpn-client-gui CFBundleName VPN Client CFBundleVersion 2.0.0 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. Убедитесь в наличии всех системных библиотек --- **Успешной сборки! 🚀**