Сборочная среда для проекта 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
                              Нужная вещь, а то на рутинные операции по сборке свежих пакетов, вечно не доходят руки…

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

                              Самое читаемое