Рабочий процесс с самодельными пакетами

У меня есть папка ~/Packaging, в которой находятся все мои публичные и приватные пакеты. Например, в папке Packaging/think-rotate есть типичные вещи Debian, например:

think-rotate-2.5.2/
think-rotate-2.5.2.orig/
think-rotate-2.6/
think-rotate-2.6.orig/
think-rotate_1.0.tar.gz
think-rotate_2.5.2-0ubuntu1.debian.tar.gz
think-rotate_2.5.2-0ubuntu1.dsc
think-rotate_2.5.2-0ubuntu1_source.build
think-rotate_2.5.2-0ubuntu1_source.changes
think-rotate_2.5.2.orig.tar.gz@
think-rotate_2.5.2.tar.gz
think-rotate_2.5.orig.tar.gz@
think-rotate_2.5.tar.gz
think-rotate_2.6-0ubuntu1_all.deb
think-rotate_2.6-0ubuntu1_amd64.build
think-rotate_2.6-0ubuntu1_amd64.changes
think-rotate_2.6-0ubuntu1.debian.tar.gz
think-rotate_2.6-0ubuntu1.dsc
think-rotate_2.6-0ubuntu1_source.build
think-rotate_2.6-0ubuntu1_source.changes
think-rotate_2.6-0ubuntu1_source.stable.upload
think-rotate_2.6.orig.tar.gz@
think-rotate_2.6.tar.gz

I У меня есть сценарий, который проходит через мои проекты и генерирует последние .tar.gz из моего исходного кода. Так что по этому вопросу время от времени в каталоге упаковки появляются новые архивы tar.

Поскольку я не хочу запускать uupdate ../….tar.gz для каждого проекта вручную, я написал скрипт Python 3 , который позаботился об этом, запустил debuild -S и dput, чтобы загрузить его в мой Запустите панель PPA, а затем debuild соберите ее для моей локальной машины.

Список изменений Debian просто заполняется стандартным сообщением «Новая версия вышестоящего выпуска». Эти пакеты предназначены скорее для организованного локального развертывания, чем для широкой публики.

Затем сценарий также использует apt-cache show, чтобы проверить, установлена ​​ли последняя версия, и, если нет, использует dpkg -i для установки этого пакета.

Это работает несколько, но я столкнулся с парой проблем с моей текущей версией этого скрипта:

  • Когда я обновляю свой компьютер до новой версии Ubuntu, он не перестраивает все. Таким образом, у меня есть много пакетов, которые не получали никаких обновлений, и последняя версия в моем PPA - quantal, а не raring.

  • Пакеты собраны для amd64 на моем главном компьютере и часто не могут быть установлены на моем другом компьютере, который имеет i686. Некоторые пакеты all, так что не повредит. Но мне нужно пересобрать пакеты any на этом компьютере. Launchpad PPA заботится о создании его для каждой архитектуры, но мой скрипт не загружал этот пакет для raring, см. Первую проблему.

Подводя итог, рабочий процесс должен содержать все эти шаги:

  • Извлечь новый исходный архив tar и обновить debian/changelog. (uupdate)

  • Если вы еще не загружены в PPA, создайте исходный пакет и загрузите его в PPA Launchpad. Но только сделайте это, если это публичный пакет, не загружайте мои личные пакеты в PPA. (debuild -S и dput)

  • Если пакет необходимо обновить локально, создайте двоичный пакет для текущей архитектуры и установите его. (debuild и debi или dpgk -i)

  • Проверьте, не устарела ли серия, т.е. е. последняя загрузка была для quantal, а текущая система работает на raring. Если это так, перестройте исходный код снова и загрузите в PPA.

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

Я мог бы поработать над своим сценарием, чтобы обойти текущие проблемы, но я бы предпочел использовать что-то, что уже работает, вместо того, чтобы крутить свои собственные. Существуют ли какие-нибудь последовательности или рабочие процессы, которые сопровождающие используют, чтобы поддерживать актуальность большого количества пакетов в своих PPA или официальных репозиториях?


Обновление 2013-07-08: Теперь я работал над сценарием для обработки проблемы также. Но я все еще заинтересован в каноническом решении.

3
задан 9 July 2013 в 01:13

1 ответ

Я работаю с несколькими пакетами, поэтому позвольте мне рассказать об этом лично.

Все ваши вещи должны быть собраны в одном центральном месте для всех необходимых вам дистрибутивов и архитектур. Не загружайте исходные пакеты, а затем создавайте заново локально. Выберите ваши "частные" пакеты с сервера сборки, где вы размещаете все. Таким образом, вы можете хранить свои личные репозитории в /etc/apt/sources.list вместе со всеми остальными (паролем защитить их при необходимости).

Если Launchpad не работает для вас, настройте собственную систему сборки. Поскольку у вас много пакетов (более 40), настройка среды сборки с учетом ваших особых потребностей рано или поздно окупится.

Для этого вам понадобится выделенный аппарат с доступом к сети & ndash; либо дома, либо на работе, либо на арендованном сервере в центре обработки данных.

Вот два варианта:

  1. Используйте Jenkins CI и скрипт сборки для создания пакета. Существует Jenkins Debian Glue Майкла Прокопа, которая делает эту работу, и она хорошо документирована (в итоге я переписал ее с нуля, но она может сработать для вас). Это 100% шелл-код, так что будьте готовы сделать несколько скриптов на Bash, если вам нужно его настроить.
    Благодаря этому вы сможете собрать все свои пакеты для всех желаемых комбинаций спиц и арок. Дженкинс удивительно гибок и ROCK стабилен, и будет достаточно легко разделить ваши репозитории (для частного и общественного потребления).

  2. Использовать Buildbot & ndash; это будет больше ручной работы, чем первый вариант, но Buildbot - это проект Python, и, исходя из вашего вопроса, я предполагаю, что вы будете чувствовать себя как дома, настраивая это. Проект i3 (оконный менеджер) имеет превосходное описание того, как они настраивают свою среду Buildbot, используя это в качестве отправной точки.

Я также настоятельно рекомендую sbuild вместо pbuilder. Jenkins Debian Glue использует pbuilder (одна из причин, по которой я в итоге отказался от него).

В любом случае вам нужно будет сделать некоторые вещи, которые вам пока не нужны, такие как настройка репозиториев пакетов (что может быть довольно болезненным) и поддержка сервера сборки. В конце концов, оно того стоит, хотя & ndash; и вы многому научитесь.

0
ответ дан 9 July 2013 в 01:13

Другие вопросы по тегам:

Похожие вопросы: