Packaging/Vendoring: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Многие пакеты (например, на Rust, Go, Node или Java) требуют во время сборки докачивания дополнительных модулей из сети. Так как в Hasher сеть по умолчанию недоступна, требуется заранее загрузить материалы из Интернета и включить их в архив. Это процесс называет...»)
 
(→‎Шаги сборки: подправил список (чтобы 1 и 2 были на разных строчках))
Строка 3: Строка 3:
== Шаги сборки ==
== Шаги сборки ==
1. Запускаем сборку без сети на существующей версии пакета.
1. Запускаем сборку без сети на существующей версии пакета.
2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») запускаем hsh-shell под внутренним root:
2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») запускаем hsh-shell под внутренним root:
  hsh-shell --rooter
  hsh-shell --rooter

Версия от 16:51, 3 мая 2024

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