The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Основы pkgsrc (netbsd packet package pkgsrc)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: netbsd, packet, package, pkgsrc,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-13 15:26:08 Subject: Основы pkgsrc
Original

Введение

Существует много программного обеспечения, доступного для Unix-систем, в число которых входит и NetBSD. NetBSD Packages Collection (pkgsrc) представляет из себя набор средств, включающий в себя необходимые патчи, позволяющий устанавливать, обновлять и удалять программное обеспечение посредством одной команды.

После сборки программного обеспечения, управление им осуществляется с помощью команд pkg_*, что очень упрощает жизнь и работу. Pkgsrc происходит из системы портов FreeBSD и первоначально поддерживал только NetBSD, но в настоящий момент поддерживаются следущие системы:

Терминология

Package - Набор файлов и инструкций для сборки, используя pkgsrc. Пакеты традиционно хранятся в каталоге /usr/pkgsrc.

NetBSD package system - Это прежнее название "pkgsrc". Является частью операционной системы NetBSD, но может работать и на не-NetBSD системах. Эта система обслуживает компиляцию, установку и удаление пакетов.

Distfile - Этот термин описывает файл или файлы, которые предоставляются автором программного обеспечения. Все изменения, которые необходимо сделать для установки на NetBSD, описываются в соответствующем пакете. Обычно distfile находится в виде архива tar, хотя возможны и другие типы. Distfiles обычно хранятся в каталоге /usr/pkgsrc/distfiles.

Port - Это термин, используемый пользователями FreeBSD и OpenBSD для обозначения пакета. В терминологии NetBSD, "port" означает другую архитектуру.

Precompiled/binary package - обозначает бинарный файл, собранный из pkgsrc и представляющий собой один архив .tgz, который может быть установлен на машину данной архитектуры без компиляции. Пакеты обычно создаются в /usr/pkgsrc/packages, так же их можно скачать с ftp.NetBSD.org.

Иногда этот термин заменяют термином "package", особенно в смысле прекомпиленного пакета.

Program - Устанавливаемая часть программного обеспечения, которая будет собрана из distfile, в соответствии с правилами, определенными в пакете.

Получение pkgsrc

Перед тем, как скачивать pkgsrc, вы должны выбрать между использованием ветви current или stable. Последняя ветвь образуется ответвлением из current и содержит только обновления безопасности, имя ее образуется из года и квартала, например 2006Q1.

Второй вопрос заключается в том, КАК скачивать pkgsrc. Это может быть файл tar, SUP или CVS.

Файл tar

Основным хранилищем файлов pkgsrc является ftp://ftp.NetBSD.org/pub/pkgsrc/. Архив ветви current называется pkgsrc.tar.gz и обновляется каждую ночь. Архив stable, 2006Q1 хранится в каталоге 2006Q1 и также называется pkgsrc.tar.gz.

После того, как вы скачаете файл, выберите каталог, в котором будет развернут архив, обычно в этой роли выступает /usr, после чего командой tar xfz pkgsrc.tar.gz распакуйте архив.

С помощью SUP

В качестве альтернативы, можно получать pkgsrc через Software Update Protocol, SUP. Для этого, вам необходимо добавить в supfile строку release=pkgsrc (пример файла конфигурации называется /usr/share/examples/supfiles) и создать каталог /usr/pkgsrc. Затем, выполните команду sup -v /path/to/your/supfile.

С помощью CVS

Для того, чтобы получать pkgsrc через CVS, убедитесь, что у вас установлен cvs(1). Для инициализации загрузки pkgsrc необходимо выставить несколько переменных окружения. Для C-Shell введите: Или для bourne shell: Затем, перейдите в каталог, где вы хотите развернуть pkgsrc. В большинстве случаев это /usr. Для получения pkgsrc выполните команды cvs -q checkout -P pkgsrc для получения ветви current и cvs -q checkout -rpkgsrc-2006Q1 -P pkgsrc для получения ветви stable.

Обновление pkgsrc

При обновлении pkgsrc через tar не забудьте полностью удалить старый каталог! После этого, скачайте новый архив и распакуйте его.

При обновлении через CVS, убедитесь, что выставлена переменная CVS_RSH, после чего перейдите в каталог, где развернута psgsrc и выполните команду cvs -q update -dP.

Переход между различными ветвями pkgsrc

