Яндекс.Метрика

    Песочница

    Сборочная среда для проекта 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