Debian: локальный репозитарий пакетов на основе архива исходников

Рассказывается краткая история создания проекта Debian, принципы и цели проекта, динамика роста дистрибутива и сообщества. Приводится количественная оценка объёма и стоимости проекта. Описывается устройство дистрибутива и архива Debian, основные команды управления пакетами, а также пример создания локального зеркала исходников Debian и репозитория на его основе.

история

Этот проект был начат Яном Мёрдоком (Ian Murdock) 16 августа 1993г. В то время само понятие "дистрибутив Linux" ещё не существовало, а Яну к тому же пришла в голову идея организовать команду разработчиков, используя возможности глобальной Сети. К тому времени модель подобной распределённой разработки уже была опробована Ричардом Столлменом [1] в проекте GNU и Линусом Торвальдсом [2] для создания ядра Linux.

С самого начала была поставлена цель создать "народный дистрибутив" из полностью свободных программ, в духе идей созданного Р. Столменом Фонда Свободных Программ [3]. Ещё одной целью был упор на качество, надёжность дистрибутива - имеется в виду сведение к минимуму количества ошибок и тщательное согласование программ для совместной работы.
Эти цели были изложены Яном Мёрдоком в "Манифесте Debian" [4]. По мере развития эти идеи получили воплощение в целой серии документов - социальный контракт, конституция Debian, многочисленные технические "policy" [5].

Важной характеристикой этого проекта является его некоммерческая суть. Распределённость и открытость разработки подразумевает доступность дистрибутива для всех желающих. При готовности очередной версии изготавливаются CD-образы, которые можно свободно копировать и распространять. На основе Debianа были созданы другие дистрибутивы, в том числе коммерческие.
Такой подход не помешал Debianу устойчиво расти прошедшие почти 15 лет. Вот некоторые количественные показатели роста:

- v1.1 _Buzz_, Июнь 1996г., 474 пакетов
- v1.2 _Rex_ Декабрь 1996г., 848 пакетов, 120 разработчиков
- v1.3 _Bo_ Июль 1997г., 974 пакетов, 200 разработчиков
- v2.0 _Hamm_ Июль 1998г., 1500+ пакетов, 400+ разработчиков
- v2.1 _Slink_ 09 Марта 1999г., около 2250 пакетов, 2 бинарных CD
- v2.2 _Potato_ 15 Августа 2000г., 6 дисков (bin+src), почти 4000 бинарных пакетов, более 450 разработчиков
- v3.0 _Woody_ 19 Июля 2002г, 9000+ пакетов, 900+ разработчиков
- v3.1 _Sarge_ 6 Июня 2005г, 15000+ пакетов, 1400+ разработчиков
- v4.0r3 _Etch_ 17 Февраля 2008г, 18000+ пакетов, 1600+ разработчиков

Также стабильно росла всемирная сеть зеркал архива Debian, поддержка кроме первоначальной архитектуры Intel i386 ещё более 10 аппаратных платформ.
Проект Debian постепенно обрёл юридическое воплощение в форме некоммерческой организации SPI (Software for Public Interest Inc.)[6]. Эта организация представляет интересы сообщества Debian и ещё нескольких программных проектов, принимает и распределяет дотации деньгами и аппаратурой.

cообщество

Процесс разработки Debian с самого первого дня был открытым и распределённым. Участники проекта координировали свои действия через Интернет, постепенно создавая уникальное сообщество разработчиков - виртуальную республику с собственной конституцией, избранным народом лидером, со своими вполне реальными традициями и законами.

Кроме официальных разработчиков, сопровождающих программные пакеты, в это сообщество входит также огромная армия активных пользователей дистрибутива Debian. Любой обнаруживший ошибку может сообщить о ней, используя систему учета ошибок Bug Tracking System [7]. Существует более 180 списков рассылки, их перечень и архив сообщений доступны на специальном сервере [8].

На рабочей встрече "Свободное программное обеспечение", прошедшей в конце ноября 2001г. в Москве с докладом "Конституционная анархия Debian" выступили два разработчика - Петя Новодворский и Вартан Хачатуров [9]. В этом докладе идёт речь о проблемах, возникающих при координации такого глобального проекта с таким количеством участников, и способах их решения. Подробно рассказан процесс включения пакета в дистрибутив и программиста в команду разработчиков.

