Есть ли простой способ автоматически исправлять исходники Ubuntu по мере их появления и загружать в PPA?

9

Я ищу инструмент для следующего:

  • Автоматически обнаруживать обновления набора исходных пакетов (в частности, gtk + 2 и gtk + 3)
  • скачать исходный пакет
  • применить мои собственные патчи к источнику
  • зафиксировать патч правильно ( dpkg-source --commit [something-or-other]?)
  • в случае успеха загрузите их в PPA на Launchpad (на который я затем могу указать свою систему обычным способом).

Может ли Launchpad сделать все это для меня?

Если нет, есть ли инструмент, который будет автоматически делать все это из задания cron?

В противном случае я сам соберу что-то вместе, но какие команды мне нужны:

  • обнаруживать и загружать обновления пакетов исходного кода? (Я бы предпочел что-то вроде (bzr | git) pull, а не каждый раз apt-get источник новой копии)
  • автоматически фиксировать патч локально (я бы использовал одно и то же описание фиксации каждый раз)?
  • загружать источники неинтерактивно в PPA?

Я нашел вопрос (« Как правильно установить исправление Wine для пользовательского PPA?» ), Который похож, но шаги в ответе по-прежнему в основном ручные и интерактивные. Полностью автоматическая версия этого, плюс автоматическое обнаружение обновлений источника, очень помогли бы.

Ник Букер
источник

Ответы:

2

Ну, это звучит так, как будто рецепты упаковки - это путь сюда. По сути, упаковочные рецепты могут автоматически создавать исходные пакеты Ubuntu и загружать их в PPA всякий раз, когда изменяется ветка bzr на Launchpad. Документация довольно хорошо, но я дам несколько примеров ...

Сначала вы указываете ветку для отслеживания (например, lp:gtk3), а затем добавляете команду для вложения вашей собственной ветки упаковки Debian в эту ветку. Взгляните на этот рецепт, который я создал для ежедневных сборок Inkscape.

# bzr-builder format 0.4 deb-version 1:0.48+devel+{revno}+{revno:packaging}
lp:inkscape
nest packaging lp:~inkscape.dev/inkscape/debian-packaging debian

Этот рецепт создает пакет Ubuntu каждый день, используя последний исходный код для Inkscape, но копирует настроенные инструкции по упаковке Debian из lp:~inkscape.dev/inkscape/debian-packagingветви в подпапку с именем " debian".

На странице рецептов упаковки на Launchpad вы можете указать, в какой PPA автоматически загружать ваши посылки. В нашем случае это загружено здесь .

В качестве альтернативного подхода вы можете основывать свой рецепт на существующем пакете Ubuntu, а не непосредственно на исходном коде. Например, lp:ubuntu/gtk+3.0. Затем вам нужно будет создать ветку этого кода и зафиксировать любые необходимые изменения. Давайте назовем это lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build, например. Затем вы создадите рецепт для автоматического объединения ваших изменений, а не вложите инструкции по упаковке. Рецепт будет выглядеть примерно так:

# bzr-builder format 0.4 deb-version {debversion}+{date}
lp:ubuntu/gtk+3.0
merge my-custom-build lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build

Таким образом, этот рецепт автоматически создает собственный исходный пакет Ubuntu и загружает его в PPA всякий раз, когда происходит изменение в официальном пакете Ubuntu.

Если вы используете этот подход «слияния», то у вас есть два варианта применения ваших патчей. Либо вы просто отредактируете исходный исходный код прямо в вашей ветке и позволите bzr позаботиться о его слиянии, либо вы можете создать файлы патчей внутри debian/папки, используя quilt. У каждого свои преимущества / недостатки. Первый подход немного умнее ... если один из ваших патчей будет принят вышестоящим разработчиком, то слияние обычно все равно будет работать, и пакет Ubuntu будет собираться нормально. Последний подход позволяет вам обрабатывать ваши патчи, используя стандартный подход на основе Debian, заключающийся в том, чтобы отделить код упаковки от исходного кода ... однако, если вышестоящий разработчик примет один из ваших патчей, то Quilt не сможет применить (дублировать) патч и пакет не удастся собрать.

Алекс Валаванис
источник
Но какая версия GTK-3 lp:ubuntu/gtk+3.0отслеживает? Текущая стабильная или текущая версия разработки?
Хуршид Алам