Для установки ПО во FreeBSD существует система портов. Она довольно сильно отличается от принятой в Linux-дистрибутивах модели распространения программ, но в целом очень удобна. Здесь я приведу основы использования портов во FreeBSD.

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

# portsnap fetch

При первоначальном скачивании дерева портов необходимо выполнить:

# portsnap extract

При обновлении дерева достаточно:

# portsnap update

Можно добавить в crontab следующую команду и выполнять её раз в день:

/usr/sbin/portsnap cron update >/dev/null

Теперь, когда у нас есть актуальное дерево портов, располагающееся в /usr/ports, необходимо найти нужный нам порт. Естественно, для поиска можно воспользоваться стандартными инструментами find, locate, whereis и т.д., но есть способ лучше. Например, так можно искать по имени программы:

$ cd /usr/ports
$ make search name=portscan
Port:   gtkportscan-1.2_4
Path:   /usr/ports/security/gtkportscan
Info:   A simple port scanner that prints out open ports
Maint:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
B-deps: gettext-0.18.1.1 glib-1.2.10_13 gtk-1.2.10_22 inputproto-2.0.2 kbproto-1.0.5 libICE-1.0.7,1 libSM-1.2.0,1 libX11-1.4.4,1 libXau-1.0.6 libXdmcp-1.1.0 libXext-1.3.0_1,1 libXi-1.4.5,1 libiconv-1.14 libpthread-stubs-0.3_3 libxcb-1.7 pkgconf-0.8.5 xextproto-7.2.0 xproto-7.0.22
R-deps: gettext-0.18.1.1 glib-1.2.10_13 gtk-1.2.10_22 inputproto-2.0.2 kbproto-1.0.5 libICE-1.0.7,1 libSM-1.2.0,1 libX11-1.4.4,1 libXau-1.0.6 libXdmcp-1.1.0 libXext-1.3.0_1,1 libXi-1.4.5,1 libiconv-1.14 libpthread-stubs-0.3_3 libxcb-1.7 pkgconf-0.8.5 xextproto-7.2.0 xproto-7.0.22
WWW:

Port:   pear-Net_Portscan-1.0.3
Path:   /usr/ports/security/pear-Net_Portscan
Info:   Provides an API for scanning ports
Maint:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
B-deps: libiconv-1.14 libxml2-2.7.8_3 pcre-8.31 pear-1.9.4_1 php5-5.4.5 php5-xml-5.4.5 pkgconf-0.8.5
R-deps: libiconv-1.14 libxml2-2.7.8_3 pcre-8.31 pear-1.9.4_1 php5-5.4.5 php5-xml-5.4.5 pkgconf-0.8.5
WWW:    http://pear.php.net/package/Net-Portscan/

Port:   security/portscanner
Moved:
Date:   2011-05-01
Reason: Has expired: Upstream disappeared and distfile is no longer available

А так по ключевым словам:

$ make search key=weakness
Port:   flawfinder-1.27
Path:   /usr/ports/security/flawfinder
Info:   Examines source code looking for security weaknesses
Maint:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
B-deps: gettext-0.18.1.1 libiconv-1.14 python27-2.7.3_3
R-deps: gettext-0.18.1.1 libiconv-1.14 python27-2.7.3_3
WWW:    http://www.dwheeler.com/flawfinder/

Можно сузить поиск, перейдя в соответствующую категорию ПО и выполнив эти команды:

$ cd /usr/ports/www
$ make search name=oops
Port:   oops-1.5.24_11
Path:   /usr/ports/www/oops
Info:   A caching web proxy server
Maint:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
B-deps: autoconf-2.69 autoconf-wrapper-20101119 gawk-4.0.1 gettext-0.18.1.1 gigabase-3.86_1 libiconv-1.14 libsigsegv-2.10 m4-1.4.16_1,1 perl-5.14.2_2
R-deps: gigabase-3.86_1
WWW:    http://oops-cache.org/oops.eng/

Port:   xoops-2.5.5
Path:   /usr/ports/www/xoops
Info:   A Dynamic Web CMS
Maint:  Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
B-deps:
R-deps: libiconv-1.14 libxml2-2.7.8_3 pcre-8.31 php5-5.4.5 php5-mysql-5.4.5 pkgconf-0.8.5
WWW:    http://www.xoops.org/