Ещё один взгляд на проект представлен в исследовании группы учёных из Universidad Rey Juan Carlos de Madrid [10]. В этой работе предпринята попытка приблизительно оценить стоимость труда, затраченного разработчиками, при использовании тех же оценок стоимости строки кода и производительности труда, которые применяются при оценке традиционной закрытой разработке. Оценка для дистрибутива v3.1 "Sarge" составила ~230 млн. строк кода, около 60 тыс. человеко-лет и ~8 млрд. долларов США (по методу [11]).

Но, как уже упоминалось, проект Debian изначально некоммерческий, и этот колоссальный труд и высочайшая квалификация являются результатом совершенно иных, неденежных стимулов. Среди талантливейших разработчиков, внесших свой вклад в проект Debian, нужно упомянуть прежде всего избираемых на основе голосования лидеров проекта.

- Ян Мёрдок, основатель и бессменный лидер с августа 1993г. по март 1996г.
- Брюс Перенс (Bruce Perens), с марта 1996г. по декабрь 1997г.
- Ян Джексон (Ian Jackson), с января 1998г. по декабрь 1998г.
- Викерт Аккерман (Wichert Akkerman), с января 1999г. по март 2001г.
- Бен Коллинс (Ben Collins), с апреля 2001г. по апрель 2002г.
- Бдейл Гарби (Bdale Garbee), с апреля 2002г. по апрель 2003г.
- Мартин Михльмайр (Martin Michlmayr), с март 2003г. по март 2005г.
- Бранден Робинсон (Branden Robinson), с апреля 2005г. по апрель 2006г.
- Энтони Таунс (Anthony Towns), с апреля 2006г. по апрель 2007г.
- Сэм Хоцевар (Sam Hocevar), с апреля 2007г. по апрель 2008г.
- Стив Макинтайр (Stive McIntyre), с апреля 2008г.

Звание лидера проекта не даёт особых привилегий, но является отражением степени авторитета данного разработчика, его видения и вклада в проект. Невозможно рассказать обо всех разработчиках, но могу подсказать, как можно получить список этой уникальной команды, и заодно выстроить его по такому критерию, как количество сопровождаемых пакетов - см. статью [12].

Упомянутый дистрибутив v2.2, выпущенный в августе 2000г., содержал посвящение одному из разработчиков - Joel 'Espy' Klecker, тяжело болевшему и умершему в возрасте 21 год. Обязательно найдите и прочтите это посвящение - судьба 'Espy' позволяет лучше понять и почувствовать, что же такое сообщество Debian и из каких людей оно состоит.

дистрибутив

Основой дистрибутива Debian является собственный формат пакетов и программа управления ими - соответственно deb и dpkg. Вместе с набором файлов, составляющих пакет программ, в архив пакета включены сценарии, выполняемые до и после установки, а также перед и после удаления пакета. В базе данных информации о пакете хранится список зависимостей этого пакета от других. Такая развитая система управления пакетами позволяет легко добавлять и удалять отдельные пакеты, сохраняя полный контроль над системой.

Над программой dpkg со временем появились оболочки более высокого уровня, предоставляющие пользователю дополнительные удобства. Наиболее продвинутой стала программа apt-get, могущая, помимо прочего, проапгрейдить весь дистрибутив, или скачать из архива необходимые исходники, собрать и поставить нужную программу. apt-get уже позаимствовали другие дистрибутивы, основанные на другом формате пакетов, rpm.

В Debian сейчас входят на самом деле не один, а сразу три дистрибутива.
Первый, т.н. стабильный, понемногу меняется с первого релиза в августе 2000г., в настоящий момент это v4.0r3. Развитие этой версии не происходит, только исправляются обнаруженные ошибки и затыкаются открытые дыры в защите.

Бурное, не прекращающееся ни на один день развитие происходит в т.н. нестабильном дистрибутиве, кодовое имя sid. В него постоянно добавляют новые пакеты, свежие версии старых программ, правят всё, что сочтут нужным разработчики. Как следствие, вносятся и новые ошибки.

