Применение пакетов


Пакеты — это программы из коллекции «портов», уже скомпилированные для определенной версии FreeBSD. Сначала мы обсудим именно пакеты, поскольку, как правило, работать с ними легче, чем с «портами». После рассмотрения пакетов обратимся к «портам».

Установка программы как пакета может сэкономить много времени, потому что оно не будет тратиться на компиляцию исходного кода. Если на распространение программы в компилированном виде не наложены правовые ограничения, то она доступна как пакет. Другие программы, такие как Adobe Acrobat, доступны только в компилированном виде. Пакеты доступны на компакт-дисках или через FTP и называются так же, как соответствующие им «порты».

Пакеты на компакт-дисках

В комплекте компакт-дисков FreeBSD есть довольно внушительная коллекция скомпилированных пакетов. Для их использования нужно лишь смонтировать CD и прочитать файл пакета. Если у вас имеются образы CD, еще не записанные на физический носитель, можно смонтировать эти образы и устанавливать пакеты из образов. (Порядок работы со съемными носителями и монтирования образов дисков подробно описан в главе 8.)

После монтирования CD загляните в каталог packages. Ниже приведено содержимое каталога с самого свежего установочного компакт-диска FreeBSD:

Листинг кажется знакомым. Да, он такой же, как и листинг каталога /usr/ports. Пакеты — это всего лишь скомпилированные «порты», поэтому они хранятся в тех же каталогах-категориях, что и «порты», из которых они собраны. На одном компакт-диске недостаточно места для хранения всех 17 000 пакетов FreeBSD. Установочные компакт-диски содержат только основные пакеты, востребованные практически в любой системе, такие как X Window System и Perl. Второй образ компакт-диска FreeBSD содержит более полный набор пакетов. Например, ниже приведено содержимое каталога x11 с установочного компакт-диска FreeBSD 6.2.

# ls х11
libdrm-2.0.2.tbz             xorg-documents-6.9.0.tbz      xterm-220.tbz
xorg-6.9.0.tbz               xorg-libraries-6.9.0.tbz
xorg-clients-6.9.0_3.tbz     xorg-manpages-6.9.0.tbz

В дереве «портов» категория x11 содержит 342 «порта». На установочном компакт-диске их всего 7, но это лишь основные компоненты X Window System. Дерево портов содержит, например, инструменты настройки сенсорной панели (touchpad) Synaptics в GNOME, которые важны для тех, у кого имеется сенсорная панель и кто использует GNOME, но не настолько ценны, чтобы занимать место на компакт-диске.

Интересное отличие между деревом «портов» и деревом пакетов заключается в каталоге All (1). Этот каталог содержит все пакеты, присутствующие на компакт-диске. В других каталогах присутствуют лишь ссылки на фактические файлы в каталоге All.

Чтобы узнать назначение пакета, можно выполнить поиск в каталоге /usr/ports, как мы делали это ранее в этой главе, когда искали «порты» по именам. Следует, однако, заметить, что в каталоге packages имеется файл INDEX, содержащий описания пакетов, присутствующих только на этом диске. Вы не можете воспользоваться функцией make search name=, как в случае с «портами», но можете произвести поиск непосредственно по файлу INDEX с применением утилиты grep(1). Пример поиска пакета libdrm:

Для тех, кто мало знаком с утилитой grep(1), поясню, что здесь выполняется поиск строки libdrm в файле INDEX. Символ «крышки» (ˆ) указывает, что последовательность символов libdrm должна находиться в начале строки. Файл INDEX содержит всю информацию, извлекаемую командой make search, но в менее удобочитаемом формате. Символ вертикальной черты (|) служит разделителем полей: четвертое поле (1) содержит описание пакета.

Пакеты на сервере FTP

Зачастую пакет не представлен на CD, потому что пространство в наборе компакт-дисков Проекта FreeBSD ограниченно и не может вместить больше 17 000 пакетов. Кроме того, программное обеспечение на CD собрано для определенного «выпуска» FreeBSD. Если вы установили FreeBSD 7.1, затем обновили ее до версии 7.3 и теперь хотите установить пакеты для версии 7.3, то компакт-диск с пакетами для версии 7.1 не поможет. Кроме того, похожие проблемы будут наблюдаться после обновления до версии -stable или -current (глава 13).

