1

Всем доброго времени суток.

Предисловие

Spoiler

Я недавно создавал тему No space left on device в этом разделе. После я для проверки решил установить вручную Mageia с минимальным набором пакетов в chroot и повторить сборку. Сборка прошла успешно, выходит что проблема была в aum++. Разбираться в коде на C++ у меня не было ни времени, ни желания, но и вручную каждый раз ставить систему в chroot - слишком муторно. Имеющиеся скрипты от WildPile не обновлялись с Mageia 2, да и не дают должной автоматизации, не умеют генерировать тарболлы с Mageia и т.д.

По этому я решил написать на Bash свои скрипты, которые бы могли автоматизировать процесс сборки пакетов и предоставить необходимые мне возможности.

Набор скриптов я назвал mageia-chroot (в перспективе, допишу еще скрипты, которые не для сборки пакетов предназначены, а для других целей при работе с chroot, отсюда и название). И теперь, когда скрипты для генерации тарболлов с Mageia и сборки пакетов готовы, я выкладываю их в публичный доступ под лицензией GNU GPL v3.0 или более поздней.

Забегая вперед, чтобы вам не читать портянку текста, а сразу прикинуть надо ли оно вам. Сборка выглядит так:

./mageia-chroot.rpmbuild -t тарбол_с_mageia.tar.gz пакет_1.src.rpm пакет_2.src.rpm пакет_3.src.rpm ... пакет_n.src.rpm

Например буквально полчаса назад пересобрал (бекпортировал) widelands b18 для mageia 4 на основе src.rpm из cauldron'а (в aum++ у меня этот же src.rpm не собирался, это не камень в огород aum++, просто конкретный пример)
[console=root]./mageia-chroot.rpmbuild -t Mageia4_i586.tar.gz widelands-b18-2.mga4.mrc.src.rpm[/console]

--------

Итак, небольшое howto.

Сами скрипты берем в git-репозитории на bitbucket: https://bitbucket.org/xxblx/mageia-chroot

Первое, что нужно сделать - сгенерировать тарболл с mageia.
Для этого нужно использовать mageia-chroot.tarball

Spoiler

[console=root]./mageia-chroot.tarball -d http://ftp.belnet.be/mageia/distrib/4/i586 -p /каталог_где_будет_chroot/ -m /желаемый_rpmmacros[/console]

По умолчанию каталог для chroot - /mnt/chroot, если устраивает можно без -p. Указывать rpmmacros тоже необязательно, но чтобы собирать с префиксом mrc, указывайте свой .rpmmacros.
Если каталог для результата (ключ -o) не был указан, тарболл будет создан в том каталоге, откуда скрипт запущен. Хотите сменить, добавляйте ключ и путь

Spoiler

[console=root]./mageia-chroot.tarball -d http://ftp.belnet.be/mageia/distrib/4/i586 -p /каталлог_где_будет_chroot/ -m /желаемый_rpmmacros -o /куда_класть_тарбол/[/console]

Пример:

Spoiler

[console=root]./mageia-chroot.tarball -d http://ftp.belnet.be/mageia/distrib/4/i586 -p /mnt/mageia-chroot -m /home/xxblx/.rpmmacros -o /tmp[/console]
В этом случае, будет использовано зеркало репозитория ftp.belnet.be, каталог под chroot - /mnt/mageia-chrott, rpmmacros будет взят из моего ~/, а полученный тарболл будет размещен в /tmp.

Конкретный репозиторий можно не указывать, но тогда нужно указать релиз и архитектуру

Spoiler

[console=root]./mageia-chroot.tarball -r 4 -a i586 -p /каталог_где_будет_chroot/ -m /желаемый_rpmmacros[/console]

В этом случае, зеркало будет выбрано автоматически, исходя из вашего местоположения.

Пример:

Spoiler

[console=root]./mageia-chroot.tarball -r 4 -a i586 -p /mnt/mageia-chroot -m /home/xxblx/.rpmmacros -o /tmp[/console]

Подробней про mageia-chroot.tarball см. в справке (ключ -h) или в вики проекта на bitbucket: https://bitbucket.org/xxblx/mageia-chro … ot.tarball

Когда тарбол есть, можно собирать пакеты.
ВАЖНО! В вводимой команде ключи с параметрами (-t -o -d -m) ВСЕГДА должны стоять ПЕРЕД src.rpm'ами. Если какой-то ключ после src.rpm'ов будет, он будет проигнорирован. Так уж башевский getopts работает, никуда не денешься.

