Сборка и проверка BTP
Один static Linux ELF, одна целевая платформа, затем настоящая проверка архива.
Платформы
Platform ID берется из конфигурации целевой установки у ее администратора. uname -m сообщает только архитектуру. Даже для одинакового x86_64 binary строка platform должна совпадать точно.
| targets.platform | Rust target |
|---|---|
| linux-aarch64-debian | aarch64-unknown-linux-musl |
| linux-x86_64-ubuntu24 | x86_64-unknown-linux-musl |
| linux-x86_64-rhel8 | x86_64-unknown-linux-musl |
| linux-x86_64-rpm-openssl3 | x86_64-unknown-linux-musl |
Основной путь
Выполняйте команды из корня распакованного kit. build.py выбирает musl target и использует cross; Docker получает только самодостаточный kit. --platform задает платформу упакованного TOML, не изменяя исходный manifest. Это сборка и упаковка, не установка на стенд.
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.
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-стенде.
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.
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. Никакой автоматической установки здесь нет.
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. Итоговые ограничения и политика доверия определяются менеджером целевой установки. Упаковка сама по себе не означает успешную проверку или право запуска.