Когда вы обновляете pkgsrc, CVS отслеживает, какую ветвь вы выбрали. Если вы хотите перключится со stable на current, то должны указать опцию "-A" после ключевого слова "update". Для переключения из current на stable добавьте опцию "-rpkgsrc-2006Q1".

Использование pkgsrc

Обычно, есть два пути использования pkgsrc. Певый заключается в том, чтобы использовать уже прекомпилированные пакеты. Это "pkg" часть в слове pkgsrc. Второй путь - установка из "src".

Использование бинарных пакетов

При использовании бинарных пакетов вам необходим инструментарий, которым вы будете этими пакетами управлять. В NetBSD все необходимое уже установлено, для остальных же необходимо скачать прекомпилированные версии утилит. Например, для Solaris 9 инструментарий находится по адресу ftp://ftp0.mh.bbc.co.uk/pub/pkgsrc/packages/bootstrap-pkgsrc/, а для Solaris 10 по адресу http://public.enst.fr/pkgsrc/packages/bootstrap-pkgsrc/. Инструментарий устанавливается в каталог /usr/pkg и использует каталог /var/db/pkg для хранения базы данных установленных пакетов.

Поиск бинарных пакетов

Для того, чтобы установить пакет, его необходимо найти. Пакеты распространяются через CD-ROM, DVD или через FTP/HTTP. Для NetBSD пакеты можно найти на ftp.NetBSD.org, в каталоге /pub/NetBSD/packages/OSVERSION/ARCH/, где OSVERSION можно узнать командой uname -r, а ARCH командой uname -p. Для Solaris 9 пакеты находятся по адресу ftp://ftp0.mh.bbc.co.uk/pub/pkgsrc/packages/, а для Solaris 10 по адресу http://public.enst.fr/pkgsrc/packages/.

Установка бинарных пакетов

Если вы устанавливаете пакеты с CD-ROM или с локального диска, то достаочно воспользоваться командой (получив предварительно полномочия пользователя root с помощью su): Если вы решили установить пакет напрямую с FTP, то выполните команду: Обратите внимание на то, что зависимости, которые необходимы для устанавливаемого пакета, так же должны находится в этом каталоге.

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

Дополнительно к каталогу All, существует каталог vulnerable, в котором хрянятся пакеты с обнаруженными уязвимостями. Для использования этих пакетов необходимо добавить каталог vulnerable к переменной PKG_PATH. Советую вам не забывать время от времени выполнять security/audit-packages, особенно после установки новых пакетов, и проверить, приемлема ли уязвимость для вашей конфигурации.

Предупреждение

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

Сборка пакетов из исходных текстов

Приведенные ниже инструкции описывают процесс сборки пакета, если он есть в pkgsrc. В противном случае обратитесь к Part II, "The pkgsrc developer's guide".

Требования

Если вы хотите собирать пакеты в системе NetBSD то должны быть установлены наборы "comp" и "text". Если необходимо собирать X11 пакеты, так же должны быть установлены наборы "xbase" и "xcomp".

Получение distfiles

Первым шагом сборки является скачивание distfiles (немодифицированного исходника).

Вы можете определить сайты, с которых вам удобнее всего их скачивать, для этого необходимо определить в файле pkgsrc/mk/defaults/mk.conf параметры MASTER_SORT, MASTER_SORT_REGEX и INET_COUNTRY. Это позволит сберечь ваше время и полосу пропускания.

Вы можете изменить параметры настройки задав переменные окружения оболочки, или редактируя файл /etc/mk.conf.

Если у вас нет постоянного соединения с Интернет, то вы можете получить список требуемых distfiles командой make fetch-list, после чего, в соответствии с этими данными, загрузите их в /usr/pkgsrc/distfiles.

Сбока и установка

Теперь, когда distfile скачан, необходимо получить привилегии root, перейти в каталог пакета и вылолнить команду make. Обратите внимание на то, что при использовании pkgsrc на не-NetBSD системе, используйте установленный из pkgsrc bmake вместо "make". После того, как оболочка закончит выводить различные строки о процессе сборки, выполните: для установки компонентов пакета в предназначенные для них места. Pkgsrc поддерживает just-in-time-su, что позволяет воспользоваться привилегиями root только на конечном этапе установки.

