Глава 30. Коллекция пакетов

Русский перевод: Вадим Лопатюк

Содержание

30.1. Установка коллекции пакетов
30.2. Обновление коллекции пакетов
30.3. Пример: установка программы из исходных текстов
30.3.1. Скачивание исходных текстов
30.3.2. Компиляция и установка
30.4. Пример: установка бинарного (скомпилированного) пакета
30.5. Команды управления пакетами
30.6. Быстрый старт, руководство по созданию пакетов.
30.6.1. Программное обеспечение
30.6.2. Начало
30.6.3. Последние приготовления
30.6.4. Проверка с помощью pkglint
30.6.5. Запуск и проверка сборки/установки
30.6.6. Отправка пакета с использованием send-pr
30.6.7. Финальные примечания

Эта глава содержит общую документацию. Пожалуйста обращайтесь к руководству pkgsrc (pkgsrc/doc/guide), которое содержит наиболее свежую информацию системе пакетов NetBSD, до тех пор пока проблема не будет решена!

Коллекция пакетов NetBSD это коллекция инструментов для облегчения компиляции и установки огромного количества бесплатного программного обеспечения для Unix систем. Для установки безупречно сконфигурированного и работающего пакета понадобится только одна из двух команд.

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

  • скомпилировать пакет из исходных текстов на вашей системе. Это наиболее полное использование коллекции пакетов, которая может автоматически скачать исходные тексты из Интернет, скомпилировать их, установить и сконфигурировать программу и документацию всего двумя командами. Коллекция пакетов содержит набор файлов Makefile и конфигурационных файлов которые используют стандартные инструменты Unix, устанавливаемые с базовой системой. Еще одно приятное свойство системы пакетов заключается в том, что она может автоматически проверить требуемые зависимости и также скачать и установить необходимые пакеты. Коллекция пакетов не устанавливается автоматически с базовой системой потому, что очень часто обновляется: в следующих разделах будет объяснено, как скачать и установить ее на Вашу систему. Сайт NetBSD содержит очень подробное техническое описание системы пакетов.
  • установить скомпилированную и сконфигурированную версию программы. Это производится с помощью набора утилит pkgtools, которые устанавливаются с базовой системой. Этот метод быстрее, но менее гибок чем предыдущий (например, Вы не можете изменить опции этапа компиляции.) pkgtools также используются для управления установленными (обоих типов установки, как из исходных текстов, так и скомпилированных) пакетами, которые записаны в базу данных: Вы можете, например, просмотреть установленные пакеты, удалить пакет, и т.п.

    Если Вам нужно всего лишь установить скомпилированную программу, Вам не нужно скачивать коллекцию пакетов.

Оба вышеописанных метода требуют кое что еще для «создания пакета», например, то, что программа должна быть перенесена (портирована) и сконфигурирована для NetBSD. Хотя коллекция пакетов содержит более 5000 программ, существует вероятность что необходимая Вам программа до сих пор не включена. В таком случае Вы можете скомпилировать ее без использования системы пакетов и когда Вы получите работающий экземпляр — создайте пакет, который можно добавить в коллекцию, тогда другие пользователи извлекут пользу из Вашей работы.

30.1. Установка коллекции пакетов

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

  1. Скачайте последнюю версию исходных текстов системы пакетов, которая включает все необходимые файлы Makefile и конфигурационные файлы, из ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-current/tar_files/. Файл, который необходимо скачать называется pkgsrc.tar.gz.
  2. Удалите существующую коллекцию с Вашего жесткого диска (если она у вас установлена) следующими командами:
    # cd /usr
    # rm -rf pkgsrc
  3. Установите коллекцию, которую Вы скачали:
    # tar -xzvpf pkgsrc.tar.gz -C /usr

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

    Замечание

    предыдущие команды установили конфигурационные файлы, необходимые для автоматической установки программ, но у Вас еще не установлены сами программы! В основном система получила список доступных пакетов и инструкции по их доставке, компиляции и установке.

Когда Вы установите коллекцию пакетов, Вы можете просмотреть ее с помощью Lynx или Netscape и прочитать детали и описания по всем доступным пакетам и их категориям. Например:

$ cd /usr/pkgsrc
$ lynx README.html

Не потеряйте файлы дистрибутива

Когда Вы удалите существующую коллекцию пакетов для установки более новой версии, не забудьте сделать резервную копию каталога /usr/pkgsrc/distfiles перед удалением. Этот каталог используется для хранения скачанных архивов исходых текстов и если вы удалите этот каталог, то ваша система будет скачивать эти архивы еще раз, когда ей они понадобятся. Если вы не хотите рисковать, то можете указать системе использовать другой каталог для файлов дистрибутивов, который не является подкаталогом /usr/pkgsrc. Например, создайте новую директорию:

# mkdir /usr/pkgsrc_distfiles

Добавьте следующую строку в/etc/mk.conf:

DISTDIR=/usr/pkgsrc_distfiles

Конечно, Вы можете использовать каталог по Вашему выбору вместо /usr/pkgsrc_distfiles.

Вы можете настраивать множество аспектов системы пакетов с помощью /etc/mk.conf. Вы можете найти детальное описание переменных, которые, возможно, Вы захотите использовать, в файле /usr/pkgsrc/mk/bsd.pkg.defaults.mk и на странице руководства mk.conf(5).

30.2. Обновление коллекции пакетов

Коллекция пакетов часто обновляется: Вы можете найти новую версию на ftp сайте почти каждую неделю. Для обновления коллекции на Вашей системе следуйте тем же инструкциям как при первой установке.

Иногда, при обновлении коллекции пакетов, бывает необходимо обновить также утилиты «pkgtools». Вы можете легко определить, когда Вам необходимо это сделать: когда вы пытаетесь установить программу — система пакетов жалуется, что ваши pkgtools устарели.

# make
===> Validating dependencies for gqmpeg-0.6.3
Your package tools need to be updated to 2000/02/02 versions.
The installed package tools were last updated on 1999/01/01.
Please make and install the pkgsrc/pkgtools/pkg_install package.
*** Error code 1

Самый простой способ обновления:

# cd /usr/pkgsrc/pkgtools/pkg_install
# make install

После этого вы можете продолжить установку пакета, выдавшего это сообщение об ошибке.

Замечание

Вы можете определить необходимую версию проанализировав pkgsrc/mk/bsd.pkg.mk файл: ищите строку с:

PKGTOOLS_REQD = 20000202

(дата 20000202 это лишь пример.) Это означает, что версия программы, которая Вам необходима в pkg_install-20000202.tar.gz файле, ее Вы можете найти на ftp сайте NetBSD в packages/distfiles/LOCAL_PORTS. pkg_install может быть установлен как любой другой пакет.

30.3. Пример: установка программы из исходных текстов

Эта секция описывает установку на примере программы: cdrecord. Первое, cd в /usr/pkgsrc/sysutils/cdrecord директорию.

30.3.1. Скачивание исходных текстов

Если у Вас есть подключение к Интернет, Makefile должен автоматически определить необходимые источники и Вам нет необходимости читать данный раздел.

Скачивание с другой машины

Очень распространенная ситуация — когда Вы скачиваете исходные тексты пакетов на одной машине с быстрым подключением к Интернет (например на работе) и затем устанавливаете на Вашу NetBSD систему (например дома.)
В противном случае Вы должны беспокоится о получении файлов архива лично. Тогда Вам необходимо знать названия файла(ов) архива(ов); посмотрите в Makefile в строке

DISTNAME = cdrtools-2.0

Полное название пакета получается: cdrtools-2.0.tar.gz.

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

# cd /usr/pkgsrc/sysutils/cdrecord
# make fetch-list

Которые также выведут список сайтов с которых можно скачать пакет.

30.3.2. Компиляция и установка

Для компиляции пакета наберите:

# cd /usr/pkgsrc/sysutils/cdrecord
# make

Предыдущая комманда выбирает исходный архив (если его уже нет в директории файлов дистрибутивов), распаковывает исходные тексты, добавляет исправления, необходимые для установки программы на NetBSD, и затем собирает пакет.

Для его установки

# make install

Установка программы делает запись в Вашей системе, Вы можете проверить это при помощи команды pkg_info -a.

Тогда cdrecord пакет готов к использованию, Вы можете удалить промежуточные файлы созданные компилятором:

# make clean
# make clean-depends

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

# make clean CLEANDEPENDS=1

30.4. Пример: установка бинарного (скомпилированного) пакета

Я уже объяснил в первой части этой главы, что система пакетов может устанавливать пакеты из исходных текстов, но также возможно устанавливать бинарные пакеты, подготовленные кем-то еще для NetBSD. Этот, второй способ установки, быстрее, поскольку нет необходимости компилировать пакет и файлы архива для бинарных пакетов обычно меньше и более быстро отбираются. Для установки бинарного пакета коллекция пакетов не нужна, необходимы только утилиты «pkgtools».

Файлы архивов для бинарных программ обычно имеют расширение .tgz в то время как архивы исходных текстов заканчиваются на .tar.gz.

Замечание

не все архивы исходных текстов заканчиваются на .tar.gz. Система пакетов может манипулировать другими типами пакетов, например: .zip, .bz2, etc.
Нет жесткой необходимости скачивать бинарные пакеты перед установкой. Вместо этого Вы можете использовать ftp://-URLs. Например:

ftp://ftp.NetBSD.org/pub/NetBSD/packages/1.4.2/i386/All/tcsh-6.09.00.tgz

Если Вы не знаете какая версия пакета доступна на FTP сайте в данный момент вы можете пропустить в команде ввод версии и pkg_add использует последнюю версию с сервера FTP. Например:

# pkg_add ftp://ftp.NetBSD.org/pub/NetBSD/packages/1.4.2/i386/All/tcsh

Также можно установить в PKG_PATH список путей и URL, разделенный ; и затем пропускать эту часть в pkg_add:

# PKG_PATH="/cdrom;/usr/pkgsrc/packages/All;ftp://ftp.NetBSD.org/pub/NetBSD/packages/1.4.2/i386/All"
export PKG_PATH
# pkg_add tcsh

Предыдущая команда установит первый tcsh бинарный пакет, который она найдет.

Как пример, давайте установим программу texinfo в скомпилированном виде.

  1. Скопируем gtexinfo-3.12.tgz во временную директорию.
  2. Выполним следующие команды
    # pkg_add -v gtexinfo-3.12.tgz
  3. Проверим, что пакет был установлен командой
    # pkg_info
  4. Удалим файл gtexinfo-3.12.tgz из временной директории.

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

Перед установкой скомпилированного пакета при помощи pkg_add, рекомендуется проверить его командой pkg_info. Например:

# pkg_info -f jpeg-6b.tgz

Это проверка первой CWD команды, для проверки месторасположения установки пакета (базовый каталог.) Наиболее употребляемые каталоги это /usr/pkg и /usr/X11R6. Если базовый каталог не тот, который Вам нужен, Вы можете изменить его опцией -p команды pkg_add. Например, jpeg-6b.tgz пакет устанавливается в /usr/pkg по умолчанию, но Вы можете установить его в /usr/X11R6 если вы распакуете его следующей командой:

# pkg_add -p /usr/X11R6 -v jpeg-6b.tgz

30.5. Команды управления пакетами

Самыми важными командами для управления пакетами являются:

pkg_add
добавляет скомпилированный пакет.

pkg_delete
удаляет установленный пакет. Название пакета может быть как с, так и без указания версии; если версия не указана — pkg_delete должна определить, какая установлена версия. Можно использовать маски (но они должны быть экранированы от оболочки); например:

# pkg_delete "*emacs*"

Очень мощная опция -r : она удаляет все пакеты, которые требуются для пакета, указанного в запросе, а потом удаляет сам пакет. Например:

# pkg_delete -r jpeg

удалит jpeg и все пакеты, используемые им; это позволит обновить пакет jpeg.

pkg_info
показывает информацию о пакете, установлен или не установлен.

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

pkg_admin
создает переменные административные функции в системе пакетов.

30.6. Быстрый старт, руководство по созданию пакетов.

Jason R Fink

разработчик этого раздела (Быстрый старт, руководство по созданию пакетов)

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

30.6.1. Программное обеспечение

Это три основных программы для быстрого создания маленьких пакетов для NetBSD:

url2pkg
шаблонные пакеты
pkglint

30.6.1.1. url2pkg

Приложение url2pkg можно установить из дерева pkgsrc. Этот инструмент помогает создателю пакета быстро заполнить и протестировать основные аспекты создания пакета.

30.6.1.2. Шаблонные пакеты

Шаблонные пакеты, например, bison, позволяют добавлять pkgsrc документацию.

30.6.1.3. pkglint

Приложение pkglint можно установить из дерева pkgsrc. Этот инструмент досконально проверяет правильность пакета.

30.6.2. Начало