После того, как необходимое ПО найдено, его необходимо откомпилировать и установить. Зависимости, необходимые для запуска программы, указаны в R-deps, а для компиляции - в В-deps. Переходим в каталог, содержащий порт и компилируем его:

# make clean; make all

Устанавливаем откомпилированный порт:

# make install

Просто загрузить исходники:

# make fetch

Загрузить исходники для программы и всех зависимостей (например, если у вас нет доступа в интернет на данном компьютере):

# make fetch-recursive

Скачанные исходники складываются в /usr/ports/distfiles, использованные опции при компиляции можно найти в /var/db/ports, а информацию по установленным портам в /var/db/pkg. Посмотреть зависимости для порта можно так:

$ cd /usr/ports/www/oops
$ make pretty-print-run-depends-list
This port requires package(s) "gigabase-3.86_1" to run.
$ make pretty-print-build-depends-list
This port requires package(s) "autoconf-2.69 autoconf-wrapper-20101119 gawk-4.0.1 gettext-0.18.1.1 gigabase-3.86_1 libiconv-1.14 libsigsegv-2.10 m4-1.4.16_1,1 perl-5.14.2_2" to build

Удалить порт:

# make deinstall

или так:

# pkg_delete имя_порта

или даже так (удалит все установленные порты):

# pkg_deinstall *

Переустановить порт:

# make reinstal

Или, например можно скомпилировать, установить и зачистить весь полученный мусор:

# make all install clean

Актуальность установленных портов можно проверить командой:

$ pkg_version -v -l "<"
portupgrade-2.4.9.5,2               <   needs updating (port has 2.4.9.6,2

Список всех установленных портов:

$ pkg_version -v

Если необходимо установить порт на несколько компьютеров или откомпилировать пакеты на одной машине, а установить их на другую, то имеет смысл сделать репозиторий:

# mkdir /usr/ports/packages

Сборка портов тогда производится командой:

# make package

При этом помимо установки порта, в каталог /usr/ports/packages помещается собранный пакет. К этому каталогу можно будет впоследствии обеспечить общий доступ с других машин (к примеру, по NFS). Собранный пакет можно установить с помощью команды pkg_add.

Посмотреть описание установленного порта можно так:

$ pkg_info -x pkg_cutleaves
Information for pkg_cutleaves-20090810:

Comment:
Interactive script for deinstalling 'leaf' packages

Description:
pkg_cutleaves finds installed 'leaf' packages, i.e. packages that are
not referenced by any other installed package, and lets you decide for
each one if you want to keep or deinstall it (via pkg_deinstall(1)).

Также с помощью этой команды можно узнать какому порту принадлежит файл:

$ pkg_info -W squid
/usr/local/sbin/squid was installed by package squid-3.1.20

Если в системе устанавливались и удалялись разные порты, то, скорее всего, остались установленными зависимости. Для упрощения удаления таких уже ненужных портов существует небольшой скрипт (устанавливается из портов) pkg_cutleaves.

Для упрощения работы с портами можно установить portupgrade. Работа с утилитами, входящими в состав этого пакета, значительно упрощает работу с портами. При работе утилиты базу данных для поиска в индексном файле, что приводит к ускорению работы. После обновления дерева портов, выполните portsdb -Fu для обновления индексных файлов. Для обновления порта:

# portupgrade имя-порта

или чтобы обновить всё (я не рекомендую обновлять вслепую установленный порты):

# portupgrade -a

Для построения скрипта на обновление всех портов:

$ portversion -v -l "<" -Q -c

#
#  help2man
#  needs updating (port has 1.40.11)
#
pkgs="$pkgs help2man-1.40.10"

#
#  p5-Convert-TNEF
#  needs updating (port has 0.18)
#
pkgs="$pkgs p5-Convert-TNEF-0.17"

#
#  portupgrade
#  needs updating (port has 2.4.9.6,2)
#
pkgs="$pkgs portupgrade-2.4.9.5,2"


if [ X"$pkgs" != X"" ]; then
  portupgrade "$@" $pkgs
fi

Установка порта (если будет несколько портов с похожим именем, то будет задан запрос на установку по каждому из них):

# portinstall имя-порта

Почистить весь накопившийся мусор в портах:

# portsclean -CDLP

Для отслеживания уязвимостей в установленных портах можно установить portaudit.

Существует также неплохой пакет управления портами portmaster. Обновление всех портов с помощью portmaster производится так:

# portmaster -aD

 

Добавить комментарий
  • Комментарии не найдены