По умолчанию, все пакеты устанавливаются в каталог /usr/pkg, для того, чтобы изменить этот каталог, необходимо выставить переменную окружения LOCALBASE. Например, чтобы использовать каталог /usr/local, установите LOCALBASE =/usr/local. Обратите внимание, что не стоит указывать здесь каталоги общего назначения, например /usr. Кроме того, вы не должны добавлять файлы или каталоги (типа src/, obj/ или pkgsrc/) ниже дерева LOCALBASE. Это должно предотвратить возможные конфликты между программами, установленными с помощью pkgsrc.

Некоторые пакеты просматривают файл /etc/mk.conf, что позволяеть изменить опции сборки. Взгляните на pkgsrc/mk/defaults/mk.conf, чтобы получить краткий обзор того, какие опции будут установлены по умолчанию. Переменные среды, типа LOCALBASE могут быть установлены в /etc/mk.conf, что позволит не забыть их, когда вы захотите использовать pkgsrc.

Есть несколько параметров, которые, возможно, захотят использовать те, кому интересно поняблюдать за происходящим во время сборки.
  1. Если, при использовании команды make(1) указать параметр PKG_DEBUG_LEVEL=2, то будет выведена масса отладочной информации. Например:
      
      make patch PKG_DEBUG_LEVEL=2
      
      
    покажет все команды, вызываемые на этапе "patch".
  2. Если вы хотите посмотреть значения переменных, то можно воспользоваться определением VARNAME:
      
      % make show-var VARNAME=LOCALBASE
      /usr/pkg
      %
      
      
Если вы хотите установить бинарный пакет, который создали самостоятельно, и помещаете его в pkgsrc/packages, или он находится на удаленном FTP-сервере, вы можете утсановку "bin-install". Это позволит установить пакет с помощью pkg_add(1), если это возможно, или, в противном случае, с помощью make package. Список удаленных FTP-серверов задается переменной BINPKG_SITES. Все флаги, которые вы хотите указать pkg_add(1) можно добавить в переменную BIN_INSTALL_FLAGS. Для получения дополнительной информации, смотрите pkgsrc/mk/defaults/mk.conf.

Выбор компилятора

По умолчанию, в качестве компилятора используется GCC. Изменить такой порядок вещей можно с помощью /etc/mk.conf:

PKGSRC_COMPILER:

GCC_REQD:

Эта переменная определяет минимальную версию GCC,которую можно использовать для сборки пакетов. Если текущая версия GCC не соответствует этому значению, то будет собран и установлен пакет GCC более новой версии.

Конфигурирование pkgsrc

Общая конфигурация

В этом разделе вы можете найти некоторые переменные, которые применяются ко всем пакетам в pkgsrc. Основной метод задания значений этих переменных - устанавка их в /etc/mk.conf.

Переменные, влияющие на процесс сборки

Дополнительные флаги компилятора (CFLAGS)

Если вы хотите добавить дополнительные флаги CFLAGS, используйте оператор += вместо =: Использование CFLAGS= может привести к проблемам с пакетами, требующими других внешних флагов.

Установки для разработчиков/расширенные установки

Выбор опций сборки

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

Просмотреть опции, поддерживаемые пакетом, можно воспользовавшись командой make show-options: В /etc/mk.conf можно определить следущие переменные: Например: Подводя итоги, можно сказать, что:
  1. Опции по умолчанию определяются мантейнером пакета
  2. Опции можно выставить через настройку соответствующих переменных (см. ниже)
  3. PKG_DEFAULT_OPTIONS
  4. PKG_OPTIONS.pkgbase
Если выбраны взаимоисключающие опции, то используется последняя выбранная опция, все другие автоматически блокируются. Если выбранная опция явно заблокирована, используется предыдущая, если таковая вообще имеется. Если ни одной опции, из группы требуемых, не выбрано, то сборка пакета потерпит неудачу.

Сборка бинарных пакетов

Сборка одиночного бинарного пакета

Как только вы скомпилировали и установили пакет, вы можете создать бинарный пакет, который может быть установлен на другой системе с помощью pkg_add (1). Это позволяет не собирать пакет на каждой из систем, экономя тем самым время и мощности CPU. Также, это простой путь распространения вашего пакета среди мировой общественности.

Для сборки бинарного пакета перейдите в соответствующий каталог и выполните команду make package: Эта команда соберет пакет, установит его (если это еще не сделано) и затем создаст бинарный пакет. В дальнейшем, для манипуляции им, вы можете использовать инструментарий pkg_*. По умолчанию пакет создается в каталоге /usr/pkgsrc/packages, тип файла - tar.gz. Смотрите раздел "Packaging figlet", для более подробного ознакомления с приимером пакета misc/figlet.

Сборка большого количества пакетов

Если вы хотите скомпилировать все доступные пакеты, то ознакомьтесь с инструкциями, приведенными ниже. Будьте осторожны, так как такая сборка удалит все пакеты, установленные в системе в настоящее время.

Если вы сконфигурируете сервер FTP или NFS, то вы упростите процесс установки уже откомпилированных бинарных пакетов на другие машины.

Конфигурация

build.conf - основной файл конфигурации для большой части собираемых пакетов. Вы можете сконфигурировать, как ваша копия pkgsrc будет обновляться, какие distfiles будут загружаться, какие пакеты будут скомпилированы и какие отчеты при этом будут выданы. Примерный файл конфигурации вы можете найти в pkgsrc/mk/bulk/build.conf-example, его можно использовать при составлении собственного build.conf.

/etc/mk.conf - также подходящее место для указания параметров сборки. Обратитесь к pkgsrc/mk/defaults/mk.conf для того, чтобы узнать значения по умолчанию. Возможно, вы захотите указать параметр ACCEPTABLE_LICENSES, в данном примере установлен параметр _ACCEPTABLE=yes, что позволяет принимать все типы лицензий. Некоторые опции, которые являются особенно полезными для массовой сборки пакетов, могут быть найдены в файле mk/bulk/bsd.bulk-pkg.mk. Кратко опишем самые важные из них:



Некоторые функции рассеяны по структуре pkgsrc:



pre-build.local - сборку можно сконфигурировать таким образом, что в конце фазы pre-build будет выполнена какая-либо специфическая задача. Если файл pre-build.local находится в /usr/pkgsrc/mk/bulk то он выполнится (как сценарий sh(1)) в конце фазы pre-build. Например, pre-build.local может содержать строку: Что воспрепятствует системе начать собирать специфический пакет, который требует почти 3 Гбайт дискового пространства.

Разное

Поскольку /usr/pkg в своем подавляющем большинстве будет удален, убедитесь, что оболочка, под которой вы входите в систему, размещена где-то в другом месте. Просто поместите его в каталог /usr/local/bin и откорректируйте файл паролей соответствующим образом. Таким образом, вы можете войти в систему после перезагрузки (помните, что ваш текущий процесс не умрет, если пакет удален, просто нельзя будет запустить новых копий процесса). Кроме того, если вы используете NetBSD версий меньших чем 1.5, или вы все еще хотите использовать pkgsrc версию ssh по некоторым причинам, убедитесь, что установили ssh перед стартом его из rc.local: Если вы не сделаете этого, то не сможете войти в систему после завершения сборки пакетов, после перезагрузки или сбоя. Вы были предупреждены!:)

Сам процесс

Удостоверьтесь, что вы не нуждаетесь ни в одном из установленных пакетов. Убедитесь, что удалили все, что может воспрепятствовать сборке, например, библиотеки, установленные в /usr/local, затем получите привилегии пользователя root и выполните: Если по каким-либо причинам сборка прервалась (пропало питание, системная ошибка и т.д), то вы можете продолжить сборку командой: После завершения сборки вы получите уведомление по e-mail, при этом логи будут храниться в каталоге, указанном в build.conf.

Как это работает?

Сборка состоит из трех шагов:
  1. pre-build

    Сценарий обновляет ваше pkgsrc дерево через cvs, затем удаляет все некорректные distfiles и все установленные пакеты.
  2. bulk build

    Это, в основном, "make bulk-package". При этом, в первую очередь собираются пакеты, не требущие зависимостей.
  3. post-build

    Генерирует отчет, назыаемый broken.html и помещает его в каталог, определенный в файле build.conf, короткая версия этого сообщения будет отправлена по почте администратору.
В течении процесса сборки, список пакетов, которые выдали ошибку при сборке, ведется в файле /usr/pkgsrc/.broken (или .../.broken.${MACHINE} если переменная OBJMACHINE установлена). Индивидуальный лог каждого неисправного пакета хранится в каталоге этого пакета. Эти логи могут быть использованы для исправления пакета и его последующей сборки.

Требования к дисковому пространству

