Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Debian пакеты. Анатомия и сборка.

Debian пакеты. Анатомия и сборка.

Alexander Koshelev

November 07, 2012
Tweet

More Decks by Alexander Koshelev

Other Decks in Programming

Transcript

  1. Вопросы • Что такое пакет? • Как собираются пакеты? •

    Какие есть инструменты для сборки пакетов? • Как пакеты собирают в Яндексе?
  2. Анатомия пакета • A Package is a specific piece of

    software which the system can install and uninstall • Дебиановский «пакет»: • Source package • Binary packages
  3. Binary package • <package>_<ver>_<arch>.deb • Простой ar архив • Полезный

    контент + метаинформация • То что непосредственно ставится на машины
  4. Внутри *.deb • debian-binary – текстовый файл с номером версии

    билд системы (2.0) • control.tar.gz – метаинформация и maintainer scripts • data.tar.gz – слепок файловой системы
  5. Метаинформация • Название – Name • Версия – Version •

    Архитектура – Architecture • Разработчик – Maintainer • Описание – Description • Зависимости – Depends/Conflicts/ Provides/Replaces/Suggests/
  6. Maintainer scripts • Скрипты, запускающиеся в разные моменты процесса установки/удаления

    пакета • preinst – до установки • postinst – после установки • prerm – до удаления • postrm – после удаления
  7. Source package • <package>_<ver>.tar.gz – архив с деревом исходников •

    <package>_<ver>.dsc – метаинформация • <package>_<ver>_<arch>.changes
  8. Source package (non-native) • <package>_<ver>.orig.tar.gz – оригинальный архив исходников из

    upstream • <package>_<ver>.diff.tar.gz – разница между оригинальными исходниками и дебианизированными
  9. Native vs non-native • Native пакет содержит в себе как

    дебианизацию, так и код • Non-native содержит в себе только дебианизацию и отдельно код из upstream
  10. Внутри debian/ • control – метаинформация • Описание source package

    • Описание всех binary packages • changelog – лог изменений • rules – скрипт, создающий файловую структуру бинарных пакетов
  11. debian/rules • Скрипт, делающий основную работу по сборке бинарных пакетов

    • Обычно Makefile • Исполняемый файл • Принимает один аргумент – таргет
  12. Таргеты • clean – очистка артефактов сборки • build –

    сборка бинарника • binary – раскладка в пакеты
  13. Таргеты • clean – очистка артефактов сборки • build –

    сборка бинарника • binary – раскладка в пакеты • binary-arch
  14. Таргеты • clean – очистка артефактов сборки • build –

    сборка бинарника • binary – раскладка в пакеты • binary-arch • binary-indep
  15. Таргеты • clean – от текущего пользователя • build –

    от текущего пользователя • binary – от root’а (благодаря fakeroot)
  16. Таргеты • clean – от текущего пользователя • build –

    от текущего пользователя • binary – от root’а (благодаря fakeroot) • binary-arch – от root’а
  17. Таргеты • clean – от текущего пользователя • build –

    от текущего пользователя • binary – от root’а (благодаря fakeroot) • binary-arch – от root’а • binary-indep – от root’а
  18. Debhelper • Набор скриптов (хелперов) для создания паката • Оперирующих

    в контексте всей сборки • Оперирующих конкретным бинарным пакетом • Обычно написаны на perl
  19. Хелперы • dh_builddeb • dh_clean • dh_compress • dh_fixperms •

    dh_gencontrol • dh_install • dh_installcatalogs • dh_installchangelogs • dh_installcron • dh_installdeb • dh_installdebconf • dh_installdirs • dh_installdocs • dh_installemacsen • dh_installexamples • dh_installinfo • dh_installinit • dh_installlogcheck • dh_installlogrotate • dh_installman • dh_installmenu • dh_installmime • dh_installpam • dh_installudev • dh_link • dh_lintian • dh_makeshlibs • dh_md5sums • dh_perl • dh_shlibdeps • dh_strip
  20. Что делает хелпер? • Настраивает своё окружение • Итерируется по

    всем бинарным пакетам • Подгружает конфиг (если есть) • Делает полезную работу
  21. dh_install • Один из основых хелперов • Копирует файлы из

    дерева исходников в бинарный пакет • Конфиг в <package>.install
  22. Common Debian Build System (CDBS) • Набор отдельных Makefile’ов делающих

    определенные действия • Нужные кусочки подключаются в debian/rules через include
  23. Концепция • Собрать большой Makefile из нескольких маленьких кусочков •

    Добавляет дополнительные таргеты (в том числе для каждого из бинарных пакетов) • Пакеты собираются последовательно • Classes & Rules
  24. Недостатки CDBS • Сложные пакеты собирать трудно • Важен порядок

    следования include’ов • Создает над-фреймворк сборки • Нужно знать набор переменных и таргетов • Сильно искажает реальнй процесс сборки
  25. Концепция • Единая точка входа – dh • Пакеты собираются

    параллельно • Наглядность • Процесс сборки прозрачен • Процесс сборки контролируем в любых границах
  26. dh – диспетчер хелперов dh_1 dh_2 dh_3 ... dh dh_4

    dh_5 dh_6 ... dh_7 dh_8 dh_9 ... target_1 target_2 target_3
  27. Sequence addons • Perl модули • Позволяют добавить/исключить хелперы из

    конвейера • Подключаются опцией --with • Лежат в /usr/share/perl5/Debian/ Debhelper/Sequence
  28. Build System Classes • Определеют систему сборки • По сути

    тоже самое что Classes в CDBS • Подключаются опцией --buildsystem
  29. Переопределение • Любой таргет или хелпер можно переопределить • Конкретный

    хелпер можно исключить из конвейера • Конкретному хелперу можно добавить параметры
  30. Пишем свой хелпер • Используем perl библиотеку – Debian::Debhelper •

    Настраиваем окружение и парсим аргументы через init() • Итерируемся по всем бинарным пакетам • Читаем опциональный конфиг
  31. От CDBS к dh7 • debian/rules сократился на 2/3 (благодаря

    sequence addons) • Сборка стала быстрее • Процесс сборки стал нагляднее и более контролируемым На примере Поиска по Интранету
  32. Ресурсы • Debian Policy – http://www.debian.org/ doc/debian-policy/ • Debian New

    Maintainers’ Guide – http://www.debian.org/doc/manuals/maint- guide/ • Ubuntu Packaging Guide – https:// wiki.ubuntu.com/PackagingGuide/Complete