27
© MIRANTIS 2013 PAGE 1 © MIRANTIS 2013 О правильной сборке RPM- пакетов Matthew Mosesohn Senior Deployment Engineer

О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 PAGE 1 © MIRANTIS 2013

О правильной

сборке RPM-

пакетов

Matthew Mosesohn

Senior Deployment Engineer

Page 2: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 2

О компании Mirantis

● Лидер в области установки и технической

поддержки OpenStack

● Разработала FUEL для автоматизации

развертывания OpenStack

● В работе со всеми программными

решениями использует принцип Open

source

Page 3: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 3

Сборка пакетов? А как же

облако?

● OpenStack — кластер систем

Linux

● Системы Linux представляют

собой компиляцию ПО

● Программы собираются в пакеты

● Пакеты должны быть собраны

правильно

● Некачественная сборка приводит

к проблемам в работе систем

Page 4: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 4

Что такое программный

пакет?

● Пакетом называется специальным образом

отформатированный файл,

● содержащий скрипты, правила и файлы,

● для которого определены требования и

функции

Page 5: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 5

Getting Started

● Отличный пример:

http://fedoraproject.org/wiki/How_to_create_an

_RPM_package

● RPM.org

● Самостоятельная загрузка и доработка

SRPM

– начните с основных поставщиков (Red Hat или CentOS)

– разработки третьих лиц могут иметь свои

особенности/недостатки

Page 6: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 6

Кто собирает программные

пакеты?

● Основные поставщики (Red Hat, Ubuntu, SuSE)

● Вторичные поставщики (CentOS, Mint)

● Разработчики

● Сисадмины

Page 7: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 7

Зачем пересобирать

пакеты?

● Для установки патчей

● При смене логотипов / другой графики

● При добавлении нового функционала

● Для обеспечения бесшовной сборки

Page 8: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 8

Что делает сборщик

пакетов: ● Определяет требования для установки ПО

● Составляет описание программы

● Ведет журнал изменений

● Предварительно компилирует ПО

● Определяет адреса установочных

директорий и способ установки ПО

● Добавляет вспомогательные скрипты, чтобы

обеспечить успешную установку

● Добавляет скрипты Glue для

апгрейда/даунгрейда

Page 9: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 9

Система для сборки пакетов

● Минимальный набор пакетов

● Система должна быть чистой

● Должна быть частью более крупной

автоматизированной системы

Page 10: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 10

Чего следует избегать при

сборке:

● Доступа к сетям

● Доступа к внешним кодам

● Влияния на другие пакеты и их файлы

● Чрезмерной зависимости от системных

сервисов

● Предварительно скомпилированного ПО

Page 11: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 11

Пример spec-файла

● Prep

● Build

● Install

● Pre

● Post

Page 12: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 12

Пример spec-файла

Name: python-osnagios

Version: 1.1

Release: 4%{?dist}

Summary: Nagios plugins for OpenStack

Group: System/networking

Source0: %{name}.tar.gz

Requires: python >= 2.6, python-argparse, python-amqplib, libvirt-python, openstack-swift, python-simplejson, python-

httplib2, python-setuptools

BuildRequires: python-setuptools

%description

Nagios plugins for OpenStack

Page 13: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 13

Пример spec-файла

%prep

%setup -c

%build

%{__python} setup.py build

%install

%{__python} setup.py install -O1 --skip-build --root %{buildroot}

%files

%defattr(-,root,root,-)

%{python_sitearch}/os_nagios-0.2.egg-info

