Repocop/RepairMiniHOWTO
Исправляем Репокопом пакеты за 5 минут. Краткое руководство.
Предисловие.
Для исправления пакетов вам понадобится
- локальное зеркало со свежим сизифом (Пусть это /var/ftp/pub/Linux/ALT/Sisyphus).
Убедитесь, что в нем самые свежие версии ваших пакетов, а также repocop >= 0.07-alt25 и repocop-unittest >= 0.14.
- Свежая база repocop (более 100 Mb).
Знакомимся с предлагаемыми патчами
Ищем свои папки на http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/ и знакомимся с предложенными патчами. Если в патчах что-то не верно, сообщаем автору. Иначе продолжаем дальше.
Создаем песочницу с repocop
Создаем песочницу
hsh --initroot-only --packager='Ваше Имя <ваш packager email>' <опции hasher для вашего Сизифа>
и сохраняем путь к песочнице в переменной окружения hasher.
export hasher=</path/to/your/hasher>
(Опция --packager='Ваше Имя <ваш packager email>' нужна, чтобы в /usr/src/.rpmmacros был указан правильный %packager. Переменная $hasher нужна, чтобы в нижеприведенных примерах код был полностью рабочим и его можно было сразу копировать в консоль и запускать.)
Скачиваем базу repocop
wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz
копируем базу в песочницу
cp repocop-data-current.tar.gz $hasher/chroot/tmp/
и разворачиваем ее внутри песочницы в ~/.repocop
:
hsh-shell $hasher cd ~ tar xzf /tmp/repocop-data-current.tar.gz
Устанавливаем в песочницу repocop
hsh-install $hasher repocop-tools repocop-unittest
и все пакеты, необходимые для нормального выполнения произвольного rpmbuild -bs
:
hsh-install $hasher `$hasher/chroot/usr/bin/repocop-tools-ls-rpmbuild-bs-environment -c $hasher/chroot/usr/src/.repocop`
Заметим, что в Сизифе иногда может быть сломана установка каких-то пакетов из списка, созданного командой
$hasher/chroot/usr/bin/repocop-tools-ls-rpmbuild-bs-environment -c $hasher/chroot/usr/src/.repocop
В таком случае, предварительно сохраните список в файл, отредактируйте его вручную и установите пакеты из отредактированного списка.
Копируем внутрь песочницы 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
В последнем случае после генерации пакетов $hasher/chroot/usr/src/IN надо сразу же отмонтировать, чтобы ее не потерло при следующем запуске hasher.
Песочница к запуску репокопа готова.
Запускаем repocop
hsh-shell $hasher cd ~ repocop-fix-srpm --include-packager='viy,emacs,java' --packager='Igor Vlasenko <viy@altlinux.ru>' --outdir=/usr/src/OUT /usr/src/IN
Если вы список пакетов формировали вручную, то фильтр --include-packager
можно не указывать.
Иначе вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.
После окончания работы генератора исправленные src.rpm с увеличенным релизом будут лежать в папке $hasher/chroot/usr/src/OUT.
Выходя, сразу отмонтируем Sisyphus, если он смонтирован (чтобы его не потёрло при попытке следующей пересборки :))
sudo umount $hasher/chroot/usr/src/IN
и копируем полученные src.rpm из песочницы.
Смотрим, пересобираем, тестируем, заливаем в incoming/Sisyphus.
Enjoy!
Примечания
Желательно сравнить число патчей и число сгенерированных пакетов, поскольку может случиться, что сгенерировано больше пакетов, чем есть патчей на http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/.
Особенность текущего генератора src.rpm в том, что он создает новый src.rpm в случае, когда для ошибки существует патч генератор. Однако иногда патч генератору не удается исправить пакет, и тогда полученный пакет по сути не будет содержать изменений. Хотя и вреда от него не должно быть.