Заметки о FreeBSD — Работаем с пакетами





Работа с пакетами

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



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



    Рассмотрим разнообразные варианты установки пакета в систему, это установка пакетов по сети и установка отдельно скаченных пакетов на систему не имеющую выхода в интернет.



    Чтобы установить пакет из интернета, используется команда pkg_add. Допустим мы хотим установить командный процессор bash, тогда нам следует выполнить следующую команду:



# pkg_add -r bash



Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-current/Latest/bash.tbz… Done.

Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-current/All/libiconv-1.13.1.tbz… Done.

Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-current/All/gettext-0.17_1.tbz… Done.



    Возникает вопрос, почему мы выбирали установку bash а вместе с ним установились еще и libiconv и gettext? Дело в том, что для работы bash требуются эти две утилиты, т.е. libiconv и gettext это те утилиты от которых зависит работа bash, т.е. это зависимости. Средства управления пакетами в FreeBSD обладают механизмом разрешения зависимостей, и при установки какого либо пакета автоматически установятся те пакеты которые необходимы для работы устанавливаемой программы. Ключ -r или —remote значит скачивать пакет дистанционно, т.е. из интернета.



    Если же на машине интернета не имеется, то пакет можно установить из какого либо каталога файловой системы. Допустим в каталоге /usr создан каталог packages, а в каталоге находится пакет proftpd-1.3.2.tbz с зависимостями. Тогда установка пакета будет выглядеть так:



# cd /usr/packages

# pkg_add proftpd-1.3.2.tbz



    Без лишних разговоров будет установлен proftpd :).

    Но если вдруг для пакета не будет зависимостей в этом каталоге, то тогда мы увидим следующее сообщение:



pkg_add: could not find package libiconv-1.13.1 !

pkg_add: could not find package gettext-0.17_1 !



    Как и следовало ожидать, в этом случае пакет proftpd установлен не будет. Следует положить требуемые пакеты в каталог и повторить установку.

    Установочные диски с FreeBSD как правило комплектуются большой коллекцией пакетов.



    Получение информации об установленных пакетах



    Для того чтобы посмотреть какие пакеты установлены в системе используем команду pkg_info:



# pkg_info



    После выполнения которой на экран будет выведен весь список пакетов установленных на данный момент в системе.



    Если же мы выполним:



# pkg_info -Ix mc




    На экран будет выведены только те пакеты, в названии которых присутствуют символы mc, что облегчает поиск нужного пакета.



mc-4.6.2            Midnight Commander, a free Norton Commander Clone



    Ключ -x означает, что на дисплей будет выведена информация только о том пакете, в имени которого пристутвуют введенные символы. Ключ -I означает что отображать следует только название пакета.



# pkg_info -x samba-libsmbclient



    Результатом выполнения этой команды будет получение развернутой информации о запрошеном пакете:



Information for samba-libsmbclient-3.0.35:



Comment:

Shared libs from the samba package



Required by:

amarok-1.4.10_5

gnome-vfs-2.24.1_1

kde-lite-3.5.10_2

kdeartwork-3.5.10_2

kdebase-3.5.10_3

kdepim-3.5.10_3

kdeutils-3.5.10_2

ru-openoffice.org-3.1.0_2



Description:

This is the set of shared libraries from the Samba port. It lets other

programs to utilize various aspects of the SMB protocol.



WWW: http://www.samba.org/



    Как мы видим тут же указаны те пакеты, работа которых зависит от samba-libsmbclient-3.0.35.



    Деинсталяция пакетов из системы



    Допустим нужно удалить какое либо ПО из системы, для этого нам сначала нужно узать имя пакета. Рассмотрим удаление файлового менеджера mc:



# pkg_info -Ix mc

mc-4.6.2            Midnight Commander, a free Norton Commander Clone



# pkg_delete mc-4.6.2


 

    После выполнения команды pkg_delete пакет будет удален, и на запрос pkg_info мы получим сообщение что пакет в системе не найден:



# pkg_info -Ix mc

pkg_info: no packages match pattern(s)



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



# pkg_delete ORBit2-2.14.17

pkg_delete: package ‘ORBit2-2.14.17’ is required by these other packages

and may not be deinstalled:

gconf2-2.26.2_1

gnome-vfs-2.24.1_1

libgsf-1.14.15_1

libpurple-2.5.8

libwpd-0.8.14_2

pidgin-2.5.8_1

ru-openoffice.org-3.1.0_2

wv2-0.3.1_1



    Чтобы удалить такой пакет сначала требуется удалить те пакеты, работа которых зависит от этого пакета. Для того чтобы принудительно удалить пакет игнорируя зависимости можно использовать ключ -f , но в этом случае принудительное удаление приведет к неработоспособности всех тех программ которые зависят от удаляемого пакета. Поэтому использовать принудительное удаление следует только в тех случаях когда это действительно необходимо. Ключ -a применимый к pkg_delete удалит все пакеты из системы полностью.



    Приведенных выше примеров достаточно для управления ПО установленного в системе, но основной недостаток работы с пакетами заключается в том, что те пакеты которые находятся на официальном сервере ftp.freebsd.org (или на установочных дисках) как правило очень быстро устаревают. Если требуется иметь все время свежие версии программ, то придется разбираться с системой портов FreeBSD, представляющая собой систему сборки программ из исходных текстов.



Crazy Alex 14.08.2009


http://www.bsdnotes.ru/?lnk=sys_packages

Губарь Маргарита Александровна