%{python_sitearch}/os_nagios/*

%changelog

* Wed Jan 23 2013 Mirantis Product <[email protected]> - 1.1-4

- Initial release

Page 14: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 14

Prep

%prep

%setup -c

%patch0 -p1

● Распаковка исходных файлов

● Использование macro %setup

● Применение патчей

Page 15: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 15

Build

%{__python} setup.py build

./configure

make $BUILD_OPTIONS

● Компилирование ПО

● Прописывание опций сборки

Page 16: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 16

Install

%{__python} setup.py install -O1 --skip-build --root %{buildroot}

make install

/usr/bin/install -d $RPM_BUILD_ROOT %{_datadir}/%{name}

/usr/bin/install -m 755 $RPM_BUILD_ROOT myapplication %{_datadir}/%{name}/myapplication

gem install --local --install-dir %{gembuilddir} --force %{SOURCE0}

Создание «корневой» папки для установки файлов

● Размещение в ней собранного ПО

● Добавление дополнительных файлов приложений

● Удаление ненужных файлов

Page 17: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 17

Pre

● Используется относительно редко

● Все необходимые шаги по подготовке к

установке пакета

● Некоторые пакеты создают специальный

аккаунт пользователя

Page 18: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 18

Post

● Регистрация разделяемых библиотек

(ldconfig)

● Регистрация приложения для запуска

● Модификация sudoers

● Добавление glue-кода для апгрейда (при

необходимости)

● Перезагрузить сервисы (при

необходимости)

Page 19: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 19

«Нужно» и «нельзя» при

сборке

Page 20: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 20

Нужно:

● Обеспечить компактность и логичность секций %prep и

%install

● Добавить комментарии, чтобы другим сборщикам были

понятны ваши идеи

● Исходные файлы называть %{SOURCE0},

%{SOURCE1} и т.д. (для упрощения последующих

апдейтов)

● По каждому апдейту составить подробный журнал

изменений

● Использовать %setup -c для извлечения исходных tar-

или zip-файлов

● Использовать mkdir -p /path перед установкой файлов в

$RPM_BUILD_ROO

Page 21: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 21

Нельзя:

● Делать ссылки на другие директории; ваша текущая рабочая

папка в %prep — новая папка с исходными файлами

● Использовать ‘cp’ для перемещения исходных файлов из папки-

источника в $RPM_BUILD_ROOT.

– Использовать install -m 0755 source

$RPM_BUILD_ROOT/path/to/target

● Загружать исходные файлы с URL. Собирайте пакеты в

собственной системе в rpm с исходной строкой: Source0: %{name}-

%{version}.tar.gz

● Рассчитывать на сетевое подключение для работы секций %pre и

%post в пользовательской системе

● Пытаться заменить файл, принадлежащий другому RPM

● Забывать о зависимостях (sudo, bash, gcc, autoconf, python-

setuptools)

Page 22: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 22

Бэкпортинг

Page 23: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 23

Бэкпортинг

Применяется для:

– Устранения багов

– Добавления новых функций

– Для адаптации пакетов к работе в системах со старыми

версиями библиотек

– Интеграции новых, не полностью совместимых с

системой пакетов

Page 24: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 24

Пример бэкпортинга

● Программа: dnsmasq версия 2.64

● Сервер DHCP и DNS

● Полезна для управления сетями

небольшого масштаба

● Необходимо было обновить программу до

2.64 для устранения бага unicast DHCP для

различных сетевых интерфейсов

● Последняя версия в CentOS/RHEL — 2.48

Page 25: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 25

Процедура бэкпортинга

● Загрузите исходный RPM-файл

● rpm -i dnsmasq-2.64-1.fc18.src.rpm

● Отредактируйте dnsmasq.spec

● Добавьте журнал изменений

● Запустите `rpmbuild -ba dnsmasq.spec`

● Установите созданный RPM

● При необходимости проведите отладку

Page 26: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 26

Проблемы и недостатки

бэкпортинга ● Отсутствие поддержки SystemD в CentOS

● Необходимость конвертирования сервисных

скриптов в SysV

● При необходимости приходится

использовать старые копии

● Для исходного скрипта добавляется новый

исходный файл

● Исходный скрипт добавляется в секцию

%install

● По возможности закомментировать строки

SystemD

Page 27: О правильной сборке RPM пакетов0x1.tv/img_auth.php/8/80/О_правильной_сборке_RPM-пакетов...Доступа к ... Влияния на

© MIRANTIS 2013 Стр. 27

Спасибо за внимание!

Есть вопросы?