Для желающих иметь постоянно развиваемый, но более стабильный дистрибутив, был создан промежуточный, т.н. тестовый дистрибутив woody. В него включают версии пакетов, которые за две-три недели в unstable не обнаружили серьёзных ошибок и не вызвали ошибок в других пакетах. Благо, организация архива позволяет иметь несколько версий одного и того же пакета.

Перед выпуском релиза - новой стабильной версии Debian, происходит т.н. заморозка, freeze. На некоторое время развитие дистрибутива прекращается, все силы разработчиков направляются на устранение ошибок и замечаний. Как уже упоминал, постоянно работает система отлова и учёта ошибок [7]. Увы, ошибки при программировании вещь неизбежная, а в таком глобальном проекте их число уже перевалило за сотню тысяч.

Увлекательным событием для разработчиков становится проводимые время от времени особые уикенды - Bug Squash Party. В реальном времени, общими усилиями, ловятся и безжалостно уничтожаются сотни багов. Ошибкам присваиваются разные уровни приоритетов, для готовности релиза стараются свести к минимуму т.н. release critical bugs.

Впрочем, эта система работала раньше, при наличии только двух веток дистрибутива - стабильной и экспериментальной. По мере роста размера дистрибутива, см. часть 1, сроки между релизами стали непомерно увеличиваться и выходить из под контроля. Реорганизация архива и создание третьей, тестовой ветви дистрибутива, привели к тому, что ситуация стала несколько другой.

Во-первых, многие важные пакеты со стажем, включённые с самых ранних версий, мало подвержены влиянию перемен и показывают хорошую стабильность во всех версиях.

Во-вторых, количество пакетов, размер дистрибутива и пользовательская база неизмеримо выросли. Не только проект Debian, весь мир Linux живёт теперь в другом темпе, обновления происходят постоянно. Так что ожидать полной стабилизации бесполезно, нужно как-то научиться жить в этом темпе, находить компромисс между стабильностью и новизной.

архив

В качестве решения этой проблемы - безостановочная гонка версий и постоянное исправление ошибок - предлагается создать местное зеркало архива Debian и настроить средства разработки.

С декабря 2000г. архив Debian подвергся реорганизации и сейчас устроен в виде пула из трёх традиционных секций - main, contrib и non-free, далее разбит на каталоги по начальной букве (для lib* - по 4 первым буквам), и на третьем уровне - каталоги с названием пакета. В каталоге хранятся несколько версий исходников и все версии бинарных пакетов, получающихся из этих исходников для всех аппаратных платформ. На сегодняшний день это пакеты для 11 различных архитектур.

Исходники хранятся в виде 3 файлов, например:

- название-пакета_версия-N.diff.gz;
- название-пакета_версия-N.dsc;
- название-пакета_версия.orig.tar.gz.

Третий по счёту файл, обычно самый большой, представляет собой оригинальный архив исходников, взятый из Интернет, т.н. upstream. Это тот код и документация, которые выложили в Сеть авторы программы. Таким образом, архив Debian уже представляет интерес как крупнейшая коллекция исходников в Сети.

В первом из файлов, с расширением .diff.gz, хранятся исправления, патч, который позволяет встроить программу в систему Debian, согласовать её с другими, иногда разбить единую программу на несколько пакетов.
Третий маленький файлик .dsc представляет собой описание пакета, содержит некоторые поля для программы управления пакетами, а также контрольные суммы и подпись сопроводителя. Для программ, созданных специально для Debian, файла diff.gz нет, а тарбол (файл-архив) называется имя-пакета_версия.tar.gz

Для каждой из версий исходников и для каждой из 13 программно-аппаратных платформ в каталоге пакета хранятся также откомпилированные бинарные пакеты, например название-пакета_версия_i386.deb для архитектуры i32.

В исследовании [potato-count], приведены соотношения между объемом upstream кода и кодом, добавленным или исправленным сопроводителями пакета. Из приведенного анализа видно, что из ~55 млн. строк кода, составляющих potato, только ~1/10 часть добавлена сопроводителями пакета. Это вполне согласуется с наблюдением, что .diff.gz в среднем гораздо меньше по объёму и изменяется, как правило, чаще, чем upstream tarball.

