Repocop/RepairMiniHOWTO

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
Строка 18: Строка 18:
* локальное зеркало со свежим сизифом (Пусть это <tt>/var/ftp/pub/Linux/ALT/Sisyphus</tt>).
* локальное зеркало со свежим сизифом (Пусть это <tt>/var/ftp/pub/Linux/ALT/Sisyphus</tt>).
-
Убедитесь, что в нем самые свежие версии ваших пакетов, а также repocop >= 0.07-alt25 и 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>.
Строка 29: Строка 29:
Иначе продолжаем дальше.
Иначе продолжаем дальше.
-
== Создаем песочницу с repocop ==
+
== Готовим repocop ==
-
Создаем песочницу
+
-
hsh --initroot-only --packager='Ваше Имя <ваш packager email>' <опции hasher для вашего Сизифа>
+
-
и сохраняем путь к песочнице в переменной окружения hasher.
+
-
export hasher=</path/to/your/hasher>
+
-
(Опция --packager='Ваше Имя <ваш packager email>' нужна, чтобы в /usr/src/.rpmmacros был указан правильный %packager.
+
-
Переменная $hasher нужна, чтобы в нижеприведенных примерах
+
-
код был полностью рабочим и его можно было сразу копировать в консоль и запускать.)
+
Скачиваем базу repocop
Скачиваем базу repocop
  wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz
  wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz
-
копируем базу в песочницу
+
и разворачиваем ее в <code>~/.repocop</code>:
-
cp repocop-data-current.tar.gz $hasher/chroot/tmp/
+
-
и разворачиваем ее внутри песочницы в <code>~/.repocop</code>:
+
-
hsh-shell $hasher
+
  cd ~
  cd ~
-
  tar xzf /tmp/repocop-data-current.tar.gz
+
  tar xzf repocop-data-current.tar.gz
-
Устанавливаем в песочницу repocop
+
Устанавливаем repocop
-
  hsh-install $hasher repocop-tools repocop-unittest
+
  apt-get install repocop-tools repocop-unittest
и все пакеты, необходимые для нормального выполнения произвольного <code>rpmbuild -bs</code> :
и все пакеты, необходимые для нормального выполнения произвольного <code>rpmbuild -bs</code> :
-
  hsh-install $hasher `$hasher/chroot/usr/bin/repocop-tools-ls-rpmbuild-bs-environment -c $hasher/chroot/usr/src/.repocop`
+
  apt-get install `/usr/bin/repocop-tools-ls-rpmbuild-bs-environment`
Заметим, что в Сизифе иногда может быть сломана установка каких-то пакетов из списка, созданного командой
Заметим, что в Сизифе иногда может быть сломана установка каких-то пакетов из списка, созданного командой
-
  $hasher/chroot/usr/bin/repocop-tools-ls-rpmbuild-bs-environment -c $hasher/chroot/usr/src/.repocop
+
  /usr/bin/repocop-tools-ls-rpmbuild-bs-environment
В таком случае, предварительно сохраните список в файл, отредактируйте его вручную и установите пакеты из отредактированного списка.
В таком случае, предварительно сохраните список в файл, отредактируйте его вручную и установите пакеты из отредактированного списка.
-
 
-
== Копируем внутрь песочницы src.rpm пакеты ==
 
-
 
-
Создаем каталог, в котором будут исходные пакеты.
 
-
hsh-run $hasher mkdir /usr/src/IN;  hsh-run $hasher chmod 777 /usr/src/IN
 
-
 
-
и
 
-
* медленный безопасный способ:
 
-
вручную копируем в каталог $hasher/usr/src/IN пакеты, которые нужно исправить.
 
-
либо
 
-
* быстрый опасный способ:
 
-
монтируем туда Сизиф (если ядро поддерживает read-only bind, лучше монтировать с ro):
 
-
sudo mount --bind /var/ftp/pub/Linux/ALT/Sisyphus/files/SRPMS $hasher/chroot/usr/src/IN
 
-
<div style="display: inline; color: red;">
 
-
В последнем случае после генерации пакетов $hasher/chroot/usr/src/IN надо сразу же отмонтировать, чтобы ее
 
-
не потерло при следующем запуске hasher.
 
-
</div>
 
-
Песочница к запуску репокопа готова.
 
== Запускаем repocop ==
== Запускаем repocop ==
-
hsh-shell $hasher
+
  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=/usr/src/OUT /usr/src/IN
+
Если вы список пакетов формировали вручную, то фильтр <code>--include-packager</code> указывать не нужно.
Если вы список пакетов формировали вручную, то фильтр <code>--include-packager</code> указывать не нужно.
Иначе вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.
Иначе вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.
-
После окончания работы генератора  исправленные src.rpm с увеличенным релизом будут лежать в папке <tt>$hasher/chroot/usr/src/OUT</tt>.
+
После окончания работы генератора  исправленные src.rpm с увеличенным релизом будут лежать в папке <tt>./OUT</tt>.
-
 
+
-
Выходя, сразу отмонтируем Sisyphus, если он смонтирован (чтобы его не потёрло при попытке следующей пересборки :))
+
-
sudo umount $hasher/chroot/usr/src/IN
+
-
и копируем полученные src.rpm из песочницы.
+
Смотрим, пересобираем, тестируем, отправляем на сборку в Sisyphus.
Смотрим, пересобираем, тестируем, отправляем на сборку в Sisyphus.

Версия 17:32, 10 ноября 2011


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

Содержание


Данный текст морально устарел! теперь repocop может создавать tar архивы в формате hasher, работа с которыми не требует развертывания песочницы.

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

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

  • локальное зеркало со свежим сизифом (Пусть это /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

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

Запускаем 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 в случае, когда для ошибки существует патч генератор. Однако иногда патч генератору не удается исправить пакет, и тогда полученный пакет по сути не будет содержать изменений. Хотя и вреда от него не должно быть.

 
Личные инструменты