Packaging/Vendoring
Многие пакеты (например, на 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