Сборка пакетов start: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 120 промежуточных версий 3 участников)
Строка 1: Строка 1:
Возможно будет дорабатываться статья [[Сборка пакета с нуля]]
{{Note|В примере будет участник '''Petya Ivanov''' с email - '''petyaivanov@altlinux.org''' и именем пользователя '''petr'''}}
{{Note|В примере будет участник '''Petya Ivanov''' с email - '''petyaivanov@altlinux.org'''}}


=Подготовка=
=Подготовка=
Строка 6: Строка 5:
{{Note|Основная статья: [[Работа с ключами разработчика]]}}
{{Note|Основная статья: [[Работа с ключами разработчика]]}}


Для доступа к инфраструктуре ALT Linux нужны два открытых ключа SSH и GPG.
Для доступа к инфраструктуре ALT Linux нужны два открытых ключа: SSH и GPG. SSH ключ будет обеспечивать защищенное подключение к ресурсам ALT Linux Team, а GPG необходим для подписи пакетов.
 
===SSH===
===SSH===
Для работы с git-репозиториями ALT нужен будет SSH-ключ, который нужно сгенерировать. Его можно создать согласно инструкции с [[Работа_с_ключами_разработчика|этой страницы]].
Для работы с git-репозиториями ALT нужен будет SSH-ключ, который нужно сгенерировать. Его можно создать согласно инструкции с [[Работа_с_ключами_разработчика|этой страницы]].


  $ ssh-keygen -t ED25519 -b 4096
  $ ssh-keygen -t ED25519


Публичная часть ключа — файл ~/.ssh/id_ed25519.pub.
{|class="wikitable mw-collapsible mw-collapsed" style="float:center; margin-left:2em"
!Генерация ключа проходит следующим образом:
|-
|
$ ssh-keygen -t ED25519
Generating public/private ED25519 key pair.
'''Enter file in which to save the key (/home/petr/.ssh/id_ed25519)''':''// Указывается место сохранения открытого и закрытого ключей (в скобках указан путь по-умолчанию) Жмем {{Button|Enter}}''
'''Enter passphrase (empty for no passphrase)''': ''// Вводим пароль от ключа''
'''Enter same passphrase again''': ''// Повторяем пароль''
Your identification has been saved in '''/home/petr/.ssh/id_ed25519'''. ''// Путь закрытого ключа''
Your public key has been saved in '''/home/petr/.ssh/id_ed25519.pub'''. ''// Путь открытого ключа''
The key fingerprint is:
SHA256:hWKLApBzHoGmrl/jG8E92WzrDqFZ6jTUsHZP+G6A440 petr@alt-petr
The key's randomart image is:
<nowiki>+--[ED25519 256]--+
|.o..            |
|=.o      .      |
|++ .. o . .      |
|.... B B .      |
|. . B.@ S        |
| . +oB.B .      |
|.  .X+..+        |
|.  =E+.+.        |
| .. +. o+        |
+----[SHA256]-----+</nowiki>
|}
Публичная часть ключа — файл '''~/.ssh/id_ed25519.pub'''.


===GPG-ключ===
===GPG-ключ===
Для подписи пакетов нужна открытая часть ключа. Следующими командами мы сгенерируем GPG-ключ и экспортируем в файл gpgkey.pub открытую часть.
  $ gpg --gen-key
  $ gpg --gen-key
  $ gpg --armor --export petyaivanov@altlinux.org > gpgkey
  $ gpg --armor --export petyaivanov@altlinux.org > gpgkey.pub
 
{|class="wikitable mw-collapsible mw-collapsed" style="float:center; margin-left:2em"
!Генерация ключа проходит следующим образом:
|-
|
$ '''gpg --gen-key'''
Выберите тип ключа:
    (1) RSA и RSA (по умолчанию)
    (2) DSA и Elgamal
    (3) DSA (только для подписи)
    (4) RSA (только для подписи)
'''Ваш выбор? 1'''
длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048) 4096
Запрошенный размер ключа - 4096 бит
Выберите срок действия ключа.
          0 = без ограничения срока действия
      <n>  = срок действия - n дней
      <n>w = срок действия - n недель
      <n>m = срок действия - n месяцев
      <n>y = срок действия - n лет
'''Срок действия ключа? (0)'''
Срок действия ключа не ограничен
'''Все верно? (y/N) y'''
Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
    "Baba Yaga (pensioner) <yaga@deepforest.ru>"
'''Ваше настоящее имя: Petya Ivanov'''
'''Адрес электронной почты: petyaivanov@altlinux.org'''
'''Комментарий: community member'''
Вы выбрали следующий ID пользователя:
    "Petya Ivanov (community member) <petyaivanov@altlinux.org>"
Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? '''O'''
Для защиты секретного ключа необходима фраза-пароль.
''//тут вводится фраза-пароль''
Необходимо сгенерировать много случайных чисел. Желательно, чтобы Вы
выполняли некоторые другие действия (печать на клавиатуре, движения мыши,
обращения к дискам) в процессе генерации; это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
.............+++++
........+++++
..ll.....,..t.h..h.t.h.hm.t.h..to.m.pt.m..m.p+++++
m+++++
gpgpg: /home/petr/.gnupg/trustdb.gpg: создана таблица доверия
gpg: ключ 53DE950D помечен как абсолютно доверенный.
открытый и секретный ключи созданы и подписаны.
gpg: проверка таблицы доверия
gpg: требуется 3 с ограниченным доверием, 1 с полным, модель доверия PGP
gpg: глубина: 0  верных:  1  подписанных:  0  доверие: 0-, 0q, 0n, 0m, 0f, 1u
pub  4096R/53DE950D 2023-10-06
      Отпечаток ключа = 57C3 4384 526A F344 424C  30C0 A0DC 9D85 53DE 950D
uid                  Petya Ivanov (community member) <petyaivanov@altlinux.org>
sub  4096R/D32A2F02 2023-10-06
|}


==Инструменты для сборки==
==Инструменты для сборки==
В ALT Linux для сборки есть два инструмента.
В ALT Linux для сборки есть два инструмента.


