Документация по ОС FreeBSD Воскресенье, 19.05.2024, 17:34
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Ports & Packages

Пакеты и портированные приложения в FreeBSD
Введение

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

Пакеты (packages)

Пакетами в FreeBSD называются специально оформленные архивы с уже откомпилированными программами. Эти архивы содержат в себе всю необходимую информацию о файлах, составляющих пакет, о каталогах в которые файлы следует разместить, о взаимосвязях данного пакета с другими пакетами. Процесс установки нового пакета крайне прост: нужно воспользоваться системной программой pkg_install, которая выполнит все действия по установке и настройке системы для работы с содержимым пакета или же программой sysinstall, которая является надстройкой над pkg_install. Установка нового пакета может потребовать дополнительных (взаимосвязанных) пакетов, содержащих программы и файлы, необходимые для функционирования устанавливаемого пакета. Процедура деинсталлирования пакета точно также проста, она производится либо вызовом программы pkg_delete либо средствами программы sysinstall. Как и в процессе инсталляции может возникнуть вопрос о удалении других пакетов, которые используют данный.

Теперь остановимся более подробно на вопросах связанных с внутренней структурой пакета и инфорамции об уже установленных в системе пакетах. Каждый пакет -это сжатый архив, созданный программами tar и gzip. Внутри пакета, как правило, содержится дерево файлов со структурой, совпадающей с расположением файлов в системе после установки пакета. Кроме файлов, непосредственно относящихся к устанавливаемому набору программ, в пакете содержатся дополнительные файлы в которых содержатся сведения о самом пакете и средства настройки программ. Содержимое файлов следующее: +COMMENT -однострочное описание содержимого пакета, +CONTENTS -скрипт, содержащий перечень файлов в пакете и их контрольные суммы, +DESC -подробное описание пакета, +DISPLAY -информационный файл, выводимый на экран в процессе установки пакета, +MTREE_DIRS -используется для создания дерева каталогов в котором будут располагаться гайлы пакета и установки необходимых прав доступа к ним (файл в формате программы mtree).

После установки пакета в системе в каталоге /var/db/pkg создается подкаталог с тем же самым именем, что и у пакета. Содержимое подкаталога -файлы +COMMENT, +CONTENTS, +DESC, +DISPLAY, +MTREE_DIRS, +REQUIRED_BY. Файл +REQUIRED_BY содержит перечень пакетов для работы которых необходим данный пакет.

Поскольку программы работы с пакетами опираются на содержимое каталога /var/db/pkg, то различные манипуляции с файлами в нем крайне нежелательны (конечно если нет точной уверенности в своих действиях). Детально о нестандартных способах использования содержимого /var/db/pkg будет описано ниже.

Дерево портирования (/usr/ports)

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

Обычная процедура компиляции программ сводится к выдаче команды make install clean или же двух последовательных команд: make install и make clean в соответствующем каталоге. Более интересны следующие опции программы make, используемые при работе с деревом портирования. Опция fetch позволяет загрузить необходимые файлы для построения программ, extract -распаковать архив с исходными текстами, patch -произвести изменения (патчи) в исходных текстах, configure -сконфигурировать программы, build -откомпилировать программы, install (reinstall)-установить (повторно) программы, clean -очистить каталог от временных рабочих файлов, deinstall - деинсталлировать порт distclean -удалить из системы файлы с исходными текстами.

В подкаталогах дерева портирования обычно содержатся следующие файлы: Makefile -файл, необходимый для построения программ, distinfo -файл, содержащий список архивов с иходными текстами программ и их контрольные суммы, pkg-comment -однострочное и pkg-descr -более подробное описание содержимого данного элемента портирования, pkg-plist -список файлов, входящих в данный набор программ, кроме того может иметься подкаталог files, в котором содержатся файлы, необходимые для дополнения и изменения исходных текстов.