Примерные требования для NetBSD 2.0/i386: Обратите внимание на то, что весь pkgs будет деинсталлирован, как только будет собран бинарный пакет, исходные тексты также будут удалены, таким образом нет чрезмерных требований к дисковому пространству. Впоследствии, если пакет будет необходим снова, то его можно добавить через pkg_add(1) вместо того, чтобы собирать его снова.

Делаем песочницу для сборки в chroot

Если вы не хотите лишиться всех установленных пакетов, то есть возможность выполнять сборку в chroot среде.

Первый шаг заключается в установке chroot песочници, например /usr/sandbox. Это может быть сделано при использовании null mounts, или вручную.

Есть сценарий, называемый pkgsrc/mk/bulk/mksandbox, который создаст песочницу, используя null mounts.

Это также создаст сценарий sandbox в корневом каталоге песочницы, который позволит активировать null mount используя команду mount песочницы и дезактивировать командой umount.

Если поднимать песочницу вручную, то необходимо выполнить следущие действия:
  1. Ядро
      
      # cp /netbsd /usr/sandbox
      
      
  2. /dev/*
      
      # cd /usr/sandbox/dev ; sh MAKEDEV all
      
      
  3. /etc/resolv.conf (для security/smtpd и почты):
      
      # cp /etc/resolv.conf /usr/sandbox/etc
      
      
  4. Рабочий(!) файл конфигурации почтовой сисмтемы (hostname, sendmail.cf):
      
      # cp /etc/mail/sendmail.cf /usr/sandbox/etc/mail
      
      
  5. /etc/localtime (для security/smtpd):
      
      # ln -sf /usr/share/zoneinfo/UTC /usr/sandbox/etc/localtime
      
      
  6. /usr/src (исходные тексты, необходимы таким пакетам, как sysutils/aperture):
      
      # ln -s ../disk1/cvs .
      # ln -s cvs/src-2.0 src
      
      
  7. Создаем /var/db/pkg:
      
      # mkdir /usr/sandbox/var/db/pkg
      
      
  8. Создаем /usr/pkg:
      
      # mkdir /usr/sandbox/usr/pkg
      
      
  9. Обновляем pkgsrc через cvs в каталог /usr/sandbox/usr/pkgsrc:
      
      # cd /usr/sandbox/usr
      # cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -d -P pkgsrc
      
      
    Не монтируйте ссылку на эту копию pkgsrc из основной системы, это приведет к появлению проблем.
  10. Создайте указатели на /usr/sandbox/usr/pkgsrc/packages и .../distfiles. В этом случае NFS- и/или nullfs-mounts могут пригодиться.
  11. Отредактируйте /etc/mk.conf, смотрите Раздел 6.3.1.2, "/etc/mk.conf".
  12. Скорректируйте mk/bulk/build.conf под свои нужды.
Когда chroot установлена, вы можете запустить сборку скледующими командами: В конце сборки вы получите сообщение, а бинарные файлы будут находиться в каталоге /usr/sandbox/usr/pkgsrc/packages.

Сборка выборочного набора пакетов

В дополнение к тотальной сборке всего чего можно и нельзя, сценарий pkgsrc/mk/bulk/build может использоваться для сборки подмножества пакетов, содержавшихся в pkgsrc. Установкой в файле /etc/mk.conf семейства переменных SPECIFIC_PKGS мы определим набор пакетов, которые должны быть собраны. Также будут собраны зависимости этих пакетов.

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

Создание CD-ROM с пакетами

После того, как сборка пакетов завершится, вы можете захотеть создать CD-ROM с бинарными пакетами, для того, чтобы облегчить процесс установки их на другую машину. Пакет pkgtools/cdpack обеспечивает простой инструмент создания образов ISO 9660. cdpack позволяет также добавить на диск все зависимости помещаемых на него пакетов.

Пример с cdpack

Полное руководство по cdpack можно прочитать, обратившись к man cdpack(1). Следующий короткий пример предполагает, что бинарные пакеты находятся в каталоге /usr/pkgsrc/packages/all и что в /u2 достаточно места для создания образа ISO 9660. Если вы хотите включить другие файлы (COPYRIGHT, README, etc.) на каждый CD, то необходимо создать каталог, содержащий эти файлы. Теперь создаем образ: Каждый образ будет теперь содержать README, COPYING, and bin/myscript в корневом каталоге.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру