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

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 58 промежуточных версий 3 участников)
Строка 1: Строка 1:
[[Категория:Sisyphus]]
[[Категория:Sisyphus]]
[[Категория:Devel]]
[[Категория:Devel]]
[[Категория:Repocop]]
{{Category navigation|title=Repocop|category=Repocop}}


= Исправляем Репокопом пакеты за 5 минут. Краткое руководство. =
= Исправляем Репокопом пакеты за 5 минут. Краткое руководство. =
Строка 10: Строка 12:


* локальное зеркало со свежим сизифом (Пусть это <tt>/var/ftp/pub/Linux/ALT/Sisyphus</tt>).
* локальное зеркало со свежим сизифом (Пусть это <tt>/var/ftp/pub/Linux/ALT/Sisyphus</tt>).
Проверьте, что в сизифе должны быть repocop >= 0.07-alt21 и repocop-unittest >= 0.14.
Убедитесь, что в нем самые свежие версии ваших пакетов.
* Свежая [http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz база repocop] <div style="display: inline; color: red;">(более 100 Mb)</div>.
* Свежая [http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz база repocop] <div style="display: inline; color: red;">(более 100 Mb)</div>.


Строка 21: Строка 23:
Иначе продолжаем дальше.
Иначе продолжаем дальше.


== Создаем песочницу с repocop ==
== Готовим repocop ==
 
Скачиваем базу repocop
Скачиваем базу repocop
wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz
и разворачиваем ее в <code>~/.repocop</code>:
  cd ~
  cd ~
  wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz
  tar xzf repocop-data-current.tar.gz
 
Создаем песочницу
hsh --initroot-only --packager='<ваш packager email>' <опции hasher для вашего Сизифа>
export hasher=</path/to/your/hasher>
 
Переменная $hasher нам будет в последующем нужна для того, чтобы приведенный ниже код был полностью рабочим и его можно было
копировать в консоль и сразу запускать.
 
копируем туда базу repocop
cp repocop-data-current.tar.gz $hasher/chroot/tmp/
 
и разворачиваем ее внутри песочницы в <code>~/.repocop</code>:
hsh-run tar xzf /tmp/repocop-data-current.tar.gz


Устанавливаем в песочницу repocop
Устанавливаем repocop
  hsh-install repocop-tools repocop-unittest
  apt-get install repocop-tools repocop-unittest
и все пакеты, необходимые для нормального выполнения произвольного <code>rpmbuild -bs</code> :
hsh-install `$hasher/chroot/usr/bin/repocop-tools-ls-rpmbuild-bs-environment -c $hasher/chroot/usr/src/.repocop`


Еще  внутри песочницы нужно дать доступ к свежему Сизифу. Создаем точку монтирования
При желании можно установить пакеты, необходимые для нормального выполнения произвольного <code>rpmbuild -bs</code> :
  hsh-run mkdir /usr/src/Sisyphus
  apt-get install `/usr/bin/repocop-tools-ls-rpmbuild-bs-environment`
и монтируем туда Сизиф (если ядро поддерживает read-only bind, лучше монтировать с ro):
Заметим, что в Сизифе иногда может быть сломана установка каких-то пакетов из списка, созданного командой
  sudo mount --bind /var/ftp/pub/Linux/ALT/Sisyphus $hasher/chroot/usr/src/Sisyphus
  /usr/bin/repocop-tools-ls-rpmbuild-bs-environment
В таком случае, предварительно сохраните список в файл, отредактируйте его вручную и установите пакеты из отредактированного списка.


Проверяем и при необходимости правим в песочнице /usr/src/.rpmmacros так, чтобы там был правильный %packager.
Заметим, что пакеты с макросами устанавливать не обязательно. Если команда <code>rpmbuild -bs</code> завершилась неудачей,
 
repocop создаст tar архив в формате hasher, который можно пересобрать в hasher и получить обычный src.rpm пакет.
песочница к запуску репокопа готова.


== Запускаем repocop ==
== Запускаем repocop ==


hsh-shell
  repocop-fix-srpm --include-packager='viy,emacs,java' --packager='Igor Vlasenko <viy@altlinux.ru>' --outdir=./OUT /path/to/Sisyphus/files/SRPMS
cd ~
  repocop-fix-srpm --include-packager='viy,emacs,java' \
  --packager='Igor Vlasenko <viy@altlinux.ru>' \
  --outdir=OUT --acl-file /usr/src/Sisyphus/files/list/list.src.classic \
  /usr/src/Sisyphus/files/noarch/RPMS /usr/src/Sisyphus/files/x86_64/RPMS /usr/src/Sisyphus/files/SRPMS
 
Вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.


Заметим, что здесь нужно указывать <tt>/usr/src/Sisyphus/files/x86_64/RPMS</tt>, а не
Если вы список пакетов формировали вручную, то фильтр <code>--include-packager</code> указывать не нужно.
<tt>/usr/src/Sisyphus/files/i586/RPMS</tt>, поскольку в загруженной с [http://repocop.altlinux.org repocop.altlinux.org] базе данных
Иначе вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.
есть только такие записи.


После окончания работы генератора в папке <tt>OUT</tt> будут исправленные sкс.rpm.
После окончания работы генератора исправленные src.rpm с увеличенным релизом будут лежать в папке <tt>./OUT</tt>.


Выходим, сразу отмонтируем Sisyphus, чтобы его не потерло при попытке следующей пересборки
Смотрим, пересобираем, тестируем, отправляем на сборку в Sisyphus.
sudo umount $hasher/chroot/usr/src/Sisyphus
и копируем полученные src.rpm из песочницы.


Смотрим, собираем, заливаем в incoming.
== Enjoy! ==


Примечание: особенность текущего генератора в том, что он создает новый
== Примечания ==
src.rpm в случае, если ожидалось, что патч генератор исправит пакет.
Желательно сравнить число патчей и число сгенерированных пакетов, поскольку
Однако иногда патч генератору не удается исправить пакет, поэтому
может случиться, что сгенерировано больше пакетов, чем есть патчей на
может случиться такая ситуация, что сгенерировано пакетов больше, чем есть патчей на
http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/.
[http://repocop.altlinux.org repocop.altlinux.org].


== Enjoy! ==
Особенность текущего генератора src.rpm в том, что он создает новый
src.rpm в случае, когда для ошибки существует патч генератор.
Однако иногда патч генератору не удается исправить пакет, и тогда полученный
пакет по сути не будет содержать изменений. Хотя и вреда от него не должно быть.

Текущая версия от 17:37, 10 ноября 2011


Исправляем Репокопом пакеты за 5 минут. Краткое руководство.

Предисловие.

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

  • локальное зеркало со свежим сизифом (Пусть это /var/ftp/pub/Linux/ALT/Sisyphus).

Убедитесь, что в нем самые свежие версии ваших пакетов.

Знакомимся с предлагаемыми патчами

Ищем свои папки на http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/ и знакомимся с предложенными патчами. Если в патчах что-то не верно, сообщаем автору. Иначе продолжаем дальше.

Готовим repocop

Скачиваем базу repocop

wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz

и разворачиваем ее в ~/.repocop:

cd ~
tar xzf repocop-data-current.tar.gz

Устанавливаем repocop

apt-get install repocop-tools repocop-unittest

При желании можно установить пакеты, необходимые для нормального выполнения произвольного rpmbuild -bs :

apt-get install `/usr/bin/repocop-tools-ls-rpmbuild-bs-environment`

Заметим, что в Сизифе иногда может быть сломана установка каких-то пакетов из списка, созданного командой

/usr/bin/repocop-tools-ls-rpmbuild-bs-environment

В таком случае, предварительно сохраните список в файл, отредактируйте его вручную и установите пакеты из отредактированного списка.

Заметим, что пакеты с макросами устанавливать не обязательно. Если команда rpmbuild -bs завершилась неудачей, repocop создаст tar архив в формате hasher, который можно пересобрать в hasher и получить обычный src.rpm пакет.

Запускаем repocop

repocop-fix-srpm --include-packager='viy,emacs,java' --packager='Igor Vlasenko <viy@altlinux.ru>' --outdir=./OUT /path/to/Sisyphus/files/SRPMS

Если вы список пакетов формировали вручную, то фильтр --include-packager указывать не нужно. Иначе вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.

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

Смотрим, пересобираем, тестируем, отправляем на сборку в Sisyphus.

Enjoy!

Примечания

Желательно сравнить число патчей и число сгенерированных пакетов, поскольку может случиться, что сгенерировано больше пакетов, чем есть патчей на http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/.

Особенность текущего генератора src.rpm в том, что он создает новый src.rpm в случае, когда для ошибки существует патч генератор. Однако иногда патч генератору не удается исправить пакет, и тогда полученный пакет по сути не будет содержать изменений. Хотя и вреда от него не должно быть.