Начать процесс довольно просто. Главное для создателя (т.е. Вас) иметь протестированную сборку пакета из исходных текстов, собранную под системой NetBSD. В противном случае, настройка для сборки нового пакета может быть проблематичной. Она должна быть прокомментирована как можно подробнее, патч может быть написан для исходных текстов и включен в пакет для исправления любых проблем сборки. Этот момент выходит за рамки данного руководства (см. pkgsrc документацию для получения более подробной информации).

30.6.2.1. Использование url2pkg

Следующий шаг — использование url2pkg.

Следуйте указаниям по использованию url2pkg для создания инициализационных файлов, необходимых для нового пакета:

  1. Создайте каталог под новый пакет в каталоге, определенном для pkgsrc. Ничего в него не помещайте.
  2. cd в новый каталог.
  3. введите
    $ url2pkg
  4. Вам сообщат, что нужно ввести адрес этой точки, введите его и нажмите <Ввод>.
  5. Начните сессию vi

    Замечание

    здесь используется стандартное расположение vi в NetBSD, по умолчанию это nvi. Если Вы обычно используете другой клон vi, такой как vim, Вы можете получить ошибку .exrc.
    Сессия vi открывается для файла Makefile нового пакета. Вы должны ввести название пакета, адрес электронной почты создателя пакета и категорию, в которой должен располагаться пакет.

  6. Сохраните файл и выйдите.
  7. url2pkg автоматически расположит пакет в рабочем подкаталоге.
  8. Далее, url2pkg сгенерирует md5 файлы.

В конце сессии url2pkg, пожалуйста заметьте, что url2pkg не заполняет ни один другой файл кроме Makefile. Он, также, сгенерирует пустой PLIST файл.

30.6.3. Последние приготовления

Теперь, когда Makefile сгенерирован, нужно создать оставшиеся файлы. Используя Ваш шаблонный пакет, скопируйте следующие файлы из шаблонного пакета в подкаталог pkg:

DESCR
Многострочное описание части программного обеспечения. Он также должен включать список всех разработчиков.

COMMENTS
Однострочное описание части программного обеспечения. Здесь не нужно указывать название пакета — оно автоматически добавится инструментарием pkg_*, если его не будет.

PLIST
Этот файл содержит описание размещения файлов, которые будут установлены в систему. Для маленьких пакетов (т.е. один двоичный файл и одна-две страницы помощи), входящих в дистрибутив Makefile, установочный сценарий и т.п. должен наглядно иллюстрировать: куда какие файлы устанавливать.

30.6.4. Проверка с помощью pkglint

Когда все файлы подготовлены, подходит время проверить пакет с помощью pkglint. Зачастую Makefile нуждается в перемещении секций, изменениях или добавлениях, однако, для первого раза полезно просто запустить pkglint — так Вы наверняка узнаете, что Вам необходимо изменить. Далее небольшой пример вывода сессии pkglint, взятый из документации pkgsrc:

$ pkglint
OK: checking pkg/COMMENT.
OK: checking pkg/DESCR.
OK: checking Makefile.
OK: checking files/md5.
OK: checking patches/patch-aa.
looks fine.

Если произошла ошибка, то она, обычно, проста и прямолинейна, например, эту я получил во время сборки пакета:

extract suffix not required

Мне не нужно определять внешний суффикс в Makefile.

30.6.5. Запуск и проверка сборки/установки

Когда достигнут этот пункт, я, обычно, запускаю общую проверку поиска, сборки и установки. Чтобы выполнить это должным образом, мне нужно удалить рабочий подкаталог и файл(ы) дистрибутива из /usr/pkgsrc/distfiles. Только так я могу быть уверен, что я делаю полную и окончательную проверку.

30.6.6. Отправка пакета с использованием send-pr

Сначала сделаем архив дерева пакета, как оно есть (включая pkg/work поддиректорию), например так:

$ tar -czf packagename.tgz package_dir

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

Предпочтительный способ уведомления автогрейдеров пакетов NetBSD — использование утилиты send-pr из категории «pkg». Синтаксис включает название пакета и номер версии, короткое описание пакета и URL .tar файла.

Вы можете использовать любую утилиту: send-pr вашей системы NetBSD или онлайн форму http://www.NetBSD.org/cgi-bin/sendpr.cgi?gndb=netbsd если по каким-либо причинам Вы не можете использовать send-pr локально.

30.6.7. Финальные примечания

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

Более подробное описание Вы можете найти в полной документации pkgsrc .