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

Система портов

Поговорим для начала немного о системе портов. Чтобы иметь доступ к портам, необходимо получить и установить дерево портов в систему. Дерево живет здесь: /usr/ports, и если нет такой директории или в ней нет ничего, то у тебя дерево портов не установлено. C помощью утилиты portsnap, которая поставляется с фряхой, можно всем делом заправлять.

Итак, если дерево портов не установлено, используем:

$ portsnap fetch extract

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

$ portsnap fetch update

Порой копится очень много обновлений и этот процесс затягивается. Лишний раз подумай и прикинь, зависла ли программа, чтобы ее обрывать (у меня такого еще пока не было).

Если хочешь узнать больше про portsnap - пользуй маны:

$ man portsnap

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

$ make install clean

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

Замечание.

$ make install clean

Это посути две команды:

$ make install
$ make clean

Последняя команда служит для очистки файлов, которые использовались при сборке порта (обычно это директория work в папку порта).

Заканчивая эту часть, напишу про еще одну хорошую утилиту. Это pkg_info. Используй ее когда хочешь поглядеть то, что у тебя в системе установлено:

$ pkg_info

У этой утилиты есть много разных фишек, которые тебе однажды пригодятся, поэтому читай подробней ман:

$ man pkg_info

Может возникнуть (да впрочем обязательно возникнет) необходимость обновить какие-то установленные порты. Для обновления служит дельная утилита portupgrade.

Обновление портов

Portupgrade не идет в комплекте с фряхой, поэтому ее можно поставить так:

$ cd /usr/ports/ports-mgmt/portupgrade
$ make install clean

Теперь для того, чтобы определить, какие пакеты нуждаются в обновлении, набери:

$ pkg_version -v | grep "needs"

Для обновления пакета, тебе нужно просто набрать:

$ portupgrade package_name

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

Система пакетов

Когда ты собираешь порт, то у тебя получается пакет, котрый и ставится в систему. Естественно можно поставить в систему уже когда-то собранные порты, которые ты можешь найти в интернете.

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

$ make install

Нужно делать:

$ make package

После чего порт собирается, в директории порта появляется пакет, который ставится в систему. Файлы пакетов носят название *.tbz. Для установки скаченного пакета ты можешь набрать:

$ pkg_add package_file_name

У тебя есть возможность ставить пакеты не скачивая их вручную, просто набрав:

$ pkg_add -r package_name

В названии пакета можно указывать полный путь до пакета ftp или http или просто имя и утилита попробует найти нужный пакет, например:

$ pkg_add -r xorg

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

$ pkg_add -r -K xorg

И все пакеты скачаются, установятся и сохранятся в текущий директории. Как всегда более подробное описание всех возможностей ищи тут:

$ man pkg_add

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

$ pkg_delete package_full_name

Пакет удалиться, если нет никаких зависимостей.. А если они есть? Ну тогда тебе задание - покопайся в манах и ты должен найти решение :)