Pull to refresh

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

Reading time3 min
Views4.1K
Продолжение

Мало кто из знакомых со словами 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 -
Tags:
Hubs:
Total votes 45: ↑40 and ↓5+35
Comments27

Articles