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
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
0
110
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.5k
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
210
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
520
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
どこまでゆるくて許されるのか
tk3fftk
0
480
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Docker and Python
trallard
47
4k
Rails Girls Zürich Keynote
gr2m
96
14k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
460
Done Done
chrislema
186
16k
BBQ
matthewcrist
89
10k
What's in a price? How to price your products and services
michaelherold
247
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
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 Вопросы?