Как отвязать cargo от интернета
В Росе не принято собирать пакеты с надеждой на стабильность сторонних ресурсов интернета. Потому что пакеты репозитория должны быть пересобираемыми независимо от изменений во внешних источниках.
Также в Росе не принято перепаковывать бинарники программ, если доступны исходники.
Иногда эта пара правил довольно заметно усложняет сборку. Бывает даже, что усложнение касается не просто отдельных проектов, а даже и целых семейств программ.
Один из примеров таких семейств - программы, написанные на языке rust. Исходники хранятся на сайте crates.io. Упакованы они в архивы с расширением crate. Вдобавок, компиляция этих программ ещё и привязана к определённым версиям других программ. И, хотя вся эта конструкция самоскачивается из интернета и самокомпилируется по простой команде, без интернета та простая команда разумеется не работает.
Так как же отучить cargo от интернета?
1. В систему в виртуалбокс ставим cargo.
sudo dnf in cargo
2. Заходим в каталог тарбола.
3. Создаём конфиг и переменную окружения.
mkdir cargo-home
cat >cargo-home/config < <EOF
[source.crates-io]
registry = 'https://github.com/rust-lang/crates.io-index'
replace-with = 'vendored-sources'
[source.vendored-sources]
directory = './vendor'
EOF
export CARGO_HOME=$(pwd)/cargo-home
4. Запускаем скачивание и индексацию сборочной среды.
cargo vendor
5. Запаковываем каталог vendor.
Отвязывание от интернета cargo, crates и прочего rust готово.
В спеке помимо распаковки каталога vendor повторяем пункт 3.
Приблизительная команда сборки для секции %build:
cargo build \--release ${_smp_mflags} \--offline
Оригинал тут: https://vk.com/wall-33847957_337325