В процессе компиляции программ в текущем каталоге создается временный подкаталог work в поддереве которого распаковвывается архив с исходными текстами и производится построение программ. В самом каталоге work в процессе компиляции образуется несколько файлов-ключей, каждый из которых создается в результате выполнения соответствующих фаз построения: .extract_done.[имя пакета] -образуется в результате распаковки содержимого архивов и соответсвует команде make extract, .patch_done.[имя пакета] -образуется после применения патчей к исходным текстам (соответствует make patch), .configure_done.[имя пакета] -образуется после конфигурирования программ перед компиляцией (соответствует make configure), .buid_done.[имя пакета] -образуется после компиляции программ (соответствует make build), .install_done.[имя пакета] -образуется после установки пакета в системе (соответствует make install). Удаление того или иного файла-ключа позволяет произвести повторную операцию, в результате которой данный ключ создается (т.е. удаление .build_done.* позволяет многократно компилировать программы пакета).

Проблемы с установкой программ, некоторые рекомендации

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

Характерные примеры проблемных пакетов: XFree86-4 -в процессе установки заменяет часть файлов XFree86-3.3.6, последняя ставится обычно в обход системы пакетов на стадии установки ОС. KDE1, KDE2 -являются взаимоисключающими элементами, установка одного приводит к потере работоспособности другого, аналогичная проблема возникает при установке библиотек QT разных версий (пересечение по заголовочным файлам). Различные варианты HTTP сервера apache частично пересекаются по файлам и могут приводить к потере работоспособности при удалении в случае одновременной установки нескольких версий.

Не существует никаких способов разрешения всех проблем с инсталляцией программ, но есть несколько правил, соблюдая которые можно снизить риск получения неработающих компонентов. Во-первых, при инсталляции нового программного продукта с помощью пакетов следует проверить не использует ли он компоненты с отличными версиями от тех, что уже установлены в системе. Если таковое имеет место, то проверяется возможность установки программ через портинг, т.к. в этом случае возможно использование уже установленных программ и библиотек. Если даже при использовании портинга проблема с конфликтом версий остается, то стоит воздержаться от установки данного продукта или вручную произвести необходимые настройки. Во-вторых, установку пакетов желательно производить таким образом, чтобы программы устанавливались в порядке возрастания версий. Это не дает возможности избежать всех конфликтов в компонентах пакетов, но в случае установки библиотек дает возможность пользоваться самыми последними версиями заголовочных файлов и файлов настроек (касается библиотек QT, GTK и т.п.). В-третьих, перед установкой пакетов близких по содержанию, например XFree86-4 и XFree86-server, нелишне заглянуть в файлы с перечнем компонентов каждого из пакетов. Это позволит избежать установки заведомо ненужных и почти полностью совпадающих элементов. В четвертых, при деинсталляции пакетов также следует ознакомиться с содержанием удаляемого пакета, а в случае необходимости переустановить пакет с которым удаляемый пересекался.

Отдельной проблемой является процесс перехода на новую версию системы и (или) обновление дерева портинга. В этом случае часть пакетов меняет свое название и становится потенциальным источником неприятостей, связанных с пересечением по файлам. Самое правильное решение в этом случае (если конечно предполагается дальнейшее развитие системы и установка новых компонентов) -полностью переустановить все пакеты, имеющиеся в системе. Удалить все пакеты из системы можно либо многократной выдачей команды pkg_delete * в каталоге /var/db/pkg (при этом за один раз удаляются пакеты не являющиеся чьей-либо зависимостью) либо командой pkg_delete -f там же (при этом каждый пакет удаляется несмотря на его зависимости).
Категория: Ports & Packages | Добавил: oleg (24.10.2007)
Просмотров: 1678 | Комментарии: 2 | Рейтинг: 4.0/1 |
Всего комментариев: 2
2 oleg  
0

1 sanya  
0
Как задать чтоб по умолчанию бегало за пакетами на заданное зеркало, опцию PACKAGESITE игнорирует, лезет на ftp://ftp.freebsd.org

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024