Если пакет отсутствует на компакт-диске, его можно установить только через FTP. Проект FreeBSD предоставляет возможность установить через FTP пакеты практически для всех 17 000 с лишним элементов коллекции «портов». Любое FTP-зеркало FreeBSD содержит пакеты для самых последних выпусков FreeBSD, а на некоторых зеркалах можно найти пакеты для старых (и даже очень старых) выпусков. О выборе наиболее подходящего вам зеркала говорилось в главе 2. Каждое официальное FTP-зеркало FreeBSD хранит пакеты по адресу:

ftp://зеркало.freebsd.org/pub/freebsd/ports/архитектура/packages-версия/

Например, пакеты FreeBSD 6.2 для архитектуры i386 можно найти по адресу ftp://ftp.freebsd.org/pub/freebsd/ports/i386/packages-6.2-release и на любых других серверах в том же самом каталоге. Если заглянуть на FTP-сайт, можно увидеть все категории в каталоге /usr/ports и многие другие. В коллекции «портов» каждый «порт» помещается в какую-нибудь категорию, однако некоторые «порты» запросто могут попасть сразу в несколько категорий. Например, «порты» Perl SNMP можно классифицировать и как средства управления сетью, и как программы Perl, в зависимости от выбранной точки зрения. На серверах FTP достаточно места, чтобы хранить «порты» во всех возможных категориях, что упрощает и ускоряет их поиск. Чем быстрее вы найдете искомый «порт» и покинете зеркало, тем легче жизнь у администраторов зеркала.

Так же, как и на компакт-диске, на каждом FTP-сайте имеется собственный каталог All, где хранятся фактические файлы пакетов. Однако, в отличие от CD, на FTP-сайте можно найти тысячи и тысячи пакетов!

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

Если файл пакета находится на локальном диске, установить его можно с помощью pkg_add(1):

# pkg_add xorg-6.9.0.tbz

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

Если программа pkg_add(1) обнаружит, что пакет имеет зависимости — другие программы, необходимые для корректной работы пакета, — она постарается установить и эти пакеты из того же источника. Набор компакт-дисков FreeBSD собран с учетом этого обстоятельства. Например, пакету xorg, показанному выше, требуется несколько необходимых ему программ, и все они присутствуют на установочных компакт-дисках. Если нужный пакет отсутствует, pkg_add сообщит об этом и прервет установку. В этом случае можно отыскать этот пакет на другом диске и установить его или просто установить недостающий пакет через FTP.

Кроме того, программа pkg_add(1) поддерживает возможность автоматической установки через FTP. Ключ -r предписывает выйти в Интернет и загрузить недостающие пакеты с FTP-сервера FreeBSD.

# pkg_add -r xorg

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

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

В случае больших пакетов я часто использую комбинированный подход. Например, пакет OpenOffice.org имеет размер более 100 Мбайт и требует предварительной установки нескольких небольших пакетов. Я загружаю OOo с сервера FTP и затем пытаюсь установить его. Программа pkg_add(1) прерывает установку из-за отсутствия необходимых программ. Тогда я устанавливаю эти дополнительные пакеты командой pkg_add -r и снова пытаюсь установить OOo из загруженного ранее пакета.

pkg_add(1) настройка окружения

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

Ниже описаны наиболее полезные настройки среды окружения для программы pkg_add(1).

PKG_TMPDIR

Переменная окружения PKG_TMPDIR задает каталог, в который распаковываются временные файлы. Пакет — это архив tarball с файлами программ и дополнительными инструкциями по установке. Чтобы установить пакет, его нужно разархивировать (untar). Если в стандартных каталогах мало места, то разархивирование не будет завершено, и установка прервется. По умолчанию программа pkg_add(1) обращается к каталогу, задаваемому переменной окружения TMPDIR. Если эта переменная не определена, pkg_add ищет свободное место в таком порядке: /tmp, /var/tmp и /usr/tmp. С помощью переменной PKG_TMPDIR можно задать другой каталог, где хватает свободного места:

# setenv PKG_TMPDIR /home/mwlucas/garbage

PACKAGEROOT

