Packaging/Vendoring

Материал из ALT Linux Wiki

Многие пакеты (например, на Rust, Go, Node или Java) требуют во время сборки докачивания дополнительных модулей из сети. Так как в Hasher сеть по умолчанию недоступна, требуется заранее загрузить материалы из Интернета и включить их в архив. Это процесс называется «вендоринг» (vendoring).

Шаги сборки

1. Запускаем сборку без сети на существующей версии пакета.

2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») запускаем hsh-shell под внутренним root:

hsh-shell --rooter

и добавляем сервер DNS (например, 8.8.8.8) в /etc/resolv.conf:

echo nameserver 8.8.8.8 >> /etc/resolv.conf

3. Запускаем hsh-shell с параметром share_network=1

share_network=1 hsh-shell --mountpoint=/proc

4. Выкачиваем нужные модули (для Rust, Go или Node) или начинаем сборку из хэшерницы с доступным Интернетом:

rpm -ba ~/RPM/SPECS/*.spec

5. В результате скачивания или непосредственно сборки образуются каталоги с модулями. Например, для maven модули складываются в ~/.m2/repository. Эти каталоги добавляем в gear-репозиторий и прописываем базовый путь в .gear/rules:

tar: m2 name=m2 base=.m2/repository
tar: pnpm name=pnpm base=.local/share/pnpm
tar: node name=node base=node

6. В спеке делаем распаковку:

Source1: m2.tar
Source2: pnpm.tar
Source3: node.tar
...
%prep
%setup
test -d ~/.m2 && rm -rf ~/.m2
tar xf %SOURCE1 -C ~
test -d ~/.local/share/pnpm && rm -rf ~/.local/share/pnpm
tar xf %SOURCE2 -C ~
tar xf %SOURCE3

7. Собираем штатным обазом.

Go

Выполняем команду

go vendor

и сохраняем каталог vendor.

Rust

Выполняем команду

cargo vendor

и сохраняем каталог vendor.

Java

Запускаем сборку через

mvn

и сохраняем каталог ~/.m2/repository. (обратите внимание, не в текущем каталоге, а в домашнем). Можно в подкаталоге:

mvn -Dmaven.repo.local=${PWD}/m2/repository -DskipTests install

Node

Выполняем команду

yarn install

и сохраняем каталог node_modules.

Примеры пакетов

  • scratch-desktop
  • keycloak
  • jicofo
  • jitsi-videobridge