К содержимому
BlueTraktor

Сборка и проверка BTP

Один static Linux ELF, одна целевая платформа, затем настоящая проверка архива.

Платформы

Platform ID берется из конфигурации целевой установки у ее администратора. uname -m сообщает только архитектуру. Даже для одинакового x86_64 binary строка platform должна совпадать точно.

targets.platformRust target
linux-aarch64-debianaarch64-unknown-linux-musl
linux-x86_64-ubuntu24x86_64-unknown-linux-musl
linux-x86_64-rhel8x86_64-unknown-linux-musl
linux-x86_64-rpm-openssl3x86_64-unknown-linux-musl

Основной путь

Выполняйте команды из корня распакованного kit. build.py выбирает musl target и использует cross; Docker получает только самодостаточный kit. --platform задает платформу упакованного TOML, не изменяя исходный manifest. Это сборка и упаковка, не установка на стенд.

bash
cargo test --workspace --locked
python3 -m unittest test_build.py test_btp.py
python3 build.py --platform linux-aarch64-debian

Без Docker

На подготовленной Linux-машине установите musl target и подходящий linker. Одного rustup target add недостаточно для cross-компиляции. Для x86_64 выберите соответствующий platform. При установленных Zig и cargo-zigbuild доступен отдельный builder.

bash
rustup target add aarch64-unknown-linux-musl
python3 build.py --builder cargo --platform linux-aarch64-debian
# Альтернатива с Zig:
python3 build.py --builder zigbuild --platform linux-aarch64-debian

Проверка executable

Ожидается 64-bit little-endian Linux ELF нужной архитектуры без INTERP/PT_INTERP. Static PIE допускается при прохождении verifier. На macOS можно использовать llvm-readelf. Mach-O, Windows PE, shell script и динамический GNU/Linux executable не подходят.

cargo run на ноутбуке не создает среду менеджера. Проверяйте чистую логику unit-тестами, а жизненный цикл - установленным BTP на Linux-стенде.

bash
file target/aarch64-unknown-linux-musl/release/community-starter
readelf -h target/aarch64-unknown-linux-musl/release/community-starter
readelf -l target/aarch64-unknown-linux-musl/release/community-starter

Упаковка

Независимый build.py включает только четыре разрешенных файла, сортирует их и нормализует uid/gid и время в 0. Режим executable - 0555, manifest и схем - 0444. Это воспроизводимость архива одинакового содержимого, не гарантия одинакового binary при разных toolchain или image tags.

Для готового binary используйте --package-only. Symlink, special files, лишние файлы и output внутри package запрещены. Существующий output не перезаписывается; для другого имени используйте --output.

bash
python3 build.py --package-only "$PWD/target/aarch64-unknown-linux-musl/release/community-starter"
# Результат для исходной версии и платформы:
# dist/io.example.community-starter-0.1.0-linux-aarch64-debian.btp

Проверка настоящего архива

Упаковщик проверяет ELF64, архитектуру, program headers, отсутствие PT_INTERP и динамических зависимостей, допустимый состав BTP и печатает SHA-256. Его portable-тесты используют искусственный ELF только для структурных отрицательных сценариев.

Закрытый PackageStore и его integration-тесты не входят в kit. Проверки helper не заменяют полный inspection менеджером: загрузите готовый BTP через настройки целевого BlueTraktor 0.1.4+, проверьте manifest, схемы, права и предупреждения, затем отдельно выполните Linux smoke-test. Никакой автоматической установки здесь нет.

bash
python3 -m unittest test_build.py test_btp.py
# Проверка SDK и транспорта в Linux через cross:
cross test --workspace --locked --target x86_64-unknown-linux-musl

Пределы пакета

Стандартные пределы: 128 MiB compressed, 512 MiB unpacked, 4096 entries, manifest 256 KiB. Итоговые ограничения и политика доверия определяются менеджером целевой установки. Упаковка сама по себе не означает успешную проверку или право запуска.