Сборочная среда для проекта Midnight Commander

Продолжение

Мало кто из знакомых со словами linux, *bsd не знает о Midnight Commander. Я не слишком ошибусь, если скажу, что все поначалу пользовались им. Отличный инструмент для задач, которые он решает, к тому же доступный на многих платформах. Последнее время проект, ранее развиваемый под крылом gnome.org, получил вторую жизнь. Новый сайт проекта радует темпами развития. Вот только поддержка актуальных версий пакетов в дистрибутивах хромает.

Последнее, что доступно в Debian — 4.7.0.9, и это при том, что совсем недавно вышел 4.7.5.4 в котором есть ряд вкусностей. Проект предоставлял бинарные сборки для RedHat-based систем и не поддерживал таковые для Debian/Ubuntu. Я решил восполнить этот пробел, запустив автоматическую сборочную среду.

В процессе подготовки и запуска сборочной среды появилась необходимость автоматизации некоторых из операций:
  1. сборка пакета из GIT проекта Midnight Commander;
  2. проверка доступности нового релиза;
  3. обновление локального репозитария;
  4. обновление серверного репозитария.
Сборка пакета из GIT

Входит в базовый функционал сборочной среды. Собственно все и затевалась для сборки в пакеты последних изменений с целью их тестирования. При запуске проверяет, были ли изменения в репозитарии с момента последней удачной сборки пакета. Если их нет, то сборка останавливается.

Если изменения найдены, то запускается проверка на способность правильно компилироваться и выполнять установку. Для этого выполняются:

./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib/mc
make dist
make
make install DESTDIR=/tmp/mc

Если предыдущий этап выполнен без ошибок, то начинается пакетирование исходников. При выполнении «make dist» создается архив вида mc-<version>.tar.gz который далее приводится к виду mc_<version>~git<YYYYMMDD>.orig.tar.gz. Далее полученный архив распаковывается, в него добавляется debian-специфичные части, инкрементируется версия пакета и запускается процесс сборки.

Если сборка пакета проходит успешно, то начинается проверка на соответствие Debian Policy. Сперва пакет проверяется в lintian (вывод сохраняется в отдельный файл для быстрого анализа ошибок), затем в piuparts. Если пакет успешно проходит проверки, начинается сборка под целевые платформы.
  • Debian Lenny/Squeeze (i386, amd64);
  • Ubuntu Maverick/Natty (i386, amd64).
Сборка проходит посредством pbuilder, чтобы гарантировать собираемость в минимальной среде.

Обновление локального репозитария

Для управления локальным репозитарием используется apt-ftparchive. После запуска процедуры обновления из сборочной среды получаются последние собранные версии. Обновляется служебная информация и подписываются файлы Release. Для подписи файлов в автоматическом режиме пришлось сгенерировать подключ для уже существующего и доверить его gpg-agent'у.

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

Обновление серверного репозитария

Для закачки изменений в локальном репозитарии на сервер использован rsync. Я не стал создавать для rsync ssh ключ без пароля, а сделал его доступным через ssh-agent. При необходимости это позволит заблокировать ключ одной командой.

Проверка доступности нового релиза

Чтобы быть в курсе выхода новых стабильных версий настроен uscan, который будучи запущен с ключем --report, проверяет доступность новых версий в www.midnight-commander.org/download пропуская при этом версии вида X.X.X-preY. При наличии положительного ответа от uscan запускается сборка релиза, которая в итоге попадает в основную ветку моего репозитария.

Напоследок

Настройки APT для стабильных версий:

deb http://www.tataranovich.com/debian lenny main
deb http://www.tataranovich.com/debian squeeze main
deb http://www.tataranovich.com/debian maverick main
deb http://www.tataranovich.com/debian natty main

Настройки APT для ночных сборок:

deb http://www.tataranovich.com/debian lenny nightly
deb http://www.tataranovich.com/debian squeeze nightly
deb http://www.tataranovich.com/debian maverick nightly
deb http://www.tataranovich.com/debian natty nightly

Чтобы версия из ночных сборок не заменяла стабильный релиз, нужно прописать в /etc/apt/preferences