При каждом изменении исходников происходит перекомпиляция всех бинарных пакетов. Но самое важное качество свободных программ - доступность исходников, подсказывает нам, что получение бинарного пакета можно сделать на месте, не загружая канал связи. Во многих случаях, все архитектуры компилить нет необходимости, так что достаточно настроить место разработчика для самой распространённой у нас архитектуры i386.
Но даже с учётом приведенных соображений, задача синхронизации локального зеркала архива Debian требует точной настройки и, как минимум, выделенного канала на 32 KB/сек.

Расскажу поподробнее, как организовано зеркалирование архива Debian, реализованное в своё время в нескольких организациях, использующих сервера на основе Linux.

Для отслеживания изменений и выполнения копирования используется пакет mirror v2.9. Этот большой перловый скрипт позволяет получить список файлов на сервере из заархивированного листинга ls-lR.gz, сравнить с имеющимся в локальном зеркале. Но самое главное, с помощью перловых регулярных выражений можно тщательно настроить список выкачиваемых файлов, точнее, то, что нужно исключить, а всё остальное копировать. Например, документация на многих языках для нас не очень интересна, ядро Linuxа многие отслеживают отдельно, есть очень тяжёлые snapshot'ы, интересные только разработчикам. Для заинтересованных в деталях файла конфигурации программы mirror и настройки зеркалирования архива Debian этот файл выложен на сайте Гомельской группы пользователей Linux [13].

В итоге, после первоначального трудоёмкого выкачивания базового архива исходников объёмом более 15 GiB для дальнейшей синхронизации изменений хватает обычно нескольких ночных часов online.

разработка

В Debian существует множество инструментов, упрощающих и облегчающих процесс получения из исходников готовых пакетов. Самым высокоуровневым является, пожалуй, уже упоминавшаяся программа apt-get. Кроме установки пакетов и обновления системы, apt-get может также служить оболочкой для вызова более низкоуровневых программ, выполняющих сборку пакетов. Если вы настроили файлы конфигурации в каталоге /etc/apt - apt.conf и sources.list, далее процесс сборки пакета выполняется вызовом 2 команд:

... $ sudo apt-get build-dep имя-пакета
... $ apt-get source -b имя-пакета


Первая команда проверяет зависимости собираемого пакета от других, при необходимости выкачает и установит все необходимые программы. Вторая команда выполняет собственно сборку.

Если вы захотите вмешаться в процесс сборки пакета, вы можете начать править файлы исходников, управляющие этим процессом. Эти файлы лежат в каталоге debian который создаёт и заполняет сопроводитель пакета. Подробно узнать назначение каждого из файлов, а также сам процесс построения пакетов, можно из документа [14], имеющимся в русском переводе. Этот документ доступен либо с официального сайта [15], либо, как всегда, из архива в пакете maint-guide.

Для сопроводителя также имеется большой выбор высокоуровневых скриптов для построения пакетов из исходников. Например, установив пакет devscripts, вы можете выполнять сборку из каталога распакованных исходников таким образом:

... $ debuild -b -uc 2>&1|tee build.log
... $ fakeroot debian/rules clean


Вторая команда необязательна - она очищает каталоги от временных и производных файлов.

Конечно, процесс разработки не всегда удаётся свести к двум-трём простым командам. Это происходит в том идеальном случае, к которому постоянно стремится команда разработчиков и всё сообщество Debian. Любые ошибки в процессе сборки для любой из 11 платформ составляют основную массу БД [7]. Рано или поздно серьёзному разработчику придётся зарыться вглубь программы или используемого языка программирования. Здесь давайте снова обратимся к уже дважды упоминавшемуся исследованию [10]. Среди ~230 млн. строк исходников расклад по строкам на разных языках программирования таков:

- C: 130,847,000 (57%)
- C++: 38,602,000 (16,8%)
- Shell: 20,763,000 (9%)
- LISP: 6,919,000 (3%)
- Perl: 6,415,000 (2.8%)
- Python: 4,129,000 (1.8%)
- Java: 3,679,000 (1.6%)
- FORTRAN: 2,724,000 (1.2%)
- PHP: 2,144,000 (0.93%)
- Pascal: 1,423,000 (0.62%)
- Ada: 1,401,000 (0.61%)

Менее 0.5% количества строк относились к Objective C(0,37%), ML(0.31%), Yacc (0.29%), Ruby (0.26%), C# (0.23%), Lex (0.10%). Прочие языки набрали менне 0.1%
Данный подсчёт сделан на основании дистрибутива трехлетней давности, но процентное соотношение между используемыми языками должно в основном сохраниться для текущего архива исходников.

выводы

Создание локального зеркала архива Debian в значительной степени решает проблему ПО для корпоративной сети. Уникальная команда разработчиков и сообщество пользователей Debian могут во многих случаях служить в качестве бесплатной службы поддержки.

Зеркалирование только исходного кода из архива свободно-доступных программ и настройка соответствующих инструментов разработки позволяет значительно повысить эффективность использования канала связи.

Использование свободно-доступных программ снимает проблему легальности используемого ПО, значительно повышает надёжность и уровень защиты серверов и сети. Если принять точку зрения, выраженную в публикации [кризис ПО], локальный архив Debian и соответствующее переоснащение рабочих мест показывают возможность преодоления кризиса в области ПО.

Участие в процессе разработки может рассматриваться как полезная практика для студентов, изучающих системное и прикладное программирование. При достаточно высокой квалификации собственных разработчиков возможно создание постоянно обновляемого и пополняемого, но достаточно стабильного дистрибутива нового типа.

Современный дистрибутив, как и система обеспечения безопасности - это непрерывный процесс обновления, в котором скорость реакции на обнаруженные ошибки является одним из решающих факторов.

ссылки и библиография

1. Richard M. Stallman. Биография и официальная страница Ричарда М. Столмена расположены на сайте (http://www.stallman.org, www.stallman.org). Большое количество ссылок и цитат из интервью и выступлений приведены на сайте Ник. Безрукова
http://www.softpanorama.org/People/Stallman/index.shtml

2. Linus Torvalds. Несмотря на свою молодость и виртуальность, Линус Торвальдс в мире и особенно в Интернет, чрезвычайно популярен. На сайте Ник. Безрукова ему также посвящён отдельный каталог http://www.softpanorama.org/People/Torvalds/index.shtml

3. Free Software Foundation. Организация, созданная Ричардом М. Столменом [RMS] для продвижения свободных программ. Философия движения за свободу программ подробно рассказана на http://www.gnu.org

4. Манифест Debian, написанный Яном Мёрдоком в 1994г., ftp://ftp.debian.org/

5. FTP-архив проекта Debian, каталог с документацией ftp://ftp.debian.org/doc

6. Software for Public Interest Inc. http://www.spi-inc.org/

7. Bug Tracking System http://www.debian.org/Bugs/

8. Архив списков рассылки, подписка, статистика, http://lists.debian.org

9. Петя Новодворский, Вартан Хачатуров, "Конституционная анархия Debian", доклад на рабочей встрече "Свободное программное обеспечение". http://gomelug.agava.ru/articles/anarchy.html

10. Jesus M. GonzАlez-Barahona и др., Measuring Libre Software Using Debian 3.1 (Sarge), http://www.upgrade-cepis.org/issues/2005/3/up6- 3Amor.pdf

11. Boehm, Barry. 1981. Software Engineering Economics. Englewood Cliffs, N.J.: Prentice-Hall, Inc. ISBN 0-13-822122-7.

12. Олег П. Филон, статья "Этюд о героях невидимого фронта" http://gomelug.agava.ru/articles/sketch_o_heroes.html

13. Файл конфигурации программы mirror v2.9, настроенный для копирования исходного кода всех пакетов из архива Debian.
http://gomelug.agava.ru/articles/mirror.deb-src

14. Раздел документация на официальном сайте, руководство разработчика, имеется русский перевод. http://www.debian.org/doc/maint-guide/ 15. Официальный сайт проекта Debian, http://www.debian.org




Олег П. Филон, IBA-Gomel, Беларусь, ophil@union.gomel.by, philono@gomel.iba.by


Сетевые решения. Статья была опубликована в номере 07 за 2008 год в рубрике бизнес

©1999-2021 Сетевые решения