Сама сборка в общем виде

Spoiler

[console=root]./mageia-chroot.rpmbuild -t тарболл.tar.gz пакет.src.rpm[/console]

Пример:

Spoiler

[console=root]./mageia-chroot.rpmbuild -t Mageia4_i586.tar.gz widelands-b18-2.mga4.mrc.src.rpm[/console]

Можете указывать сразу несколько src.rpm'ов по очереди в команде, в этом же порядке очереди они и будут собраны. Chroot будет почищен после каждого пакета, так что при указании сразу нескольких src.rpm'ов с buildrequires все будет в порядке.

Spoiler

[console=root]./mageia-chroot.rpmbuild -t тарболл.tar.gz пакет1.src.rpm пакет2.src.rpm пакет3.src.rpm пакет4.src.rpm и т.д.[/console]

По умолчанию, собранные rpm'ы складываются в тот каталог, откуда скрипт запущен.
Если хотите указать указать другой каталог, используйте ключ -o

Spoiler

[console=root]./mageia-chroot.rpmbuild -t тарболл.tar.gz -o /куда_класть_готовый_rpm/ пакет.src.rpm[/console]

Если вам помимо официального зеркала, которые было добавлено в chroot-систему на стадии генерации образа, нужен какой-то дополнительный репозиторий, используйте ключ -d

Spoiler

[console=root]./mageia-chroot.rpmbuild -t тарболл.tar.gz -d http://packages.mageia.org.ru/mageia4/i586/ пакет.src.rpm[/console]

Пример:

Spoiler

[console=root]./mageia-chroot.rpmbuild -t Mageia4_i586.tar.gz -d http://packages.mageia.org.ru/mageia4/i586/ -o /tmp widelands-b18-2.mga4.mrc.src.rpm[/console]
При сборке дополнительно будет подключен репозиторий MRC для Mageia 4 i586, собранные пакеты будут расположены в /tmp

Если нужно задействовать какой-то rpmmacros при сборке пакета, используйте ключ -m

Spoiler

[console=root]./mageia-chroot.rpmbuild -t тарболл.tar.gz -m /путь_до/rpmmacros пакет.src.rpm[/console]

Подробней про mageia-chroot.rpmbuild см. в справке (ключ -h) или в вики проекта на bitbucket: https://bitbucket.org/xxblx/mageia-chro … t.rpmbuild

-----

Вопросы, отзывы, предложения и т.д. можно оставить в этой теме.

Fedora & GNOME

2

Добавил в mageia-chroot.rpmbuild обработку INT сигнала. Чтобы в случае нажатия Ctrl + C, процесс завершался не абы как, а сначала чтобы отмонтировало <chroot>/dev и <chroot>/proc, удалило созданные скриптом файлы и лишь затем завершало работу скрипта.

Fedora & GNOME

3

Не получается.

