Как отвязать cargo от интернета

Материал из Rosalab Wiki
Перейти к: навигация, поиск

В Росе не принято собирать пакеты с надеждой на стабильность сторонних ресурсов интернета. Потому что пакеты репозитория должны быть пересобираемыми независимо от изменений во внешних источниках.

Также в Росе не принято перепаковывать бинарники программ, если доступны исходники.

Иногда эта пара правил довольно заметно усложняет сборку. Бывает даже, что усложнение касается не просто отдельных проектов, а даже и целых семейств программ.

Один из примеров таких семейств - программы, написанные на языке 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