Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Debian пакеты. Анатомия и сборка.
Search
Alexander Koshelev
November 07, 2012
Programming
78
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Debian пакеты. Анатомия и сборка.
Alexander Koshelev
November 07, 2012
More Decks by Alexander Koshelev
See All by Alexander Koshelev
Продвинутое использование Celery
daevaorn
2
8.5k
Препарирование работы асинхронного кода
daevaorn
2
12k
Other Decks in Programming
See All in Programming
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
180
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
170
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
Inside Stream API
skrb
1
740
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
210
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
370
Webフレームワークの ベンチマークについて
yusukebe
0
170
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
580
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
Vite+ Unified Toolchain for the Web
naokihaba
0
320
Featured
See All Featured
Docker and Python
trallard
47
3.9k
Site-Speed That Sticks
csswizardry
13
1.2k
Designing for Timeless Needs
cassininazir
1
260
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
400
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
The Language of Interfaces
destraynor
162
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
A Modern Web Designer's Workflow
chriscoyier
698
190k
What's in a price? How to price your products and services
michaelherold
247
13k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Transcript
Debian пакеты Анатомия и сборка Александр Кошелев
Вопросы • Что такое пакет? • Как собираются пакеты? •
Какие есть инструменты для сборки пакетов? • Как пакеты собирают в Яндексе?
Disclaimer • Результат исследований • Личный опыт • Личное мнение
(оценочные суждения) • Debian = Ubuntu
Анатомия пакета • A Package is a specific piece of
software which the system can install and uninstall • Дебиановский «пакет»: • Source package • Binary packages
Из source в binary
Из source в binary
Из source в binary package
Из source в binary package
Из source в binary package_1 package
Из source в binary package_1 package_2 package
Из source в binary package_1 package_2 package_3 package
Из source в binary package_1 package_2 package_3 ... package
Binary package • <package>_<ver>_<arch>.deb • Простой ar архив • Полезный
контент + метаинформация • То что непосредственно ставится на машины
Внутри *.deb • debian-binary – текстовый файл с номером версии
билд системы (2.0) • control.tar.gz – метаинформация и maintainer scripts • data.tar.gz – слепок файловой системы
Метаинформация • Название – Name • Версия – Version •
Архитектура – Architecture • Разработчик – Maintainer • Описание – Description • Зависимости – Depends/Conflicts/ Provides/Replaces/Suggests/
Maintainer scripts • Скрипты, запускающиеся в разные моменты процесса установки/удаления
пакета • preinst – до установки • postinst – после установки • prerm – до удаления • postrm – после удаления
Source package • <package>_<ver>.tar.gz – архив с деревом исходников •
<package>_<ver>.dsc – метаинформация • <package>_<ver>_<arch>.changes
*.changes • Метаинформация • Описание бинарных пакетов • Чексуммы пакетов
• PGP подпись
Source package (non-native) • <package>_<ver>.orig.tar.gz – оригинальный архив исходников из
upstream • <package>_<ver>.diff.tar.gz – разница между оригинальными исходниками и дебианизированными
Native vs non-native • Native пакет содержит в себе как
дебианизацию, так и код • Non-native содержит в себе только дебианизацию и отдельно код из upstream
Сборка Создание из дерева исходников готовых пакетов
Внутри debian/ • control – метаинформация • Описание source package
• Описание всех binary packages • changelog – лог изменений • rules – скрипт, создающий файловую структуру бинарных пакетов
debian/rules • Скрипт, делающий основную работу по сборке бинарных пакетов
• Обычно Makefile • Исполняемый файл • Принимает один аргумент – таргет
Таргеты
Таргеты • clean – очистка артефактов сборки
Таргеты • clean – очистка артефактов сборки • build –
сборка бинарника
Таргеты • clean – очистка артефактов сборки • build –
сборка бинарника • binary – раскладка в пакеты
Таргеты • clean – очистка артефактов сборки • build –
сборка бинарника • binary – раскладка в пакеты • binary-arch
Таргеты • clean – очистка артефактов сборки • build –
сборка бинарника • binary – раскладка в пакеты • binary-arch • binary-indep
Таргеты
Таргеты • clean – от текущего пользователя
Таргеты • clean – от текущего пользователя • build –
от текущего пользователя
Таргеты • clean – от текущего пользователя • build –
от текущего пользователя • binary – от root’а (благодаря fakeroot)
Таргеты • clean – от текущего пользователя • build –
от текущего пользователя • binary – от root’а (благодаря fakeroot) • binary-arch – от root’а
Таргеты • clean – от текущего пользователя • build –
от текущего пользователя • binary – от root’а (благодаря fakeroot) • binary-arch – от root’а • binary-indep – от root’а
debian/rules на Python
debian/rules на Python
dh_make • Bootstrap для нового пакета • Создает debian директорию
по заданному шаблону
Инструменты сборки • dpkg-buildpackage • debuild • pbuilder
dpkg-buildpackage • Правильно запускает debian/rules • Создает source package •
Подписывает получившиеся пакеты
Debhelper • Набор скриптов (хелперов) для создания паката • Оперирующих
в контексте всей сборки • Оперирующих конкретным бинарным пакетом • Обычно написаны на perl
debian/rules
Хелперы • 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
Что делает хелпер? • Настраивает своё окружение • Итерируется по
всем бинарным пакетам • Подгружает конфиг (если есть) • Делает полезную работу
dh_install • Один из основых хелперов • Копирует файлы из
дерева исходников в бинарный пакет • Конфиг в <package>.install
<package>.install
Common Debian Build System (CDBS) • Набор отдельных Makefile’ов делающих
определенные действия • Нужные кусочки подключаются в debian/rules через include
debian/rules
Концепция • Собрать большой Makefile из нескольких маленьких кусочков •
Добавляет дополнительные таргеты (в том числе для каждого из бинарных пакетов) • Пакеты собираются последовательно • Classes & Rules
Последовательная сборка
Последовательная сборка package_1
Последовательная сборка package_1 dh_1
Последовательная сборка package_1 dh_1 dh_2
Последовательная сборка package_1 dh_1 dh_2 dh_3
Последовательная сборка package_1 dh_1 dh_2 dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1 dh_2
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1 dh_2 dh_3
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1 dh_2 dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1 dh_2 dh_3 ...
Последовательная сборка package_1 dh_1 dh_2 dh_3 ... package_2 dh_1 dh_2
dh_3 ... package_3 dh_1 dh_2 dh_3 ... ...
Classes • makefile.mk • cmake.mk • python-distutils.mk • perlmodule.mk
Rules • debhelper.mk • simple-patchsys.mk • git.mk
Достоинства CDBS • Поддержка различных policy • Простые пакеты собирать
легко
Недостатки CDBS • Сложные пакеты собирать трудно • Важен порядок
следования include’ов • Создает над-фреймворк сборки • Нужно знать набор переменных и таргетов • Сильно искажает реальнй процесс сборки
Недостатки CDBS • Сложно внедрить в произвольное место конвейера сборки
свою логику
CDBS в Яндексe • yandex-git-cdbs • yandex-svn-cdbs • yandex-hg-cdbs •
yandex-verstka-cdbs • yandex-lego-cdbs
git.mk (yandex-git-cdbs)
dh7 • Debhelper версии >= 7 • Магический скрипт dh
• Конкурент CDBS
debian/rules
Концепция • Единая точка входа – dh • Пакеты собираются
параллельно • Наглядность • Процесс сборки прозрачен • Процесс сборки контролируем в любых границах
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
Параллельная сборка
Параллельная сборка dh_1
Параллельная сборка dh_1 pkg_1
Параллельная сборка dh_1 pkg_1 pkg_2
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1 pkg_2
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1 pkg_2 pkg_3
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1 pkg_2 pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1 pkg_2 pkg_3 ...
Параллельная сборка dh_1 pkg_1 pkg_2 pkg_3 ... dh_2 pkg_1 pkg_2
pkg_3 ... dh_3 pkg_1 pkg_2 pkg_3 ... ...
Sequence addons • Perl модули • Позволяют добавить/исключить хелперы из
конвейера • Подключаются опцией --with • Лежат в /usr/share/perl5/Debian/ Debhelper/Sequence
dh_ycssjs
Build System Classes • Определеют систему сборки • По сути
тоже самое что Classes в CDBS • Подключаются опцией --buildsystem
Переопределение • Любой таргет или хелпер можно переопределить • Конкретный
хелпер можно исключить из конвейера • Конкретному хелперу можно добавить параметры
Переопределение
Пишем свой хелпер • Используем perl библиотеку – Debian::Debhelper •
Настраиваем окружение и парсим аргументы через init() • Итерируемся по всем бинарным пакетам • Читаем опциональный конфиг
yandex-debhelper • Набор яндексовых хелперов • Хелперы сделаны правильно •
Поддерживают dh7
dh_environment • Раскладывает файлы в зависимости от окружения (yandex-environment) •
Конфиг <package>.environment
dh_nginx • Кладет конфиг для Nginx • Конфиг <package>.nginx
dh_ycssjs • Билдит статику с посмощью ycssjs • Конфиг <package>.ycssjs
dh_gunicorn • Кладет конфиг init-скрипта для запуска WSGI приложений под
Gunicorn • Конфиг <package>.gunicorn
dh_nodeinit • Кладет конфиг init-скрипта для запуска Node.js приложений •
Конфиг <package>.node
Другие хелперы в Яндексе • dh_versions (yandex-dh-versions) • dh_clearvcs •
yandex-dh-make-ystatic • yandex-dh-make-ywww
От CDBS к dh7 • debian/rules сократился на 2/3 (благодаря
sequence addons) • Сборка стала быстрее • Процесс сборки стал нагляднее и более контролируемым На примере Поиска по Интранету
Intrasearch
Intrasearch
Intrasearch
Intrasearch
Intrasearch
Intrasearch
Intrasearch
Скорость сборки
Скорость сборки real 2m9.672s user 1m35.675s sys 0m23.154s
Скорость сборки real 2m9.672s user 1m35.675s sys 0m23.154s
Скорость сборки real 2m9.672s user 1m35.675s sys 0m23.154s real 1m33.441s
user 1m2.330s sys 0m13.830s
Выводы
Ресурсы • 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
Fin Вопросы?