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

Материал из ALT Linux Wiki
(→‎Шаги сборки: подправил список (чтобы 1 и 2 были на разных строчках))
(Актуализация информации)
Строка 4: Строка 4:
1. Запускаем сборку без сети на существующей версии пакета.
1. Запускаем сборку без сети на существующей версии пакета.


2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») запускаем hsh-shell под внутренним root:
2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») необходимо прописать свой DNS во внутрь хешера, для этого сначала можно посмотреть что у Вас за nameserver
hsh-shell --rooter
 
и добавляем сервер DNS (например, 8.8.8.8) в {{path|/etc/resolv.conf}}:
# cat /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
$ hsh-shell --rooter
# echo nameserver 8.8.8.8 >> /etc/resolv.conf
# exit
 
Где 8.8.8.8 = вашему DNS, который вы увидели командой выше.
 
3. Далее заходим в хешер с параметрами разрешающими доступ в сеть Интернет
 
$ share_ipc=yes share_network=yes hsh-shell --mount=/dev/pts,/proc
 
4. Выкачиваем нужные модули (для Rust, Go или Node) или начинаем сборку из хэшерницы с доступным Интернетом:
4. Выкачиваем нужные модули (для Rust, Go или Node) или начинаем сборку из хэшерницы с доступным Интернетом:
rpm -ba ~/RPM/SPECS/*.spec
 
5. В результате скачивания или непосредственно сборки образуются каталоги с модулями. Например, для maven модули складываются в ~/.m2/repository. Эти каталоги добавляем в gear-репозиторий и прописываем базовый путь в {{path|.gear/rules}}:
4.1 Для начала сборки достаточно запустить RPM с указанием файла *.spec
 
Файл спек проекта расположен в каталоге
cd /usr/src/RPM/SPECS/
 
Для запуска сборки внутри хешера запускаем
rpm -ba *.spec
 
4.2 Для выкачивания нужных модулей необходимо зайти в каталог проекта
 
cd /usr/src/RPM/BUILD/ИМЯ_ПРОЕКТА
 
Далее выполнить
 
== для Go ==
Выполняем команду
go mod vendor
 
== Rust ==
Выполняем команду
cargo vendor
 
Тем самым по пути будет создан каталог '''vendor''' в который будут сложены все необходимые модули
 
''информация по '''Java''' и '''Node''' оставлена из изначальной инструкции, возможно может не работать''
 
== Java ==
Запускаем сборку через
mvn
и сохраняем каталог {{path|~/.m2/repository}}.
(обратите внимание, не в текущем каталоге, а в домашнем). Можно в подкаталоге:
mvn -Dmaven.repo.local=${PWD}/m2/repository -DskipTests install
 
== Node ==
Выполняем команду
yarn install
и сохраняем каталог {{path|node_modules}}.
 
5. В результате скачивания или непосредственно сборки образуются каталоги с модулями.  
Для '''Go''' и '''Rust''' как описано выше это будет каталог vendor внутри проекта.
 
Для maven модули складываются в ~/.m2/repository. ''информация из изначальной инструкции''
 
Далее, для работы вне хешера, копируем каталог с модулями в изначальный каталог репозиторий и добавляем его в gear-репозиторий, либо собираем внутри хешера
 
''ниже информация из изначальной инструкции, за ней будет информация по сборке вне хешера''
 
Эти каталоги добавляем в gear-репозиторий и прописываем базовый путь в {{path|.gear/rules}}:
  tar: m2 name=m2 base=.m2/repository
  tar: m2 name=m2 base=.m2/repository
  tar: pnpm name=pnpm base=.local/share/pnpm
  tar: pnpm name=pnpm base=.local/share/pnpm
  tar: node name=node base=node
  tar: node name=node base=node
6. В спеке делаем распаковку:
7. В спеке делаем распаковку:
<syntaxhighlight lang="spec">Source1: m2.tar
<syntaxhighlight lang="spec">Source1: m2.tar
Source2: pnpm.tar
Source2: pnpm.tar
Строка 28: Строка 84:
tar xf %SOURCE2 -C ~
tar xf %SOURCE2 -C ~
tar xf %SOURCE3</syntaxhighlight>
tar xf %SOURCE3</syntaxhighlight>
7. Собираем штатным обазом.
8. Собираем штатным обазом.
 
***
 
''Ниже информация о сборке вне хешера''
 
После копирования из хешера каталога '''vender''' добавляем его в gear-репозиторий
 
Сделать можно двумя способами:
 
git add .
 
Но иногда gear-hsh может не увидить каталоги, для этого логично сделать описанные выше шаги по созданию rules и добавления распаковки внутри спека.
 
Однако, можно просто добавить полностью со всем содержимым каталог внутрь gear, и тогда не нужно прописывать отдельные правила по созданию второго tar и распаковки внутри спека, для это выполняется команда
 
$ git add --all -f vendor
 
А дальше нюанс:
 
Для GO этого будет вполне достаточно, можно просто начать собирать пакет, он подхватит модули с vendor
 
Для Rust необходимо еще прописать '''config.toml'''
 
Создаём каталог .cargo и добавляем файл config.toml где будут прописаны связи, чтобы при сборке сборщик понимал, что ему нужно брать файлы не с сети Интернет, а с каталога vendor.
 
$ mkdir .cargo
$ cd .cargo
$ touch config.toml
 
Далее вписываем в config.toml необходимую информацию, которая была указана в терминале после выполнения команды carogo vendor, обычно это
 
[source.crates-io]
replace-with = "vendored-sources"


== Go ==
[source.vendored-sources]
Выполняем команду
directory = "vendor"
go vendor
и сохраняем каталог {{path|vendor}}.


== Rust ==
Далее добавляем файл config.toml в git
Выполняем команду
cargo vendor
и сохраняем каталог {{path|vendor}}.


== Java ==
$ git add .cargo/config.toml
Запускаем сборку через
mvn
и сохраняем каталог {{path|~/.m2/repository}}.
(обратите внимание, не в текущем каталоге, а в домашнем). Можно в подкаталоге:
mvn -Dmaven.repo.local=${PWD}/m2/repository -DskipTests install


== Node ==
После этого можно запускать сборку
Выполняем команду
yarn install
и сохраняем каталог {{path|node_modules}}.


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

Версия от 11:58, 29 мая 2024

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

Шаги сборки

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

2. После ошибки сборки, вызванной недоступностью сетевого ресурса (например, «Failed to fetch...») необходимо прописать свой DNS во внутрь хешера, для этого сначала можно посмотреть что у Вас за nameserver

  1. cat /etc/resolv.conf

Далее прописываем его в хешер $ hsh-shell --rooter

  1. echo nameserver 8.8.8.8 >> /etc/resolv.conf
  2. exit

Где 8.8.8.8 = вашему DNS, который вы увидели командой выше.

3. Далее заходим в хешер с параметрами разрешающими доступ в сеть Интернет

$ share_ipc=yes share_network=yes hsh-shell --mount=/dev/pts,/proc

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

4.1 Для начала сборки достаточно запустить RPM с указанием файла *.spec

Файл спек проекта расположен в каталоге cd /usr/src/RPM/SPECS/

Для запуска сборки внутри хешера запускаем rpm -ba *.spec

4.2 Для выкачивания нужных модулей необходимо зайти в каталог проекта

cd /usr/src/RPM/BUILD/ИМЯ_ПРОЕКТА

Далее выполнить

для Go

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

go mod vendor

Rust

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

cargo vendor

Тем самым по пути будет создан каталог vendor в который будут сложены все необходимые модули

информация по Java и Node оставлена из изначальной инструкции, возможно может не работать

Java

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

mvn

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

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

Node

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

yarn install

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

5. В результате скачивания или непосредственно сборки образуются каталоги с модулями. Для Go и Rust как описано выше это будет каталог vendor внутри проекта.

Для maven модули складываются в ~/.m2/repository. информация из изначальной инструкции

Далее, для работы вне хешера, копируем каталог с модулями в изначальный каталог репозиторий и добавляем его в gear-репозиторий, либо собираем внутри хешера

ниже информация из изначальной инструкции, за ней будет информация по сборке вне хешера

Эти каталоги добавляем в gear-репозиторий и прописываем базовый путь в .gear/rules:

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

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

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

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

Ниже информация о сборке вне хешера

После копирования из хешера каталога vender добавляем его в gear-репозиторий

Сделать можно двумя способами:

git add .

Но иногда gear-hsh может не увидить каталоги, для этого логично сделать описанные выше шаги по созданию rules и добавления распаковки внутри спека.

Однако, можно просто добавить полностью со всем содержимым каталог внутрь gear, и тогда не нужно прописывать отдельные правила по созданию второго tar и распаковки внутри спека, для это выполняется команда

$ git add --all -f vendor

А дальше нюанс:

Для GO этого будет вполне достаточно, можно просто начать собирать пакет, он подхватит модули с vendor

Для Rust необходимо еще прописать config.toml

Создаём каталог .cargo и добавляем файл config.toml где будут прописаны связи, чтобы при сборке сборщик понимал, что ему нужно брать файлы не с сети Интернет, а с каталога vendor.

$ mkdir .cargo $ cd .cargo $ touch config.toml

Далее вписываем в config.toml необходимую информацию, которая была указана в терминале после выполнения команды carogo vendor, обычно это

[source.crates-io] replace-with = "vendored-sources"

[source.vendored-sources] directory = "vendor"

Далее добавляем файл config.toml в git

$ git add .cargo/config.toml

После этого можно запускать сборку

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

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