Консоль
./mageia-chroot.rpmbuild -t /home/xlin/aum/new_chroot/Mageia4_x86_64.tar.gz /home/xlin/aum/rpmbuild/midori-0.5.8-5.mga5.src.rpm
unable to access rpm file [/root/rpmbuild/SRPMS//home/xlin/aum/rpmbuild/midori-0.5.8-5.mga5.src.rpm]
error registering local packages
error: cannot open /root/rpmbuild/SRPMS//home/xlin/aum/rpmbuild/midori-0.5.8-5.mga5.src.rpm: No such file or directory
cp: не удалось выполнить stat для «/mnt/mageia-chroot/root/rpmbuild/RPMS/*/*»: Нет такого файла или каталога
ls: невозможно получить доступ к /mnt/mageia-chroot/root/rpmbuild/RPMS/*/*: Нет такого файла или каталога

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

4 (2014-11-16 16:23:38 отредактировано XliN)

Все ясно. Проблема с обработкой пути в скрипте. Потестируй. Если образы и src все кинуть в одно место, то сборка начинается.

Но в итоге получил

Консоль
cp: не удалось выполнить stat для «/mnt/mageia-chroot/root/rpmbuild/RPMS/*/*»: Нет такого файла или каталога
ls: невозможно получить доступ к /mnt/mageia-chroot/root/rpmbuild/RPMS/*/*: Нет такого файла или каталога

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

5

XliN пишет:

Все ясно. Проблема с обработкой пути в скрипте. Потестируй. Если образы и src все кинуть в одно место, то сборка начинается.

Но в итоге получил

Консоль
cp: не удалось выполнить stat для «/mnt/mageia-chroot/root/rpmbuild/RPMS/*/*»: Нет такого файла или каталога
ls: невозможно получить доступ к /mnt/mageia-chroot/root/rpmbuild/RPMS/*/*: Нет такого файла или каталога

Это значит пакет не собрался, была ошибка какая-то при сборке, см. вывод.

Fedora & GNOME

6

XliN пишет:

Все ясно. Проблема с обработкой пути в скрипте.

Да, пути к src.rpm и к каталогу куда класть вывод, если конкретней. Спасибо, исправлю.
Путь к архиву корректно обрабатывается.

Fedora & GNOME

7

xxblx пишет:

Да, пути к src.rpm и к каталогу куда класть вывод, если конкретней.

Исправил.

Fedora & GNOME

8 (2014-11-16 19:15:47 отредактировано XliN)

xxblx, Попробовал

Консоль
./mageia-chroot.rpmbuild -t /home/xlin/aum/new_chroot/Mageia4_i586.tar.gz -o /tmp /home/xlin/aum/rpmbuild/midori-0.5.8-5.mga5.src.rpm

Консоль
Provides: midori-devel = 0.5.8-5.mga4.mrc libmidori-core-devel = 0.5.8-5.mga4.mrc libmidori-core-devel(x86-32) = 0.5.8-5.mga4.mrc devel(libmidori-core)
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Requires: devel(libX11) devel(libXss) devel(libcairo) devel(libgdk-x11-2.0) devel(libgdk_pixbuf-2.0) devel(libgio-2.0) devel(libglib-2.0) devel(libgmodule-2.0) devel(libgobject-2.0) devel(libgtk-x11-2.0) devel(libjavascriptcoregtk-1.0) devel(libnotify) devel(libpango-1.0) devel(libsoup-2.4) devel(libsoup-gnome-2.4) devel(libsqlite3) devel(libwebkitgtk-1.0) devel(libxml2) devel(libzeitgeist-1.0)
Obsoletes: midori-devel < 0.5.7
Processing files: midori-debuginfo-0.5.8-5.mga4.mrc.i586
Provides: midori-debuginfo = 0.5.8-5.mga4.mrc midori-debuginfo(x86-32) = 0.5.8-5.mga4.mrc
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/xlin/aum/rpmbuild/BUILDROOT/midori-0.5.8-5.mga5.i386
Wrote: /home/xlin/aum/rpmbuild/RPMS/i586/midori-0.5.8-5.mga4.mrc.i586.rpm
Wrote: /home/xlin/aum/rpmbuild/RPMS/i586/libmidori-core1-0.5.8-5.mga4.mrc.i586.rpm
Wrote: /home/xlin/aum/rpmbuild/RPMS/i586/libmidori-core-devel-0.5.8-5.mga4.mrc.i586.rpm
Wrote: /home/xlin/aum/rpmbuild/RPMS/i586/midori-debuginfo-0.5.8-5.mga4.mrc.i586.rpm
Executing(%clean): /bin/sh -e /home/xlin/aum/rpmbuild/tmp/rpm-tmp.YtyynZ
+ umask 022
+ cd /home/xlin/aum/rpmbuild/BUILD
+ cd midori-0.5.8
+ /usr/bin/rm -rf /home/xlin/aum/rpmbuild/BUILDROOT/midori-0.5.8-5.mga5.i386
+ exit 0
Executing(--clean): /bin/sh -e /home/xlin/aum/rpmbuild/tmp/rpm-tmp.znL2WB
+ umask 022
+ cd /home/xlin/aum/rpmbuild/BUILD
+ rm -rf midori-0.5.8
+ exit 0
cp: не удалось выполнить stat для «/mnt/mageia-chroot/root/rpmbuild/RPMS/*/*»: Нет такого файла или каталога
ls: невозможно получить доступ к /mnt/mageia-chroot/root/rpmbuild/RPMS/*/*: Нет такого файла или каталога
Built:

Опять с ошибкой? Я же вижу что пакет собрался.

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

9

Хм. Только что запустил у себя

Консоль
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.16EwLt
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd midori-0.5.8
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/midori-0.5.8-5.mga5.i386
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.otFTpR
+ umask 022
+ cd /root/rpmbuild/BUILD
+ rm -rf midori-0.5.8
+ exit 0
Built: libmidori-core1-0.5.8-5.mga4.mrc.i586.rpm
libmidori-core-devel-0.5.8-5.mga4.mrc.i586.rpm
midori-0.5.8-5.mga4.mrc.i586.rpm
midori-debuginfo-0.5.8-5.mga4.mrc.i586.rpm

Собралось исправно. Пакеты на месте.

В скрипте строки 113-114

    # Copy built rpm to output dir
    cp -rf /"${CHPATH}"/root/rpmbuild/RPMS/*/* "${OUT}"

Добавь перед ними

    find /"${CHPATH}"/root/rpmbuild/RPMS

Посмотрим что там.

Fedora & GNOME

10

xxblx, /mnt/mageia-chroot/root/rpmbuild/RPMS

MXLinux 19.3 - xfce
Чем больше я работаю админом, тем больше понимаю,
насколько волшебна фраза - "Нет технической возможности!"

==============================================

11

XliN, в /mnt/mageia-chroot/root/rpmbuild/RPMS должны появляться каталоги в соответствии с архитектурой пакетов и в них уже пакеты, оттуда пакеты копируются за пределы chroot'а.
Получается, что пакеты таки не были собраны.

Чисто для проверки, попробуй пересобрать http://packages.mageia.org.ru/mageia4/S … rc.src.rpm (именно этот т.к. в этом пакете скрипт на баш и авк, пакет noarch) посмотрим в конкретном пакете или в скрипте дело.

Fedora & GNOME

12

XliN, специально установил на тестовый ПК Mageia 4.1 x86_64 с netinstall образа (поставил базовую минимальную систему + wget + иксы и блоб nvidia + e17 + lxdm, leafpad, lxterminal, pcmanfm и lxtask, т.е. набор пакетов получился как у более-менее полноценной рабочей системы) со всеми обновлениями.
Успешно сгенерировал тарболлы для Mageia 4 i586 и Mageia 4 x86_64 (баг с именем тарболла, про который ты мне писал сегодня, я исправил, заодно и проверил - теперь все исправно именуется), затем успешно собрал midori, которая у тебя не собиралась, причем собрал под обе архитектуры.

Специально делал, чтобы все было в разных каталогах
$PWD - /home/oleg
tarball'ы в /home/oleg/chroot
src.rpm в /home/oleg/Загрузки
скрипты в /home/oleg/mageia-chroot
результат в /tmp

Консоль
[root@localhost oleg]# echo $PWD
/home/oleg
[root@localhost oleg]# /home/oleg/mageia-chroot/mageia-chroot.rpmbuild -t /home/oleg/chroot/Mageia4_x86_64.tar.gz -o /tmp /home/oleg/Загрузки/midori-0.5.8-5.mga5.src.rpm
# тут много строк, не вижу смысла копировать все, выкладываю лишь последние
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/midori-0.5.8-5.mga5.x86_64
Wrote: /root/rpmbuild/RPMS/x86_64/midori-0.5.8-5.mga4.mrc.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/lib64midori-core1-0.5.8-5.mga4.mrc.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/lib64midori-core-devel-0.5.8-5.mga4.mrc.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/midori-debuginfo-0.5.8-5.mga4.mrc.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.JnMtxW
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.fAiANZ
Built: lib64midori-core1-0.5.8-5.mga4.mrc.x86_64.rpm
lib64midori-core-devel-0.5.8-5.mga4.mrc.x86_64.rpm
midori-0.5.8-5.mga4.mrc.x86_64.rpm
midori-debuginfo-0.5.8-5.mga4.mrc.x86_64.rpm

Собранные rpm'ы лежали в /tmp. По аналогии запустил из-под x86_64 систему сборку для i586 - тоже все с первого раза собралось. Так что, теперь все пути корректно обрабатываются.

Странно, что у тебя не завелось. Попробуй удалить скрипты полностью, заново стянуть их из гита, заново создать тарболл, а потом собрать пакет. Потому что я баги, о которых мы с тобой говорили в течении дня в ВК, отловил и поправил, теперь работать должно.

Fedora & GNOME

13

Обновил справку (usage) скриптов. Спасибо olelukoie за подправленный текст справки.

Fedora & GNOME

14

Обновил скрипт сборки.
При сборке для Mageia 5 и более новых версий вместо --no-suggests будет использован --no-recommends.

Fedora & GNOME
Спасибо сказали: Zomby1