Инструкция по сборке пакетов с помощью rpm: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
м (+примечание по %_tmppath)
 
(не показано 7 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{attention|Действия пунктов 2, 3 и 5 настоящей инструкции выполняются от пользователя!}}
{{attention|Действия пунктов 1 и 4 настоящей инструкции выполняются с административными правами (root)!}}




'''1. Установка необходимых пакетов для процесса сборки'''
'''1. Установка необходимых пакетов для процесса сборки'''


<code>apt-get install rpm-build</code>
<code>'''#''' apt-get install rpm-build</code>




'''2. Установка src.rpm пакета нужного ПО, которое требуется собрать'''
'''2. Установка src.rpm пакета нужного ПО, которое требуется собрать'''


Находим и качаем src.rpm пакет нужного ПО, которое будем собирать, и устанавливаем его:
Находим и качаем src.rpm пакет нужного ПО, которое будем собирать, и устанавливаем его (от пользователя!):


<code>rpm -i название_пакета_с_версией.src.rpm</code>
<code>'''$''' rpm -i название_пакета_с_версией.src.rpm</code>


При этом исходники (исходный код) пакета разместятся в {{path|~/RPM/SOURCES}}, а [[Spec|спек]] — в {{path|~/RPM/SPECS}}.<br>Наличие исходного кода программного обеспечения и спека, т.е. описания процесса сборки, является необходимым и достаточным условием для самой процедуры сборки rpm пакета (или пересборки, например, пакета из более нового [[Branches|бранча]] для более старого).
При этом исходники (исходный код) пакета разместятся в {{path|~/RPM/SOURCES}}, а [[Spec|спек]] — в {{path|~/RPM/SPECS}}.<br>Наличие исходного кода программного обеспечения и спека, т.е. описания процесса сборки, является необходимым и достаточным условием для сборки rpm пакета (или пересборки, например, пакета из более нового [[Branches|бранча]] для более старого).


{{Note|Также см. [[Spec/Предопределенные_макросы|Предопределённые макросы в spec]] для расширения кругозора.}}
{{Note|Также см. [[Spec/Предопределенные_макросы|Предопределённые макросы в spec]] для расширения кругозора.}}
{{Note|Может потребоваться создание каталога <tt>~/tmp</tt>:


<code>'''$''' install -dm700 ~/tmp</code>
либо указание иного существующего и доступного по записи каталога как <tt>%_tmppath</tt> в <tt>~/.rpmmacros</tt>}}


'''3. Сборка пакета'''
'''3. Сборка пакета'''
Строка 22: Строка 26:
Приступаем к сборке, делается это командой:
Приступаем к сборке, делается это командой:


<code>rpm -ba --target (i586|x86_64) ~/RPM/SPECS/имя_спека_нужного_пакета_для_сборки.spec</code>
<code>'''$''' rpm -ba --target (i586|x86_64) ~/RPM/SPECS/имя_спека_нужного_пакета_для_сборки.spec</code>


При этом необходимо раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.
При этом необходимо раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.
Строка 29: Строка 33:
{{Note|Пересобрать пакет без его установки (распаковки) можно и так:
{{Note|Пересобрать пакет без его установки (распаковки) можно и так:


<code>rpmbuild --rebuild --target (i586/x86_64) название_пакета_с_версией.src.rpm</code>
<code>'''$''' rpmbuild --rebuild --target (i586/x86_64) название_пакета_с_версией.src.rpm</code>


При этом необходимо также раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.}}
При этом необходимо также раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.}}
{{Note|Что касается процессоров, не относящихся к семейству x86_64, то само по себе указание "--target i586" опционально (сборка отработает и без него, но при этом компилятор соберет пакет, точно заточенный под Ваш тип процессора и наименование пакета будет отличаться от наименования пакетов бранчей, к примеру, xxx.athlon.rpm или xxx.pentium4.rpm). Отсутствие параметра "--target i586" при сборке совершенно не гарантирует устанавливаемость собранного таким образом пакета на другом компьютере с другим процессором. Если же сборка совершается под 64-битную систему (на 64-битном процессоре с установленной 64-битной системой), то ключ "--target x86_64" теряет свой смысл и ставить его совершенно не обязательно.}}
{{Note|Что касается процессоров, не относящихся к семейству x86_64, то само по себе указание "--target i586" опционально (сборка отработает и без него, но при этом компилятор соберет пакет, точно заточенный под Ваш тип процессора и наименование пакета будет отличаться от наименования пакетов бранчей, к примеру, xxx.athlon.rpm или xxx.pentium4.rpm). Отсутствие параметра "--target i586" при сборке совершенно не гарантирует устанавливаемость собранного таким образом пакета на другом компьютере с другим процессором. Если же сборка совершается под 64-битную систему (на 64-битном процессоре с установленной 64-битной системой), то ключ "--target x86_64" теряет свой смысл и ставить его совершенно не обязательно.}}
{{Note|Если {{cmd|[[Rpm|rpm]]}} ругается на не найденные макросы примерно так: "ошибка: Macro %groupadd not found" или "ошибка: Macro %license not found", то помочь в дальнейшей сборке пакета должна установка в систему одного из пакетов rpm-build-*, который, фактически, является дополнительной зависимостью для сборки (пересборки) вашего пакета и отвечает за присвоение требуемых значений этим самым не найденным макросам. В качестве факультатива можно поглядеть [[RPMMacrosDescription|описание макросов rpm]].}}
{{Note|Если {{cmd|[[Rpm|rpm]]}} ругается на не найденные макросы примерно так: "ошибка: Macro %groupadd not found" или "ошибка: Macro %license not found", то помочь в дальнейшей сборке пакета должна установка в систему одного из пакетов {{pkg|rpm-build-*}}, который, фактически, является дополнительной зависимостью для сборки (пересборки) вашего пакета и отвечает за присвоение требуемых значений этим самым не найденным макросам.}}




'''4. Установка сборочных зависимостей'''
'''4. Установка сборочных зависимостей'''


Почти 100% сборка сразу не пойдёт — в самом начале вывода в консоли будут показаны пакеты, которые должны быть установлены в систему, прежде чем сборка сможет пойти далее. Вы их (эти выведенные в консоль зависимости сборки) установите
Если имеется srpm пакет, для сборки которого необходимо установить зависимости, то это можно сделать, выполнив следующую команду:


<code>apt-get install пакет1 пакет2 пакет3 ...</code>
<code>'''#''' apt-get build-dep  название_пакета_с_версией.src.rpm</code>
 
Если srpm пакета нет и имеется отдельно спек и исходный код, то почти 100% сборка сразу не пойдёт — в самом начале вывода в консоли будут показаны пакеты, которые должны быть установлены в систему, прежде чем сборка сможет пойти далее. Вы их (эти выведенные в консоль зависимости сборки) установите
 
<code>'''#''' apt-get install пакет1 пакет2 пакет3 ...</code>


а после повторите сборку (возврат к шагу 3).
а после повторите сборку (возврат к шагу 3).


Для автоматической установки пакетов, необходимых для сборки пакета, можно выполнить следующую команду (от root):
<code>apt-get build-dep  название_пакета_с_версией.src.rpm</code>




'''5. Автоматический поиск зависимостей для вновь собираемого пакета'''
'''5. Автоматический поиск зависимостей для вновь собираемого пакета'''


Если вы собираете новый пакет, а не пересобираете уже существующий srpm, то хорошим подспорьем в рамках оформления (поиска и прописывания) нужных зависимостей в спек вам послужит утилита {{cmd|[[Buildreq|Buildreq]]}}:
Если вы собираете новый пакет, а не пересобираете уже существующий srpm, то хорошим подспорьем в рамках оформления (поиска и прописывания) нужных зависимостей в спек вам послужит утилита {{cmd|[[buildreq]]}} из пакета {{pkg|rpm-utils}}:
 
<code>buildreq имя_спек_файла.spec</code>


<code>'''$''' buildreq имя_спек_файла.spec</code>


[[Категория:RPM]]
{{Category navigation|title=Сборка пакетов|category=Сборка пакетов|sortkey={{SUBPAGENAME}}}}
[[Категория:HOWTO]]
[[Категория:Полезно]]
[[Категория:Полезно]]

Текущая версия от 12:21, 4 марта 2022

Внимание! Действия пунктов 1 и 4 настоящей инструкции выполняются с административными правами (root)!


1. Установка необходимых пакетов для процесса сборки

# apt-get install rpm-build


2. Установка src.rpm пакета нужного ПО, которое требуется собрать

Находим и качаем src.rpm пакет нужного ПО, которое будем собирать, и устанавливаем его (от пользователя!):

$ rpm -i название_пакета_с_версией.src.rpm

При этом исходники (исходный код) пакета разместятся в ~/RPM/SOURCES, а спек — в ~/RPM/SPECS.
Наличие исходного кода программного обеспечения и спека, т.е. описания процесса сборки, является необходимым и достаточным условием для сборки rpm пакета (или пересборки, например, пакета из более нового бранча для более старого).

Примечание: Также см. Предопределённые макросы в spec для расширения кругозора.
Примечание: Может потребоваться создание каталога ~/tmp:

$ install -dm700 ~/tmp

либо указание иного существующего и доступного по записи каталога как %_tmppath в ~/.rpmmacros


3. Сборка пакета

Приступаем к сборке, делается это командой:

$ rpm -ba --target (i586|x86_64) ~/RPM/SPECS/имя_спека_нужного_пакета_для_сборки.spec

При этом необходимо раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.

Собранные пакеты разместятся в ~/RPM/RPMS.

Примечание: Пересобрать пакет без его установки (распаковки) можно и так:

$ rpmbuild --rebuild --target (i586/x86_64) название_пакета_с_версией.src.rpm

При этом необходимо также раскрыть скобки в зависимости от архитектуры, под которую происходит сборка пакета.
Примечание: Что касается процессоров, не относящихся к семейству x86_64, то само по себе указание "--target i586" опционально (сборка отработает и без него, но при этом компилятор соберет пакет, точно заточенный под Ваш тип процессора и наименование пакета будет отличаться от наименования пакетов бранчей, к примеру, xxx.athlon.rpm или xxx.pentium4.rpm). Отсутствие параметра "--target i586" при сборке совершенно не гарантирует устанавливаемость собранного таким образом пакета на другом компьютере с другим процессором. Если же сборка совершается под 64-битную систему (на 64-битном процессоре с установленной 64-битной системой), то ключ "--target x86_64" теряет свой смысл и ставить его совершенно не обязательно.
Примечание: Если rpm ругается на не найденные макросы примерно так: "ошибка: Macro %groupadd not found" или "ошибка: Macro %license not found", то помочь в дальнейшей сборке пакета должна установка в систему одного из пакетов rpm-build-*, который, фактически, является дополнительной зависимостью для сборки (пересборки) вашего пакета и отвечает за присвоение требуемых значений этим самым не найденным макросам.


4. Установка сборочных зависимостей

Если имеется srpm пакет, для сборки которого необходимо установить зависимости, то это можно сделать, выполнив следующую команду:

# apt-get build-dep название_пакета_с_версией.src.rpm

Если srpm пакета нет и имеется отдельно спек и исходный код, то почти 100% сборка сразу не пойдёт — в самом начале вывода в консоли будут показаны пакеты, которые должны быть установлены в систему, прежде чем сборка сможет пойти далее. Вы их (эти выведенные в консоль зависимости сборки) установите

# apt-get install пакет1 пакет2 пакет3 ...

а после повторите сборку (возврат к шагу 3).


5. Автоматический поиск зависимостей для вновь собираемого пакета

Если вы собираете новый пакет, а не пересобираете уже существующий srpm, то хорошим подспорьем в рамках оформления (поиска и прописывания) нужных зависимостей в спек вам послужит утилита buildreq из пакета rpm-utils:

$ buildreq имя_спек_файла.spec