* [[Hasher]] - для сборки в изолированном окружении.
* [[Hasher]] - для сборки в изолированном окружении [[chroot]].


В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке).
В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке).


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


Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher.
Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой новой сборке в Hasher.
* [[Gear]] - для сборки пакетов из репозитория Git.
* [[Gear]] - для сборки пакетов из репозитория Git.


В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в [http://docs.altlinux.org/manpages/gear-rules.5.html .gear/rules].
В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в [[Gear/old#Синтаксис_.gear-rules|.gear/rules]].


Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.
Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.
Строка 36: Строка 121:
=== Установка инструментов для сборки ===
=== Установка инструментов для сборки ===
Для сборки пакетов нам понадобятся:
Для сборки пакетов нам понадобятся:
* Любой удобный текстовый редактор (Vim, Emacs, Mcedit);
* Любой удобный текстовый редактор (Vim, Emacs, mcedit);
* Система управления версиями '''Git'''
* Система управления версиями '''Git'''
* Сборочная среда '''Hasher'''
* Сборочная среда '''Hasher'''
* Инфраструктура '''Gear'''
* Инфраструктура '''Gear'''
* Утилиты RPM для сборки пакетов
* Утилиты RPM для сборки пакетов
* Инструменты для сборки программ: gcc, make, python, patch.
* Утилита для импорта проектов с Github
* Доступ к [[Branches|репозиторию пакетов]]
* Доступ к [[Branches|репозиторию пакетов]]


Установка:
Установка:
  # apt-get install mcedit git hasher hasher-priv gear rpm-utils rpm-build rpm-build-licenses
  # apt-get install mc git hasher hasher-priv gear gcc make python patch rpmdevtools rpm-utils rpm-build rpmlint rpm-build-licenses github2spec


===Настройка Git===
===Настройка Git===
Настройте имя, адрес, идентификатор ключа для создаваемых вновь GIT репозиториев:
Чтобы у нашего Git-репозитория была идентификация, что именно мы занимаемся сборкой пакетов, его нужно настроить.
 
Следующими командами мы, для создаваемых вновь GIT репозиториев, настроим:
*имя
*адрес
*идентификатор ключа:


<source lang=bash>
<source lang=bash>
Строка 55: Строка 147:
</source>
</source>


Третья команда задаёт идентификатор вашего GPG-ключа для подписи:
Третья команда задаёт идентификатор вашего GPG-ключа для подписи.
 
Чтобы узнать этот идентификатор, выполните одну из следующих команд:


<source lang=bash>
<source lang=bash>
Строка 66: Строка 160:


<source lang=bash>
<source lang=bash>
[cas@cas ~]$ gpg --list-secret-keys
$ gpg --list-secret-keys
------------------------------
------------------------------
sec  1024D/835560D9 2023-05-15
sec  1024D/835560D9 2023-05-15
Строка 73: Строка 167:


====Работа с Git====
====Работа с Git====
Основы работы с Git-репозиторием описаны в указанной ниже статье.
*См. [[Git start]]
*См. [[Git start]]


===Настройка Hasher===
===Настройка Hasher===
Чтобы настроить сборочную среду Hasher нужно выполнить два действия - добавить пользователя в соответствующие группы и создать конфигурационный файл.
{{Note|После добавления пользователя в группу Hasher, для применения параметров, необходимо выполнить ре-логин в систему (в GUI или в консоли - в зависимости от того, где вы работаете)}}
====Добавление пользователя в группу====
====Добавление пользователя в группу====
Из-под под root:
Из-под под root:
Строка 83: Строка 180:
</pre>
</pre>
Например:
Например:
<pre># hasher-useradd petr</pre>
====Создание конфигурационного фала====
Так же необходимо создать пользователю в домашнем каталоге файл {{path|.hasher/config}}:
<pre>
<pre>
$ mkdir ~/.hasher
# hasher-useradd petr
$ echo 'packager="Petya Ivanov <petyaivanov@altlinux.org>"' >~/.hasher/config
Добавление пользователя petr в группу petr_a
Добавление пользователя petr в группу petr_b
Добавление пользователя petr в группу hashman
</pre>
</pre>
====Создание конфигурационного файла====
Так же необходимо создать пользователю в домашнем каталоге файл {{path|.hasher/config}}:
$ mkdir ~/.hasher
$ mcedit ~/.hasher/config
Вставляем в файл следующее содержимое:
packager="'''Petya Ivanov <petyaivanov@altlinux.org>'''"
USER='''petr'''
#workdir="/tmp/.private/petr/"
workdir="$HOME/hasher"
target='''x86_64'''
packager="`rpm --eval %packager`"
#apt_config="$HOME/.hasher/apt.conf"
mount=/dev/pts,/proc
Тут смотрите на строки с командами:
*'''packager ...''' - тут должны быть ваше имя и email
*''''USER=petr'''' - тут должно быть ваше имя пользователя, которое вы завели в '''hasher-useradd'''
*'''target''' - тут должна быть архитектура, под которую будут собираться пакеты, '''i586''' или '''x86_64'''
*'''workdir''' - временная папка. '''/tmp''' - обозначает, что данные будут загружаться в [[tmpfs]] (в оперативную память) и, соответственно, собираться быстрее. Если у вас не так много оперативной памяти, укажите локальный каталог, например '''$HOME/hasher'''
====Инициализация окружения Hasher====
{{Note|Данную команду нужно выполнять после ре-логина или перезагрузки}}
{{Note|Если вы указали использовать вместо оперативной памяти каталог на жестком диске, проверьте, существует ли данный каталог, и если его нет создайте его командой {{cmd|mkdir ~/hasher}}}}
$ hsh -v --initroot-only
{{Note|[[Hasher/FAQ|FAQ по Hasher]]}}
<!--===Настройка Gear===
-->


===Настройка Gear===
===Настройка окружения RPM===
===Настройка окружения RPM===
Создайте файл ~/.rpmmacros
Для настройки сборки RPM-пакетов (чтобы указать в них кто собрал данный пакет и подпись разработчика) нужно создать в домашнем каталоге файл .rpmmacros.
 
Отредактируйте файл ~/.rpmmacros (конечно, заменив ключ и имя мейнтейнера на свои):
<source lang=bash>
<source lang=bash>
$ echo "%packager Petya Ivanov <petyaivanov@altlinux.org>" >> ~/.rpmmacros
$ mcedit ~/.rpmmacros
$ echo "%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9" >> ~/.rpmmacros
</source>
 
<source lang=bash>
"%packager Petya Ivanov <petyaivanov@altlinux.org>"
"%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9"
</source>
</source>


Визуально проверьте файл на соответствие ожидаемому:
Визуально проверьте файл на соответствие ожидаемому:
<source lang=bash>$ cat ~/.rpmmacros</source>
<source lang=bash>$ cat ~/.rpmmacros</source>
====Что указывается в %_gpg_name?====
{{Note|Обратите внимание, в качестве одного из аргументов используется краткий идентификатор ключа. Мы его получили в [[#Настройка Git|шаге настройки Git]].}}
В %_gpg_name указывается отпечаток ключа (а не краткий идентификатор, как для Git). Получить его можно командой:
<source lang=bash>
$ LANG=C gpg --fingerprint 835560D9 | grep 'fingerprint =' | tr -d ' ' | cut -d= -f2
1B40E49FD40245D0472E4C5FD9528003835560D9
</source>
или
<source lang=bash>
$ gpg --fingerprint 835560D9 | sed -n '/.*=/{s/.*=/%_gpg_name\t/;s/ //gp}'
%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9
</source>


=Виды сборки пакетов=
=Виды сборки пакетов=
==Создание пакета с нуля==
==Создание пакета с нуля==
Для примера мы попробуем собрать утилиту [https://ftp.gnu.org/gnu/hello/ Hello].
=== Подготовка репозитория Git ===
=== Подготовка репозитория Git ===
Первым делом нужно создать Git-репозиторий для нужного пакета. Для этого мы создадим каталог и инициализируем в нем git-репозиторий.
$ mkdir hello
$ cd hello
hello$ git init .
Наш каталог:
home
└── hello <- Мы сейчас здесь
    └── .git <- Служебный каталог Git


=== Написание .gear/rules ===
=== Написание .gear/rules ===
В созданной папке hello создаем каталог .gear и в нем файл rules:
hello$ mkdir .gear
hello$ cd .gear
.gear$ mcedit rules
Наполняем файл следующей строкой и сохраняем его:
{{Note|В более сложных пакетах используется конструкция вида <code><nowiki>tar.gz: . name=hello base=hello</nowiki></code>}}
tar.gz: hello
*Указанная строка {{path|tar.gz:hello}} указывает, что будет создан архив с нашим каталогом hello.
Наш каталог:
home
└── hello
    ├── .gear <- Мы сейчас здесь
    │   └── rules <- Мы создали этот файл
    └── .git


=== Импорт исходного кода ===
=== Импорт исходного кода ===
Исходный код Hello лежит на FTP: [https://ftp.gnu.org/gnu/hello/ https://ftp.gnu.org/gnu/hello/].
Выходим из папки .gear в каталог выше и клонируем в него исходный код.
.gear$ cd ..
hello$ wget https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
hello$ tar xzvf hello-2.10.tar.gz
hello$ rm hello-2.10.tar.gz
Наш каталог:
home
└── hello  <- Мы сейчас здесь
    ├── hello-2.10 <- Мы распаковали исходный код программы сюда
    ├── .gear
    └── .git
{{Note|Т.к. для Hasher-а нужно, чтобы имя пакета в spec-е и имя репозитория совпадали (а пакет у нас будет называться hello, а не hello-2.10), мы переименуем каталог с исходным кодом в соответствии с именем пакета}}
hello$ mv hello-2.10 hello


=== Написание спека ===
=== Написание спека ===
{{Note|[https://github.com/altlinux/specs/ Примеры спеков ALT Linux]}}
Теперь нам нужно создать файл спека (spec).
Создадим в каталоге, где мы собираемся собирать программу этот файл.
hello$ mcedit hello.spec
Добавляем в файл следующие строки:
{{Note|RPMBuild не поддерживает комментарии на русском языке, поэтому используйте на практике вариант без них.}}
{|class="wikitable mw-collapsible mw-collapsed" style="float:center; margin-left:2em"
!Шаблон с комментариями на русском для изучения
|-
|
<syntaxhighlight lang="spec">
#Название пакета
Name: hello
#Версия программы
Version: 2.10
#Номер сборки в текущем бранче
Release: alt1.1
Summary: GNU hello, THE greeting printing program
#Группа в меню ([[Ярлычки_программ#Категории|см. здесь]])
Group: Development/C
#Лицензия
License: GPLv3+
#Сайт программы
Url: ftp://ftp.gnu.org/gnu/hello/
Source: %name-%version.tar.gz
# explicitly added texinfo for info files
#Зависимость для сборки
BuildRequires: texinfo
#Описание на английском
%description
The GNU `hello' program produces a familiar, friendly greeting.  It
allows nonprogrammers to use a classic computer science tool which
would otherwise be unavailable to them.  Because it is protected by the
GNU General Public License, users are free to share and change it.
#Команды сборки
%prep
%setup -a0
%build
%autoreconf
%configure
%make_build
%install
%makeinstall
%find_lang %name
%files -f %name.lang
%doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO
%doc %name-%version
%_bindir/*
%_infodir/*
%_mandir/man?/*
#История изменений
%changelog
* Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1
- NMU: added BR: texinfo
* Mon Nov 17 2014 Fr. Br. George <george@altlinux.ru> 2.10-alt1
- Autobuild version bump to 2.10
- Use autoreconf for educational purpose
- Add full source tree in documentation
* Thu Apr 17 2014 Fr. Br. George <george@altlinux.ru> 2.9-alt1
- Autobuild version bump to 2.9
* Mon Apr 15 2013 Dmitry V. Levin (QA) <qa_ldv@altlinux.org> 2.4-alt2.qa1
- NMU: rebuilt for debuginfo.
* Thu May 21 2009 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt2
- remove obsolete %%{,un}install_info calls
* Sat Dec 13 2008 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt1
- 2.4
* Wed Aug 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.3-alt1
- 2.3
* Thu Feb 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.2-alt1
- 2.2
* Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1
- initial build
</syntaxhighlight>
|}
{|class="wikitable mw-collapsible mw-collapsed" style="float:center; margin-left:2em"
!Шаблон без комментариев на русском для продакшена
|-
|
<syntaxhighlight lang="spec">
Name: hello
Version: 2.10
Release: alt1.1
Summary: GNU hello, THE greeting printing program
Group: Development/C
License: GPLv3+
Url: ftp://ftp.gnu.org/gnu/hello/
Source: %name-%version.tar.gz
# explicitly added texinfo for info files
BuildRequires: texinfo
%description
The GNU `hello' program produces a familiar, friendly greeting.  It
allows nonprogrammers to use a classic computer science tool which
would otherwise be unavailable to them.  Because it is protected by the
GNU General Public License, users are free to share and change it.
%prep
%setup -a0
%build
%autoreconf
%configure
%make_build
%install
%makeinstall
%find_lang %name
%files -f %name.lang
%doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO
%doc %name-%version
%_bindir/*
%_infodir/*
%_mandir/man?/*
%changelog
* Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1
- NMU: added BR: texinfo
* Mon Nov 17 2014 Fr. Br. George <george@altlinux.ru> 2.10-alt1
- Autobuild version bump to 2.10
- Use autoreconf for educational purpose
- Add full source tree in documentation
* Thu Apr 17 2014 Fr. Br. George <george@altlinux.ru> 2.9-alt1
- Autobuild version bump to 2.9
* Mon Apr 15 2013 Dmitry V. Levin (QA) <qa_ldv@altlinux.org> 2.4-alt2.qa1
- NMU: rebuilt for debuginfo.
* Thu May 21 2009 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt2
- remove obsolete %%{,un}install_info calls
* Sat Dec 13 2008 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt1
- 2.4
* Wed Aug 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.3-alt1
- 2.3
* Thu Feb 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.2-alt1
- 2.2
* Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1
- initial build
</syntaxhighlight>
|}
Наш каталог:
home
└──hello <- Мы сейчас здесь
    ├── hello <- В прошлом шаге мы переименовали каталог с исходным кодом для совпадения имени репы исходного кода и пакета
    ├── hello.spec <- Файл спека, который мы создали
    ├── .gear
    └── .git
=== Внесение изменений в Git ===
После того, как мы внесли код, спек и настроили хэшер, внесенные изменения надо внести в Git.
Для этого переходим в каталог hello, в котором мы находились в предыдущем шаге и вносим коммит:
$ git add .
$ git commit -am "Initial commit"


=== Сборка в Hasher ===
=== Сборка в Hasher ===
Чтобы собрать пакет в Hasher перейдите в корневой каталог проекта и выполните команду:
$ gear --hasher -- hsh --no-sisyphus-check -v
Для пересборки пакета (в случае исправления опечатки или ещё каких-то изменений без изменения зависимостей) пакет можно пересобрать командами:
$ gear --hasher -- hsh-rebuild --no-sisyphus-check -v


=== Отправка в git.alt ===
=== Отправка в git.alt ===
<...>
==Создание пакета на основе существующего==
===Создание нового пакета на основе существующего===
Например, в Git-репозитории ALT Linux уже есть утилитка Hello, которая подойдет для начинающих сборщиков пакетов.
https://git.altlinux.org/gears/h/hello.git.
==== Подготовка Git-репозитория ====
Первым делом нужно создать Git-репозиторий для этого пакета. Для этого мы создадим каталог и склонируем в него git-репозиторий.
$ mkdir MyRepos
$ cd MyRepos
MyRepos$ git clone https://git.altlinux.org/gears/h/hello.git
Наш каталог:
home
└── MyRepos <- Мы сейчас здесь
    └── hello <- Склонированный репозиторий Git
Перейдем в каталог репозитория:
$ cd hello
==== Содержимое репозитория ====
hello
├── .gear
├── .git
├── hello
└── hello.spec


-----
====Проверка .gear/rules====
Перейдем в каталог .gear
hello$ cd .gear


См. [[Сборка пакета с нуля]]
hello
├── .gear <- Мы сейчас здесь
│  └── rules <- Смотрим этот файл
├── .git
├── hello
└── hello.spec


==Создание пакета на основе существующего==
.gear$ cat rules
tar.gz: hello
 
Правило {{cmd|tar.gz: hello}}, указывает, что каталог hello упаковывается в hello.tar.gz.
 
====Сборка====
Переходим в каталог выше:
.gear$ cd ..
 
hello <- Мы сейчас здесь
├── .gear
├── .git
├── hello
└── hello.spec
 
И запускаем сборку:
$ gear --hasher -- hsh --no-sisyphus-check -v
 
====Готовый пакет====
Готовый пакет расположен по адресу:
 
{{path|/home/user/hasher/repo/x86_64/RPMS.hasher}}
 
==="Воскрешение" "умершего" пакета===


==Сборка пакета из srcrpm==
==Сборка пакета из srcrpm==
Строка 131: Строка 569:
*возможно, разнообразные патчи и дополнения.
*возможно, разнообразные патчи и дополнения.


Пакет '''<nowiki>*</nowiki>.src.rpm''' можно использовать только для сборки двоичных пакетов, но не установки.
Т.е. однажды разработчик все приготовил для того, чтобы собрать программу и упаковать ее в пакет, "заархивировал" все это в специальный файл и теперь вместо того чтобы все делать по новой (например, при обновлении программы), достаточно скачать данный пакет, подправить его содержимое и некоторые параметры и собрать новый пакет.
 
Пакет '''<nowiki>*</nowiki>.src.rpm''' можно использовать только для сборки двоичных пакетов, но не для установки.


Сборка осуществляется командой:
Сборка осуществляется командой:
  rpmbuild --rebuild package.src.rpm
  $ hsh --no-sisyphus-check -v ~/hasher '/home/user/Загрузки/hello-2.10-alt1.1.src.rpm'


В итоге получится готовый <nowiki>*</nowiki>.rpm-пакет который можно установить командой:
====Готовый пакет====
  # rpm -Uvh package.rpm
Готовый <nowiki>*</nowiki>.rpm-пакет расположен по адресу:
 
{{path|/home/user/hasher/repo/x86_64/RPMS.hasher}}
 
Его можно установить командой:
  # rpm -Uvh hello-2.10-alt1.1.rpm
 
=Некоторые команды=
==Пересобрать пакет без пересборки окружения==
gear --hasher -- hsh-rebuild
==Войти в chroot сборки==
hsh-shell


=Глоссарий=
=Глоссарий=
*Gear - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет,тарболл или просто экспортировать результаты выполненияправил (gear-rules) в определённый каталог.  
*'''Gear''' - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет, тарболл или просто экспортировать результаты выполнения правил (gear-rules) в определённый каталог.
*Hasher - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью.  
*'''Git''' - консольная утилита, для отслеживания и ведения истории изменения файлов, в проекте. Она отслеживает и фиксирует изменения в файлах и сохраняет их в специальных "снимках" - коммитах.
*Исходный код - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции.  
*'''Hasher''' - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью.  
*Патч (Patch) - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности
*'''GPG''' - программа шифрования информации с публичным ключом. Используется для подписи пакетов чтобы подтвердить подлинность разработчика, который выпустил данный пакет.
*Спек (Spec) - файл содержащий инструкции для программы rpmbuild, необходимые для сборки пакета.
*'''RPM''' - формат пакетов программного обеспечения и утилита для установки данных пакетов. Так же у RPM существуют утилиты для сборки пакетов из специально приготовленных пакетов с исходным кодом.
*'''SSH''' -  это защищенный сетевой протокол для удаленного управления операционной системой с помощью командной строки и передачи данных в зашифрованном виде. Он используется для передачи данных между разработчиком и сервером с пакетами.
*'''Исходный код''' - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции.  
*'''Патч (Patch)''' - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности
*'''Спек (Spec)''' - файл, содержащий инструкции для программы rpmbuild, необходимые для сборки пакета.
 
=Источники=
=Источники=
*[[О стратегии сборки RPM пакетов]]
*[[О стратегии сборки RPM пакетов]]
Строка 154: Строка 610:
*[[SampleSpecs]]
*[[SampleSpecs]]
*[[Join/Environment]]
*[[Join/Environment]]
*[[Собираем в Hasher]]
*[[Технология сборки пакетов RPM]]
*[[Hasher/Краткое_руководство]]
{{Category navigation|title=Начинающему разработчику|category=Начинающему разработчику|sortkey={{SUBPAGENAME}}}}
[[Категория:Сборка пакетов]]

Текущая версия от 17:13, 30 августа 2024

Примечание: В примере будет участник Petya Ivanov с email - petyaivanov@altlinux.org и именем пользователя petr


Подготовка

Генерация ключей

Примечание: Основная статья: Работа с ключами разработчика


Для доступа к инфраструктуре ALT Linux нужны два открытых ключа: SSH и GPG. SSH ключ будет обеспечивать защищенное подключение к ресурсам ALT Linux Team, а GPG необходим для подписи пакетов.

SSH

Для работы с git-репозиториями ALT нужен будет SSH-ключ, который нужно сгенерировать. Его можно создать согласно инструкции с этой страницы.

$ ssh-keygen -t ED25519
Генерация ключа проходит следующим образом:
$ ssh-keygen -t ED25519
Generating public/private ED25519 key pair.
Enter file in which to save the key (/home/petr/.ssh/id_ed25519):// Указывается место сохранения открытого и закрытого ключей (в скобках указан путь по-умолчанию) Жмем Enter
Enter passphrase (empty for no passphrase): // Вводим пароль от ключа 
Enter same passphrase again: // Повторяем пароль
Your identification has been saved in /home/petr/.ssh/id_ed25519. // Путь закрытого ключа
Your public key has been saved in /home/petr/.ssh/id_ed25519.pub. // Путь открытого ключа
The key fingerprint is:
SHA256:hWKLApBzHoGmrl/jG8E92WzrDqFZ6jTUsHZP+G6A440 petr@alt-petr
The key's randomart image is:
+--[ED25519 256]--+
 |.o..             |
 |=.o      .       |
 |++ .. o . .      |
 |.... B B .       |
 |. . B.@ S        |
 | . +oB.B .       |
 |.  .X+..+        |
 |.  =E+.+.        |
 | .. +. o+        |
 +----[SHA256]-----+

Публичная часть ключа — файл ~/.ssh/id_ed25519.pub.

GPG-ключ

Для подписи пакетов нужна открытая часть ключа. Следующими командами мы сгенерируем GPG-ключ и экспортируем в файл gpgkey.pub открытую часть.

$ gpg --gen-key
$ gpg --armor --export petyaivanov@altlinux.org > gpgkey.pub
Генерация ключа проходит следующим образом:
$ gpg --gen-key
Выберите тип ключа:
   (1) RSA и RSA (по умолчанию)
   (2) DSA и Elgamal
   (3) DSA (только для подписи)
   (4) RSA (только для подписи)
Ваш выбор? 1
длина ключей RSA может быть от 1024 до 4096 бит.
Какой размер ключа Вам необходим? (2048) 4096
Запрошенный размер ключа - 4096 бит
Выберите срок действия ключа.
         0 = без ограничения срока действия
      <n>  = срок действия - n дней
      <n>w = срок действия - n недель
      <n>m = срок действия - n месяцев
      <n>y = срок действия - n лет
Срок действия ключа? (0) 
Срок действия ключа не ограничен
Все верно? (y/N) y

Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его
из Вашего имени, комментария и адреса электронной почты в виде:
    "Baba Yaga (pensioner) <yaga@deepforest.ru>" 

Ваше настоящее имя: Petya Ivanov
Адрес электронной почты: petyaivanov@altlinux.org
Комментарий: community member
Вы выбрали следующий ID пользователя:
    "Petya Ivanov (community member) <petyaivanov@altlinux.org>"

Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? O
Для защиты секретного ключа необходима фраза-пароль.
//тут вводится фраза-пароль
Необходимо сгенерировать много случайных чисел. Желательно, чтобы Вы
выполняли некоторые другие действия (печать на клавиатуре, движения мыши,
обращения к дискам) в процессе генерации; это даст генератору
случайных чисел больше возможностей получить достаточное количество энтропии.
.............+++++
........+++++
..ll.....,..t.h..h.t.h.hm.t.h..to.m.pt.m..m.p+++++
m+++++
gpgpg: /home/petr/.gnupg/trustdb.gpg: создана таблица доверия
gpg: ключ 53DE950D помечен как абсолютно доверенный.
открытый и секретный ключи созданы и подписаны.

gpg: проверка таблицы доверия
gpg: требуется 3 с ограниченным доверием, 1 с полным, модель доверия PGP
gpg: глубина: 0  верных:   1  подписанных:   0  доверие: 0-, 0q, 0n, 0m, 0f, 1u
pub   4096R/53DE950D 2023-10-06
      Отпечаток ключа = 57C3 4384 526A F344 424C  30C0 A0DC 9D85 53DE 950D
uid                  Petya Ivanov (community member) <petyaivanov@altlinux.org>
sub   4096R/D32A2F02 2023-10-06

Инструменты для сборки

В ALT Linux для сборки есть два инструмента.

  • Hasher - для сборки в изолированном окружении chroot.

В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке).

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

Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой новой сборке в Hasher.

  • Gear - для сборки пакетов из репозитория Git.

В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в .gear/rules.

Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.

Установка инструментов для сборки

Для сборки пакетов нам понадобятся:

  • Любой удобный текстовый редактор (Vim, Emacs, mcedit);
  • Система управления версиями Git
  • Сборочная среда Hasher
  • Инфраструктура Gear
  • Утилиты RPM для сборки пакетов
  • Инструменты для сборки программ: gcc, make, python, patch.
  • Утилита для импорта проектов с Github
  • Доступ к репозиторию пакетов

Установка:

# apt-get install mc git hasher hasher-priv gear gcc make python patch rpmdevtools rpm-utils rpm-build rpmlint rpm-build-licenses github2spec

Настройка Git

Чтобы у нашего Git-репозитория была идентификация, что именно мы занимаемся сборкой пакетов, его нужно настроить.

Следующими командами мы, для создаваемых вновь GIT репозиториев, настроим:

  • имя
  • адрес
  • идентификатор ключа:
$git config --global user.name 'Petya Ivanov'
$git config --global user.email 'petyaivanov@altlinux.org'
$git config --global user.signingkey '835560D9'

Третья команда задаёт идентификатор вашего GPG-ключа для подписи.

Чтобы узнать этот идентификатор, выполните одну из следующих команд:

$ gpg --list-keys | grep -B 1 'Petya Ivanov'
pub   1024D/835560D9 2023-05-15
uid                  Petya Ivanov (ALT Linux Team) <petyaivanov@altlinux.ru>

или

$ gpg --list-secret-keys
------------------------------
sec   1024D/835560D9 2023-05-15
uid                  Petya Ivanov (ALT Linux Team) <petyaivanov@altlinux.ru>

Работа с Git

Основы работы с Git-репозиторием описаны в указанной ниже статье.

Настройка Hasher

Чтобы настроить сборочную среду Hasher нужно выполнить два действия - добавить пользователя в соответствующие группы и создать конфигурационный файл.

Примечание: После добавления пользователя в группу Hasher, для применения параметров, необходимо выполнить ре-логин в систему (в GUI или в консоли - в зависимости от того, где вы работаете)

Добавление пользователя в группу

Из-под под root:

$ su -
# hasher-useradd <существующий пользователь>

Например:

# hasher-useradd petr
Добавление пользователя petr в группу petr_a
Добавление пользователя petr в группу petr_b
Добавление пользователя petr в группу hashman

Создание конфигурационного файла

Так же необходимо создать пользователю в домашнем каталоге файл .hasher/config:

$ mkdir ~/.hasher
$ mcedit ~/.hasher/config

Вставляем в файл следующее содержимое:

packager="Petya Ivanov <petyaivanov@altlinux.org>"
USER=petr
#workdir="/tmp/.private/petr/"
workdir="$HOME/hasher"
target=x86_64
packager="`rpm --eval %packager`"
#apt_config="$HOME/.hasher/apt.conf"
mount=/dev/pts,/proc

Тут смотрите на строки с командами:

  • packager ... - тут должны быть ваше имя и email
  • 'USER=petr' - тут должно быть ваше имя пользователя, которое вы завели в hasher-useradd
  • target - тут должна быть архитектура, под которую будут собираться пакеты, i586 или x86_64
  • workdir - временная папка. /tmp - обозначает, что данные будут загружаться в tmpfs (в оперативную память) и, соответственно, собираться быстрее. Если у вас не так много оперативной памяти, укажите локальный каталог, например $HOME/hasher

Инициализация окружения Hasher

Примечание: Данную команду нужно выполнять после ре-логина или перезагрузки
Примечание: Если вы указали использовать вместо оперативной памяти каталог на жестком диске, проверьте, существует ли данный каталог, и если его нет создайте его командой mkdir ~/hasher
$ hsh -v --initroot-only
Примечание: FAQ по Hasher


Настройка окружения RPM

Для настройки сборки RPM-пакетов (чтобы указать в них кто собрал данный пакет и подпись разработчика) нужно создать в домашнем каталоге файл .rpmmacros.

Отредактируйте файл ~/.rpmmacros (конечно, заменив ключ и имя мейнтейнера на свои):

$ mcedit ~/.rpmmacros
"%packager Petya Ivanov <petyaivanov@altlinux.org>"
"%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9"

Визуально проверьте файл на соответствие ожидаемому:

$ cat ~/.rpmmacros

Что указывается в %_gpg_name?

Примечание: Обратите внимание, в качестве одного из аргументов используется краткий идентификатор ключа. Мы его получили в шаге настройки Git.

В %_gpg_name указывается отпечаток ключа (а не краткий идентификатор, как для Git). Получить его можно командой:

$ LANG=C gpg --fingerprint 835560D9 | grep 'fingerprint =' | tr -d ' ' | cut -d= -f2
1B40E49FD40245D0472E4C5FD9528003835560D9

или

$ gpg --fingerprint 835560D9 | sed -n '/.*=/{s/.*=/%_gpg_name\t/;s/ //gp}'
%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9

Виды сборки пакетов

Создание пакета с нуля

Для примера мы попробуем собрать утилиту Hello.

Подготовка репозитория Git

Первым делом нужно создать Git-репозиторий для нужного пакета. Для этого мы создадим каталог и инициализируем в нем git-репозиторий.

$ mkdir hello
$ cd hello
hello$ git init .

Наш каталог:

home
└── hello <- Мы сейчас здесь
   └── .git <- Служебный каталог Git

Написание .gear/rules

В созданной папке hello создаем каталог .gear и в нем файл rules:

hello$ mkdir .gear
hello$ cd .gear
.gear$ mcedit rules 

Наполняем файл следующей строкой и сохраняем его:

Примечание: В более сложных пакетах используется конструкция вида tar.gz: . name=hello base=hello
tar.gz: hello
  • Указанная строка tar.gz:hello указывает, что будет создан архив с нашим каталогом hello.

Наш каталог:

home
└── hello
    ├── .gear <- Мы сейчас здесь
    │   └── rules <- Мы создали этот файл
    └── .git

Импорт исходного кода

Исходный код Hello лежит на FTP: https://ftp.gnu.org/gnu/hello/.

Выходим из папки .gear в каталог выше и клонируем в него исходный код.

.gear$ cd ..
hello$ wget https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
hello$ tar xzvf hello-2.10.tar.gz
hello$ rm hello-2.10.tar.gz

Наш каталог:

home
└── hello  <- Мы сейчас здесь
    ├── hello-2.10 <- Мы распаковали исходный код программы сюда
    ├── .gear
    └── .git
Примечание: Т.к. для Hasher-а нужно, чтобы имя пакета в spec-е и имя репозитория совпадали (а пакет у нас будет называться hello, а не hello-2.10), мы переименуем каталог с исходным кодом в соответствии с именем пакета
hello$ mv hello-2.10 hello

Написание спека

Теперь нам нужно создать файл спека (spec).

Создадим в каталоге, где мы собираемся собирать программу этот файл.

hello$ mcedit hello.spec

Добавляем в файл следующие строки:

Примечание: RPMBuild не поддерживает комментарии на русском языке, поэтому используйте на практике вариант без них.


Шаблон с комментариями на русском для изучения
#Название пакета
Name: hello
#Версия программы
Version: 2.10
#Номер сборки в текущем бранче
Release: alt1.1

Summary: GNU hello, THE greeting printing program
#Группа в меню ([[Ярлычки_программ#Категории|см. здесь]])
Group: Development/C
#Лицензия
License: GPLv3+

#Сайт программы

Url: ftp://ftp.gnu.org/gnu/hello/

Source: %name-%version.tar.gz
# explicitly added texinfo for info files


#Зависимость для сборки

BuildRequires: texinfo

#Описание на английском

%description
The GNU `hello' program produces a familiar, friendly greeting.  It
allows nonprogrammers to use a classic computer science tool which
would otherwise be unavailable to them.  Because it is protected by the
GNU General Public License, users are free to share and change it.

#Команды сборки

%prep
%setup -a0

%build
%autoreconf
%configure
%make_build

%install
%makeinstall
%find_lang %name

%files -f %name.lang
%doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO
%doc %name-%version
%_bindir/*
%_infodir/*
%_mandir/man?/*

#История изменений

%changelog
* Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1
- NMU: added BR: texinfo

* Mon Nov 17 2014 Fr. Br. George <george@altlinux.ru> 2.10-alt1
- Autobuild version bump to 2.10
- Use autoreconf for educational purpose
- Add full source tree in documentation

* Thu Apr 17 2014 Fr. Br. George <george@altlinux.ru> 2.9-alt1
- Autobuild version bump to 2.9

* Mon Apr 15 2013 Dmitry V. Levin (QA) <qa_ldv@altlinux.org> 2.4-alt2.qa1
- NMU: rebuilt for debuginfo.

* Thu May 21 2009 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt2
- remove obsolete %%{,un}install_info calls

* Sat Dec 13 2008 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt1
- 2.4

* Wed Aug 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.3-alt1
- 2.3

* Thu Feb 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.2-alt1
- 2.2

* Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1
- initial build
Шаблон без комментариев на русском для продакшена
Name: hello
Version: 2.10
Release: alt1.1

Summary: GNU hello, THE greeting printing program
Group: Development/C
License: GPLv3+

Url: ftp://ftp.gnu.org/gnu/hello/

Source: %name-%version.tar.gz
# explicitly added texinfo for info files
BuildRequires: texinfo

%description
The GNU `hello' program produces a familiar, friendly greeting.  It
allows nonprogrammers to use a classic computer science tool which
would otherwise be unavailable to them.  Because it is protected by the
GNU General Public License, users are free to share and change it.

%prep
%setup -a0

%build
%autoreconf
%configure
%make_build

%install
%makeinstall
%find_lang %name

%files -f %name.lang
%doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO
%doc %name-%version
%_bindir/*
%_infodir/*
%_mandir/man?/*

%changelog
* Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1
- NMU: added BR: texinfo

* Mon Nov 17 2014 Fr. Br. George <george@altlinux.ru> 2.10-alt1
- Autobuild version bump to 2.10
- Use autoreconf for educational purpose
- Add full source tree in documentation

* Thu Apr 17 2014 Fr. Br. George <george@altlinux.ru> 2.9-alt1
- Autobuild version bump to 2.9

* Mon Apr 15 2013 Dmitry V. Levin (QA) <qa_ldv@altlinux.org> 2.4-alt2.qa1
- NMU: rebuilt for debuginfo.

* Thu May 21 2009 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt2
- remove obsolete %%{,un}install_info calls

* Sat Dec 13 2008 Andrey Rahmatullin <wrar@altlinux.ru> 2.4-alt1
- 2.4

* Wed Aug 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.3-alt1
- 2.3

* Thu Feb 15 2007 Andrey Rahmatullin <wrar@altlinux.ru> 2.2-alt1
- 2.2

* Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1
- initial build

Наш каталог:

home
└──hello <- Мы сейчас здесь
    ├── hello <- В прошлом шаге мы переименовали каталог с исходным кодом для совпадения имени репы исходного кода и пакета
    ├── hello.spec <- Файл спека, который мы создали
    ├── .gear
    └── .git

Внесение изменений в Git

После того, как мы внесли код, спек и настроили хэшер, внесенные изменения надо внести в Git.

Для этого переходим в каталог hello, в котором мы находились в предыдущем шаге и вносим коммит:

$ git add .
$ git commit -am "Initial commit"

Сборка в Hasher

Чтобы собрать пакет в Hasher перейдите в корневой каталог проекта и выполните команду:

$ gear --hasher -- hsh --no-sisyphus-check -v

Для пересборки пакета (в случае исправления опечатки или ещё каких-то изменений без изменения зависимостей) пакет можно пересобрать командами:

$ gear --hasher -- hsh-rebuild --no-sisyphus-check -v

Отправка в git.alt

<...>

Создание пакета на основе существующего

Создание нового пакета на основе существующего

Например, в Git-репозитории ALT Linux уже есть утилитка Hello, которая подойдет для начинающих сборщиков пакетов.

https://git.altlinux.org/gears/h/hello.git.

Подготовка Git-репозитория

Первым делом нужно создать Git-репозиторий для этого пакета. Для этого мы создадим каталог и склонируем в него git-репозиторий.

$ mkdir MyRepos
$ cd MyRepos
MyRepos$ git clone https://git.altlinux.org/gears/h/hello.git

Наш каталог:

home
└── MyRepos <- Мы сейчас здесь
   └── hello <- Склонированный репозиторий Git

Перейдем в каталог репозитория:

$ cd hello

Содержимое репозитория

hello
├── .gear
├── .git
├── hello
└── hello.spec

Проверка .gear/rules

Перейдем в каталог .gear

hello$ cd .gear
hello
├── .gear <- Мы сейчас здесь
│   └── rules <- Смотрим этот файл
├── .git
├── hello
└── hello.spec
.gear$ cat rules 
tar.gz: hello

Правило tar.gz: hello, указывает, что каталог hello упаковывается в hello.tar.gz.

Сборка

Переходим в каталог выше:

.gear$ cd ..
hello <- Мы сейчас здесь
├── .gear
├── .git
├── hello
└── hello.spec

И запускаем сборку:

$ gear --hasher -- hsh --no-sisyphus-check -v

Готовый пакет

Готовый пакет расположен по адресу:

/home/user/hasher/repo/x86_64/RPMS.hasher

"Воскрешение" "умершего" пакета

Сборка пакета из srcrpm

Примечание: Для сборки из .src.rpm нужно установить пакеты rpm-utils, rpm-build и rpm-build-licenses

В ALT Linux кроме обычных пакетов есть пакеты с исходным кодом (имеют расширение *.src.rpm).

Такой пакет содержит:

  • архив (один или несколько) с исходным кодом
  • файл Spec (далее — просто спек)
  • возможно, разнообразные патчи и дополнения.

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

Пакет *.src.rpm можно использовать только для сборки двоичных пакетов, но не для установки.

Сборка осуществляется командой:

$ hsh --no-sisyphus-check -v ~/hasher '/home/user/Загрузки/hello-2.10-alt1.1.src.rpm'

Готовый пакет

Готовый *.rpm-пакет расположен по адресу:

/home/user/hasher/repo/x86_64/RPMS.hasher

Его можно установить командой:

# rpm -Uvh hello-2.10-alt1.1.rpm

Некоторые команды

Пересобрать пакет без пересборки окружения

gear --hasher -- hsh-rebuild

Войти в chroot сборки

hsh-shell

Глоссарий

  • Gear - инструмент, позволяющий оперируя данными из git репозитория проводить сборку исходного текста в rpm пакет, тарболл или просто экспортировать результаты выполнения правил (gear-rules) в определённый каталог.
  • Git - консольная утилита, для отслеживания и ведения истории изменения файлов, в проекте. Она отслеживает и фиксирует изменения в файлах и сохраняет их в специальных "снимках" - коммитах.
  • Hasher - инструмент безопасной и воспроизводимой сборки пакетов. Все пакеты Sisyphus собираются с его помощью.
  • GPG - программа шифрования информации с публичным ключом. Используется для подписи пакетов чтобы подтвердить подлинность разработчика, который выпустил данный пакет.
  • RPM - формат пакетов программного обеспечения и утилита для установки данных пакетов. Так же у RPM существуют утилиты для сборки пакетов из специально приготовленных пакетов с исходным кодом.
  • SSH - это защищенный сетевой протокол для удаленного управления операционной системой с помощью командной строки и передачи данных в зашифрованном виде. Он используется для передачи данных между разработчиком и сервером с пакетами.
  • Исходный код - часть программного обеспечения, с которой программисты работают, чтобы изменить работу приложения или добавить новые функции.
  • Патч (Patch) - программное средство, используемое для устранения проблем в программном обеспечении или изменения его функциональности
  • Спек (Spec) - файл, содержащий инструкции для программы rpmbuild, необходимые для сборки пакета.

Источники