По умолчанию pkg_add -r пытается скачивать пакеты с ftp://ftp.freebsd.org. Однако, скорее всего, это далеко не лучший выбор для вас. Основное зеркало FreeBSD часто сильно перегружено и может находиться далеко от вашего компьютера. Нередко можно добиться большей производительности, выбрав более близкое и менее нагруженное зеркало. Переменная окружения PACKAGEROOT предписывает программе pkg_add(1) использовать другой сервер FTP. Присвойте переменной PACKAGEROOT протокол и имя конкретного сервера (без полного пути). Например, для загрузки пакетов с ftp5.us.freebsd.org введите:

# setenv PACKAGEROOT ftp://ftp5.us.freebsd.org

PACKAGESITE

Это полный путь к хранилищу (репозитарию) пакетов. Применяется, если требуется использовать пакеты определенного «выпуска» или в системе есть локальное хранилище пакетов. (Установка локального хранилища пакетов рассматривается ниже в этой же главе.) Присвоим переменной PACKAGESITE значение в виде абсолютного URL, например, для устаревшей и неподдерживаемой версии FreeBSD:

# setenv PACKAGESITE ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ oldreleases/i386/5.4-RELEASE/packages/All

PKGDIR

Этот каталог определяет место для размещения копий пакетов, загруженных командой pkg_add -Kr, и позволяет организовать хранение загруженных пакетов.

# setenv PKGDIR /usr/ports/packages/All

Что устанавливает пакет?

Теперь, когда программа установлена, как найти ее в системе? В конце концов, здесь нет меню Пуск! Беспокоиться не о чем. Для получения полного списка установленных программ обратитесь к /var/db/pkg. Подкаталоги этого каталога соответствуют всем «портам» или пакетам, установленным в системе, и содержат списки всех программных компонентов. К примеру, теперь, после установки пакета xorg 6.9, у нас появился каталог /var/db/pkg/xorg-6.9.0. В нем находятся следующие файлы:

# ls /var/db/pkg/xorg-6.9.0/
+C0MMENT       +C0NTENTS       +DESC       +MTREE_DIRS

Файл +COMMENT содержит краткое описание пакета, а файл +DESC — более подробное описание. Файл +MTREE_DIRS содержит описание пакета в формате mtree(1). Особый интерес представляет файл +CONTENTS, в котором перечислены все файлы, установленные пакетом, все пакеты зависимостей и все инструкции по удалению пакета. (Теперь, когда пакет установлен, инструкции по установке больше не нужны, но инструкции по удалению могут пригодиться, если вы вдруг решите удалить пакет.)

Первая строка — это номер версии формата (1), в котором хранится запись о пакете. Если FreeBSD изменит формат хранения пакетов, инструменты управления пакетами смогут определить по этому номеру, как обслуживать пакет. Далее следует имя пакета (2) и затем определение ORIGIN (3), которое указывает — к какой категории относится пакет и в каком каталоге его можно отыскать. Вслед за меткой cwd (4) указано место, куда нужно установить файлы пакета. Все пути к файлам указываются относительно этого каталога. Комментарий pkgdep (5) указывает дополнительные пакеты, от которых зависит данный пакет. В данном случае — это пакет expat-2. Здесь также указывается каталог (6) в дереве «портов», где этот дополнительный пакет находится.

Однако пакет xorg является чем-то вроде «обманки» — при установке этого пакета не устанавливаются никакие файлы! В операционной системе FreeBSD пакет xorg присутствует только для описания зависимостей, необходимых для X Window System. Единственная запись, которую можно обнаружить в файле +CONTENTS, это ссылка на другие пакеты. Давайте рассмотрим содержимое файла +CONTENTS другого пакета, который действительно включает набор файлов. Вот содержимое пакета /usr/ports/archivers/zip:

Здесь мы снова видим рабочий каталог (1), но за ним следует собственно файл (2). Объединив имя каталога и имя файла, можно определить, что при установке пакета zip был установлен файл /usr/local/man/man1/zip.1.gz. Это страница руководства, с которой стоит ознакомиться. Далее следует комментарий, содержащий контрольную сумму MD5 (3) этого файла и инструкция (4) по удалению файла на случай, если потребуется удалить пакет. Однако этот пакет содержит не только страницу руководства, в состав пакета входит также двоичный файл (5). Вы уже наверняка поняли, что утилита zip(1) была установлена в виде файла /usr/local/bin/zip. При просмотре файла +CONTENTS можно определить имена и местоположение всех установленных файлов.

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

Комментарии запрещены.