Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 6: Управление пакетами

Оригинал: "Ubuntu Hacks: Chapter 6 - Package Management"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2010 г.

Совет # 65: Создаем свой собственный репозитарий пакетов

Создайте и управляйте репозитарием пакетов для распространения своих собственных пакетов Ubuntu.

Ubuntu использует онлайн репозитарии пакетов для поиска доступного программного обеспечения, а затем скачивает его на ваш компьютер для установки. Если вы создаете свои собственные пакеты Ubuntu, вы можете установить их непосредственно с помощью утилиты dpkg [Совет # 57], но это не очень удобно, если вы хотите, чтобы ваши пакеты были общедоступными или если их надо устанавливать на большом количестве компьютеров. Решение состоит в создании вашего собственного репозитария пакетов, точно такого, как используются для распространения официальных пакетов Ubuntu, и заполнения его вашими собственными пакетами. После того, как пакеты будут опубликованы в репозитарии, любой сможет установить ваши пакеты с помощью любого стандартного инструментального средства, предназначенного для управления пакетами, такого как apt, Synaptic или Adept. Все, что им для этого нужно сделать, это добавить в систему адрес репозитария [Совет # 60].

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

Анатомия репозитария

Репозитарий пакетов Ubuntu, на самом деле, довольно прост. В самом простейшем виде это может быть всего лишь несколько пакетов, размещенных на веб или FTP сервере, на котором также размещен специальный файл Packages.gz, описывающий пакеты. Каждый пакет является самодостаточным файлом .deb, который можно загрузить и установить на компьютере, а файл Packages выступает в роли каталога пакетов, которые находятся в данном репозитарии, и включает в себя такую информацию о каждом пакете, как название, описание, версию, зависимости, имя лица, поддерживающего пакет, место, где фактически располагаются файлы пакета. Выбрав файлы Packages из различных репозитариев, Ubuntu может предоставить пользователю список доступных пакетов и их описания, а также указать зависимости, не загружая при этом каждый пакет по отдельности. Для небольшого репозитария все, что вам нужно обеспечить, это наличие файлов .deb и файла Packages, причем настроить все это достаточно просто.

В больших репозитариях часто есть дополнительные файлы и эти репозитарии структурированы по-другому с тем, чтобы сделать их более эффективными. Например, в некоторых крупных репозитариях пакеты размещаются в поддиректориях, которые имеют название по первой букве имени пакета, а не просто сваливаются все в один и тот же директорий: audacity и aumix попадают в поддиректорий a/, lam — в поддиректорий b/ и т. д. . Таким образом, ни в одном из директориев не хранится слишком много файлов и производительность файловой системы сервера не может стать узким местом. С этим, как правило, не возникает проблемы до тех пор, пока у вас не будут тысячи пакетов, так что если вы не настраиваете исключительно большой репозитарий, вам нечего об этом беспокоиться.

В некоторых крупных репозитариях также реализованы пулы пакетов. Пулы являются способом экономии дискового пространства и процессорного времени в том случае, когда у вас много репозитариев, в которых размещены одни и те же пакеты. Так обстоит дело с официальным репозитарием Debian, например, в случае, если некоторые пакеты могут в одно и то же время одновременно находиться в двух или большим числе репозитариев: Experimental (Экспериментальный), Unstable (Нестабильный), Testing (Тестируемый) и Stable (Стабильный). Пулы позволяют запоминать все пакеты во всех версиях на сервере в одной и той же структуре директориев, а каждый репозитарий выступает в роли виртуального индекса этих списков или списков, которые используются для доступа к этим пакетам. Следовательно файл Packages каждого репозитария является ссылкой только на подмножество пакетов, которые находятся в общем пуле пакетов.

Приступаем к работе

Чтобы создать свой собственный репозиторий, сначала нужно создать сами пакеты с программами (см. разделы "Создаем пакет Ubuntu" [Совет # 62], "Компилируем пакет с исходным кодом" [Совет # 63] и "Конвертируем пакет, не предназначенный для Ubuntu" [Совет # 64]). Прежде, чем вы попытаетесь публиковать пакеты в репозитарии, установите их вручную на вашей локальной системе и убедитесь, что они работают правильно.

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

Основной тонкостью при поддержке репозитария является правильная генерация файла Packages и есть ряд инструментальных средств, которые помогут вам делать это просто и должным образом. Средством, которое вы будете использовать в этом совете, является apt-ftparchive, простая программа, которую вы можете запускать всякий раз, когда захотите обновить репозитарий. Она лучше всего подходит для ручного сопровождения небольшого количества пакетов в простом репозитарии. К числу других средств, которые можно рассмотреть, относится утилита mini-dinstall, которая функционирует как демон и автоматически обрабатывает новые пакеты по мере того, как они загружаются в специальный входной директорий, а также программа dpkg-scanpackages, которая запускается вручную. Самым старым среди всех менеджеров репозитариев является сама программа dinstall, которая предназначена для работы с очень большими репозитариями, таких как официальные сервера пакетов Debian, содержащих десятки тысяч пакетов.

apt-ftparchive является частью пакета apt-utils, так что самое первое, что нужно сделать, это установить apt-utils:

$ sudo apt-get install apt-utils

После этого нужно создать в корневом директории веб-сервера директорий для хранения пакетов. Вы можете просто создать один директорий и помещать в него все пакеты, но для удобства в будущем хорошо создать поддиректорий, что позволит вам хранить подмножества пакетов. Этот подход обычно используется при публикации пакетов, создаваемых для различных релизов, например, различные версии одного и того же пакета для Dapper и Breezy. В этом примере вы создадите поддиректорий пакетов для релиза Dapper, но вы, если захотите, можете назвать директорий по-другому. Репозитарий должен находиться в корневом директории вашего веб сервера, так что если корневым директорием является /var/www (стандартное место в Ubuntu), вы можете просто запустить следующую команду:

# mkdir -p /var/www/ubuntu/dapper

Затем скопируйте в этот директорий пакеты .deb, которые вы хотите хранить в репозитарии. Теперь у вас должен быть доступ к пакетам, для чего в веб-браузере нужно указать адрес http://localhost/ubuntu/dapper/<ваш_пакет>.deb.

Наконец, откройте shell оболочку и перейдите в директорий ubuntu для того, чтобы выполнить команду apt-ftparchive, а затем сжать получившейся в результате файл Packages:

# cd /var/www/ubuntu
# apt-ftparchive packages dapper > dapper/Packages
# gzip dapper/Packages

Аргумент packages говорит apt-ftparchive обрабатывать пакеты, которые он найдет; аргумент dapper указывает путь, где надо искать пакеты, в нашем случае это поддиректорий dapper, а > dapper/Packages перенаправляет вывод в файл с именем Packages, которые затем сжимается с тем, чтобы он загружался быстрее. Все просто!

Теперь у вас есть репозитарий, к которому вы можете получить доступ с других компьютеров с тем, чтобы установить пакеты, которые вы только что опубликовали, но сначала вы должны сообщить, как найти репозитарий, добавив для этого запись в файлы /etc/apt/sources.list на каждом компьютере. Запись должна выглядеть примерно так:

deb http://www.example.com/ubuntu dapper/

где www.example.com нужно заменить фактическим адресом сервера пакетов.

Затем запустите apt-get update и вы должны увидеть ваш репозитарий, который будет проиндексирован вместе с обычными репозитариями Ubuntu, после чего вы можете выполнить команду apt-cache search для поиска ваших пакетов и должны получить сообщение, что они имеются в наличии. Вы можете установить любой из пакетов, который вы опубликовали, при помощи команды apt-get install packagename.

Обновляем репозитарий

Создан новый или обновленный пакет? Нет проблем. Просто скопируйте его в репозитарий рядом с другими пакетами и для перезапуска apt-ftparchive и генерации нового файла Packages выполните действия, которые были описанны ранее. Поскольку обновленные пакеты имеют другие имена, вам перед перезапуском apt-ftparchive необходимо вручную удалить заменяемые пакеты; в противном случае ваш репозитарий будет увеличиваться.

Управляем репозитарием без использования shell оболочки

Хотя проще всего создать ваш репозитарий непосредственно на веб-сервере, это, в сущности, не обязательно. Если у вас есть доступ к веб-хранилищу по FTP, но нет доступа к shell оболочке сервера, вы можете, следуя инструкциям, изложенном в настоящем совете, создать репозитарий на вашем локальном компьютере, а затем просто использовать FTP для загрузки всех директориев и файлов на соответствующие места на сервере. Затем, когда вы обновляете в репозитарии какой-либо из пакетов, просто локально перезапустите apt-ftparchive, а затем по FTP заново скопируйте обновленную копию веб-сервера.


Назад Оглавление Вперед