Package: *
Pin: release c=nightly
Pin: origin www.tataranovich.com
Pin-Priority: -1


UPD1: Чтобы APT не ругался на невозможность проверки ключа, перед использованием репозитария нужно импортировать мой публичный ключ (заодно приплывет подключ, который я использую для подписи пакетов). Например так:
gpg --keyserver pgp.mit.edu --recv-keys 0x2EE7EF82
gpg --export 0x2EE7EF82 | sudo apt-key add -

или
wget -q -O- http://www.tataranovich.com/tataranovich.asc | sudo apt-key add -
Метки:
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 27
  • +10
    Обожаю mc! Когда что-то надо быстро сделать, он всегда под рукой. Как бы там не говорили, что это не true way пиши команды ручками.
    • –2
      Что значит «по началу пользовались»? Разве есть другие аналоги фара под линукс?
      • –11
        Кстати да, FAR бы под линукс без wine было бы просто сказка!
        • +2
          Мда… Ваш никнейм крайне в тему.
        • +2
          «По началу» — до полного перехода на консоль.
          • +1
            периодически все равно бывает нужен :)
        • 0
          Круто, спасибо большое.
          • 0
            Почему сборка только i386, а i686 нету?
            Есть какие-то на то причины?
            • +5
              Дефолтная архитектура в Debian. Да и сомневаюсь, что оптимизация по i686 даст значимую выгоду в случае с MC. Если кому-то действительно критично, то можно пересобрать пакет.
            • 0
              А ppa для убунты не планируете?
            • +4
              Как то самая интересная техническая часть про собственно саму сборку у вас опущена. (:
              debian специфику добавляет dh_make или свои собственные сркипты? как ошибки обрабатываются?
              • 0
                Сейчас скрипты, составляющие сборочную среду, настролько страшны, что их показывать стыдно. Когда они будут допилены до вменяемого состояния, я их выложу и подготовлю доку по развертыванию. Возможно по мере обрастания функционалом, части кода с описанием процесса попадут сюда.
                • 0
                  Ок. Спасибо. Будем ждать.
              • 0
                Спасибо, удобный сервис получился.
                • 0
                  Расскажите как Вы делал сборочную среду?
                  • 0
                    кстати, попробуйте mini-dinstall, он проще в использовании, чем apt-ftparchive
                    • 0
                      как это лечить?
                      W: GPG error: www.tataranovich.com squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E16C46B31DB6DACF
                      • 0
                        Импортировать ключ, которым подписан репозитарий. Например так:

                        wget -q -O- http://www.tataranovich.com/tataranovich.asc | sudo apt-key add -
                      • 0
                        Спасибо за сервис.
                        Только вот что выходит:
                        #apt-get -d install mc -t squeeze

                        Получено:1 www.tataranovich.com/debian/ squeeze/nightly mc amd64 3:4.8.0-pre2-2-g07c14a4~git20110923-1 [2 078 kB]
                        Получено 2 078 kБ за 9с (219 kБ/c)
                        Не удалось получить www.tataranovich.com/debian/pool/squeeze/nightly/m/mc/mc_4.8.0-pre2-2-g07c14a4~git20110923-1_amd64.deb Не совпадает размер
                        E: Некоторые файлы скачать не удалось


                        Потом через dpkg -i устанавливается.
                        Бага?
                        • 0
                          Сегодня дополнял функционал и пару раз запускал полный цикл деплоя уже собранных версий, скорее всего попали на промежуточное состояние репозитария. Может кто-то знает как этого избежать?
                          • 0
                            Не, так было и в обед, и перед тем как писал предыдущее сообщение. Проверил сейчас — тоже самое. Скорее всего вам нужно на своей стороне обновить базу dpkg
                            • 0
                              Нашел виновника, им оказался кеш apt-ftparchive. После нескольких тестовых деплоев одной и той же версии разъехался кеш и база APT. Исправилось удалением кеша и пересборкой репозитария.
                          • 0
                            Спасибо большое! Давно ждал репозитария для свежего mc!
                            • 0
                              Нужная вещь, а то на рутинные операции по сборке свежих пакетов, вечно не доходят руки…

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.