Upload
andrey-fesenko
View
527
Download
2
Embed Size (px)
Citation preview
poudriere или как я перестал волноваться иполюбил pkg
Андрей Фесенко[email protected]
SPbLUGСанкт-ПетербургJuly 29, 2015
Вводная ports pkg poudriere Заключение
Как всё начиналось
I 1993: pkg_install/ 1994: ports (jhk@ Jordan K. Hubbard)I 1995: около 200 портовI 1999: около 2000 портовI 2013-2014: порядка 20 тысячI Сейчас: 25085 (даже, после довольно массовых чисток)
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Чем собирать
I пакеты, собираются из портовI 2003: portbuild - набор скриптов, пока не начал составлять
доклад и не зналI 2005: Tinderbox - серьёзный инструмент, куча
зависимостей (NFS, BD, Perl, PHP, www)I 2001/2011: portupgrade/portmaster - скорее для личного
пользования, на десктопеI 2012: poudriere - нынешний мейнстрим
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Хронология и утилиты
I 1994: первые коммиты, как портов так и пакетовI 2001: portupgrade (pkgtools) - более ориентирован на
пакеты, в том числе расширяет возможности (требует rubyдля работы)
I 2011: portmaster - скрипт отслеживания зависимостей иуправления портами/пакетами(настройка/установка/удаление), последнее время почтине поддерживается, хотя поддержка основногофункционала сохраняется и актуализируется (оченьразросся, простой sh)
I 2012: portsnap - утилита, для скачивания и обновленияпортов, из сжатых образов/снапшотов
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Развитие ports
I 2013: OPTIONSngI простое вкл/выклI единичный или множественный выборI опции могут задаваться как для единичного порта, так и
глобально
I USES - для пользователей незаметно, но весьма важныйфункционал для портмантейнеров
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Развитие ports
I StageDir - порты теперь не устанавливаются в корневуюсистему, а устанавливаются в “DESTDIR”, позволяетсобирать пакеты без root привилегий и улучшаетотслеживание файлов. При внедрении многие порты былиисключены из дерева.
I внедрение CPE (Common Platform Enumeration), длясистематизации и облегчения отслеживания обновленийбезопасности.
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Этапы внедрения pkg
Всякие цитаты“src/usr.sbin/pkgne ladd/perform.c
/** This is seriously ugly code following. Written very* fast![And subsequently made even worse.. Sigh!* This code was just born to be hacked, I guess.. :) ]*/
–jhk@Jordan K. Hubbard18 July 1993“
“Здесь. Должна быть цитата, о том что, то ли пакеты, то липорты, ужасны и их надо срочно править“
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Этапы внедрения pkg
I Sept. 2010: Первый коммитI January 2012: 1.0 beta1 pkg добавлено в дерево портов
ports-mgmt/pkgI August 2012: 1.0I October 2012: по умолчанию в CURRENTI June 2013: 1.1I January 2014: 10.0 на основе pkgI July 2014: 1.3I September 2014: pkg_install EOLI December 2014: 1.4I April 2015: 1.5
pkg в отличии от pkg_install не поставляется в составесистемы, там находится только заглушка, длясаморазвёртывания
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Этапы внедрения pkg
Не только FreeBSD
I PC-BSD начиная с 2014, PBI стал всего лишь фронтендомк pkg
I DragonflyBSDI начиная с 2012 внедрение DPorts (форк pkg)I в конце 2013 полный переход на DPorts, отказ от pkgsrc
I 2014 - начальная поддержка в OS X и LinuxI 2015 - начальная поддержка в NetBSD/EdgeBSD
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Что имеем
I FreeBSD.org pkg mirror использует DNS SRV,распределённый кластер US/UK/RU (для 8.4 EoL август,оставлена возможность обновления ftp)
I бранчи - например для 10-киI latestI quarterlyI releaseI release_0I release_1
I pkg -o DEBUG_LEVEL=2 (4) если что то пошло не такI pkg upgrade ‘pkg query -e ’%n = perl5.20’ %ro | cut -d “/” -f
2-‘I portmaster –list-origins > /home/user/my-port-listI nginx имеет более 80 опций,
77,371,252,455,336,267,181,195,264 комбинацийI /usr/local/etc/pkg/repos/ - для включения выключения
каждого репо свой .conf
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Зачем?
I BSD LicenseI Сборка пакетов (.txz) для всех версий начиная с 8.3I ТестированиеI КроссборкаI Построение репозитория, локального, с изменёнными
опциями, собственными патчамиI Очень прост в настройке и использовании
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
I Каждый пакет собирается в “чистом окружении” (jail copy)I Дерево портов, возможны вариантыI Set - “окружения” возможны различные конфигурации (-z)I DUD - обработка, запрещённых/сломанных портовI опциональный AJAX веб интерфейс
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
ТребованияI FreeBSD>= 8.3I Желательно ZFS pool >= v15 (возможна работа и на UFS)
и не менее 8Gb места на дискеI Версия системы на которой производится сборка, должна
быть больше или равна, той пакеты которой собираетесьсобирать
I общее правило чем больше тем лучше/быстрееI CPU,I RAM (1-2Гб, если собирать в памяти),I Disk 1.5Гб на каждый jail,I 4Гб дерево портов, плюс место под исходные коды и
готовые пакеты (МНОГО)I Сеть, для загрузки исходных кодов и обновления
I веб-сервер, если нужен удалённый доступ к репозиторию ихочется смотреть красивые логи/статусы
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
I POUDRIERE(8) - наш лучший друг (и немного/usr/local/etc/poudriere.conf.sample)
I настройки для окружений хранятся в/usr/local/etc/poudriere.d/
I <jailname>-<setname(tree)>-make.conf(src.conf,options/)для конкретного setname(tree)
I <setname(tree)>-make.conf(src.conf,options/) для всеходноимённых setname(tree)
I make.conf(src.conf,options/) - общиеI по такой же схеме возможно задание poudriere.conf,
blacklist
I Если собрались собирать пакеты, такие же как ужеустановленные порты, просто скопируйте /var/db/ports/ в/usr/local/etc/poudriere.d/*-options/ формат одинаковый
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
Заглянем под копотI Заготовленный ранее, образцовый jail, монтируется ro (так
что не изменяется)I Для каждого билдера создаётся отдельный джейл (по
умолчанию =nCPU) (zfs clone/cp)I перед сборкой каждого пакета, билдер откатывается до
образцового состояния (чистится)I kill -9, после сборкиI Сетевой доступ, только на этапе скачивания пакета (если
он не закеширован)I Зависимости устанавливаются из пакетов, собранных
ранее (начинается с pkg)I После завершения возможна, отладка в интерактивном
режиме, так же сохранение отладки
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
I Установка возможна из пакетов, портов, github (самоесвежее и интересное)
I poudriere ports -cI poudriere jail -c -j 10amd64 -v 10.1-RELEASE -a amd64I poudriere ports -uI poudriere bulk -j 10amd64 -f origins.list % сборка нескольких
портов (категория/имя по одному на строку)I poudriere bulk -j 10amd64 -o ports-mgmt/pkgI poudriere options -j 10amd64 -c ports-mgmt/portmasterI Это конечно самый простейший вариант, настроить, как
при создании, так и при запуске, можно довольно многоI poudriere bulk -v -j 110amd64 -z x220 -f x220-port-listI возможен запуск в режиме демона
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
Кроссборка
I Довольно легко и непринуждённоI Устанавливаем emulators/qemu-user-static (или просто
отмечаем опцию/отключена)I kldload imgact_binmisc
Страшное колдунство, что бы “появился” процессор нужнойархитектуры“binmiscctl add armv6 –interpreter"/usr/local/bin/qemu-arm"–magic"x7fx45x4cx46x01x01x01x00x00x00x00x00x00x00x00x00x02x00x28x00"–mask "xffxffxffxffxffxffxffx00xffxffxffxffxffxffxffxffxfexffxffxff"–size 20 –set-enabled“
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Как
Не ШмаглаI не реализована чистка логов, если собирать что то часто,
то всё же копятся (rm -Rf)I по утверждению одного из разработчиков, не очень
хороший код для работы в jailI иногда какие либо стопорения, лечимые перезапускомI не очень доходчивое разрешение зависимостей, так как
порты в этом месте пока оставляют желать лучшего,приходится поломать голову
I не может “населить” репозиторий пакетами с опциями поумолчанию, для уменьшения бесполезной работы
I Если используете не актуальные версии, аккуратнее сименами jail
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Подборка ссылок
При подготовке слайдов, вероятно, использовались материалыдоступные по следующим ссылкам.
I Handbook Chapter 5. Installing Applications: Packages andPorts
I Handbook 5.6. Building Packages with PoudriereI FreeBSD: 5 years of pkg A end less journeyI Third-party software management under BSD (EuroBSDCon
2006)I Video ports tree 20th anniversaryI The Ports Management Team (блог не обновляется)I FreeBSD Ports and Packages – Getting Back Being the Best
(2011)I Embedded FreeBSD Development and Package Building via
QEMUI PKG note bapt (2011)
poudriere или как я перестал волноваться и полюбил pkg
Вводная ports pkg poudriere Заключение
Подборка ссылок
При подготовке слайдов, вероятно, использовались материалыдоступные по следующим ссылкам.
I Tinderbox and Poudriere - Automatic Ports Testing andPackage Building on FreeBSD
I Poudriere: The future of Package Building (2013)I How to build and use QEMU User Mode on FreeBSDI FreshPorts (очень удобный “вебинтерфейс” к портам)
poudriere или как я перестал волноваться и полюбил pkg