Документация по сборке
Подготовка
Xray использует Golang в качестве языка программирования, поэтому вам необходимо сначала установить последнюю версию Golang, чтобы иметь возможность выполнить сборку.
СОВЕТ
Установка Golang: golang.org/doc/install
Если вы, к сожалению, используете Windows, обязательно используйте Powershell.
Получение исходного кода Xray
git clone https://github.com/XTLS/Xray-core.git
cd Xray-core && go mod download
Если вам нечем заняться, можете попробовать официальный инструмент GitHub:
gh repo clone XTLS/Xray-core
.
Примечание: в сетевых средах, где нет доступа к Google, зависимости не могут быть получены обычным способом, поэтому необходимо сначала установить GOPROXY
:
go env -w GOPROXY=https://goproxy.io,direct
Сборка бинарного файла
Внимание
Команды в этом разделе необходимо выполнять в корневом каталоге Xray.
Windows (Powershell):
$env:CGO_ENABLED=0
go build -o xray.exe -trimpath -ldflags "-s -w -buildid=" ./main
macOS, Linux:
CGO_ENABLED=0 go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main
Выполнение этих команд создаст исполняемый файл xray в текущем каталоге.
Подсказка
Если вам нужно собрать программу с поддержкой отладки, то есть такую, к которой можно подключиться с помощью dlv для отладки, удалите опции '-w -s' из ldflags.
-w отключает генерацию отладочной информации. Если эта опция используется, отладка с помощью gdb будет невозможна. -s отключает таблицу символов. P.S.: На самом деле отладка с помощью vscode или другой IDE может быть более удобной.
Кросс-компиляция:
В качестве примера рассмотрим компиляцию в среде Windows (Powershell) для сервера Linux:
$env:CGO_ENABLED=0
$env:GOOS="linux"
$env:GOARCH="amd64"
go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main
После загрузки на сервер не забудьте выполнить команду chmod +x xray
в терминале сервера.
Подсказка
Выполните команду go tool dist list
, чтобы просмотреть все поддерживаемые системы и архитектуры.
Воспроизводимая сборка:
Выполнив описанные выше шаги, вы можете собрать бинарный файл, идентичный тому, что находится в релизе.
Внимание
Убедитесь, что вы используете ту же версию Golang, что и для сборки релиза.