Как установить и управлять портами на FreeBSD 10.1

Вступление

FreeBSD - это мощная операционная система, способная выполнять различные функции. Частью того, что делает эту операционную систему идеальным выбором во многих сценариях, является ее репутация гибкости. Большой вклад в эту репутацию вносит поддерживаемый FreeBSD метод установки программного обеспечения из источника, известного как * ports system *.

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

Предпосылки

Чтобы следовать этому руководству, у вас должен быть доступ к серверу FreeBSD 10.1 и учетная запись пользователя без полномочий root с привилегиями + sudo +. This Guide может помочь вам войти на сервер FreeBSD и настроить разумную рабочую среду.

Управление различными типами программного обеспечения FreeBSD

Команда FreeBSD поддерживает базовую операционную систему FreeBSD как единое целое. Его компоненты обновляются с помощью инструмента + freebsd-update +, и их поведение контролируется, прежде всего, через файлы конфигурации, расположенные в каталоге + / etc +. Хотя вы можете устанавливать и использовать альтернативы прилагаемому программному обеспечению, вы не можете легко или безопасно удалить те из них, которые включены в базовую систему, поскольку они считаются функционально важными частями операционной системы.

Напротив, дополнительное программное обеспечение управляется с использованием различных процессов, инструментов и мест в файловой системе. В отличие от программного обеспечения базовой системы, дополнительное программное обеспечение настраивается в каталоге + / usr / local / etc +. FreeBSD предоставляет два санкционированных метода для загрузки и установки дополнительного программного обеспечения в систему.

Система портов, которую мы будем описывать в этом руководстве, управляется через иерархию файловой системы, расположенную в + / usr / ports +, которая классифицирует каждую доступную часть программного обеспечения, которую FreeBSD знает, как собрать. В этом каталоге подкаталог первого уровня классифицирует программное обеспечение в основном в соответствии с функцией или языком. В этих каталогах существуют папки для каждой отдельной части программного обеспечения. Программное обеспечение можно загружать, настраивать, компилировать и устанавливать либо с помощью простых команд + make +, либо с помощью доступных вспомогательных утилит. Программное обеспечение в коллекции портов включает в себя все исправления, необходимые для сборки и запуска приложения в системе FreeBSD.

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

Подготовка дерева портов

Дерево портов - это имя иерархии, которая существует под каталогом + / usr / ports +. Эта иерархия содержит каталоги, которые соответствуют категориям портов, в которых находятся другие каталоги, которые соответствуют отдельным портам.

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

Мы можем обновить дерево портов с помощью утилиты + portsnap +. Этот инструмент запрашивает серверы портов FreeBSD на предмет изменений.

Записывая наше последнее обновление

Перед тем, как мы выполним фактическую команду обновления, нам нужно записать временную метку для определенного файла в нашем дереве портов с именем + / usr / ports / UPDATING +. Мы можем использовать инструмент + stat +, чтобы увидеть различные временные метки, связанные с файлом:

stat -x /usr/ports/UPDATING

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

 File: "UPDATING"
 Size: 375337       FileType: Regular File
 Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
Device: 0,81   Inode: 2011338    Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify:
Change:

Есть вероятность, что вместо этого вы получите сообщение об ошибке:

stat: /usr/ports/UPDATING: stat: No such file or directory

Если вы видите это, это означает, что у вас нет дерева портов, инициализированного в вашей системе. Если это так, перейдите к следующему разделу, чтобы узнать, как извлечь исходное дерево портов в вашу систему с помощью + portsnap +.

Значения, на которые мы хотим обратить внимание, это времена «Modify» и «Change», которые выделены в выходных данных выше. В этом случае отметка времени «Изменить» будет самой последней раз, когда сопровождающий портов изменил файл с важной информацией. Отметка времени «Изменить» будет последней синхронизацией файла на вашем сервере.

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

stat -x /usr/ports/UPDATING > ~/last_update

Теперь, когда мы записали эту информацию, мы можем продолжить и обновить наше дерево портов.

Обновление дерева портов с помощью Portsnap

Если у вас есть четкое представление о том, когда дерево портов в последний раз обновлялось, вы можете синхронизировать дерево портов с самой последней информацией с сайта проекта FreeBSD. Для этого мы будем использовать инструмент под названием + portsnap +.

Если у вас нет никакой информации в каталоге + / usr / ports + (если вы столкнулись с ошибкой, о которой мы упоминали в предыдущем разделе), вы можете загрузить и извлечь все дерево портов в этот каталог с помощью + portsnap +. Этот процесс может занять довольно много времени, но он необходим только в том случае, если ваша директория + / usr / ports + пуста, что должно произойти только один раз. Если ваш сервер FreeBSD находится в DigitalOcean, ваше дерево портов должно быть уже инициализировано:

sudo portsnap fetch extract

Это загрузит и извлечет все дерево портов в каталог + / usr / ports +.

Если у вас уже есть дерево портов, встроенное в каталог + / usr / ports + (если вы смогли записать метки времени в последнем разделе), вы можете обновить файлы до их самых последних версий с помощью этой команды:

sudo portsnap fetch update

Эта команда будет извлекать только те файлы, которые отличаются от файлов в структуре + / usr / ports +, поэтому это займет значительно меньше времени, чем вариант команды + + extract + `. Это формат, который следует использовать в ежедневных обновлениях дерева портов.

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

Поиск дерева портов для приложений

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

Поиск с помощью + whereis +

Самый простой способ поиска приложения - по имени с помощью команды + whereis +. Это будет искать команду в вашей системе и в дереве портов. Если он найдет совпадение, он вернет соответствующую информацию о пути для приложения в вашей системе.

Как правило, если приложение не установлено, но при поиске был найден действительный порт, оно вернет путь к порту в дереве портов. Если приложение is установлено, оно обычно возвращает путь к исполняемому файлу, порт и часто страницу + man +:

Например, мы можем искать утилиту + wget +, набрав это:

whereis wget

Если порт не установлен, мы увидим что-то вроде этого:

wget: /usr/ports/ftp/wget

Поскольку путь начинается с + / usr / ports +, мы знаем, что это устанавливаемый порт. Мы можем использовать возвращаемый путь, если хотим установить этот порт.

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

wget: /usr/local/bin/wget /usr/local/man/man1/wget.1.gz /usr/ports/ftp/wget

Сюда входит путь к фактически установленному исполняемому файлу, файл страницы + man + для приложения и расположение порта в дереве портов.

Поиск с использованием команды + echo + в иерархии файловой системы

В FreeBSD Handbook авторы также предлагают довольно новый способ поиска с использованием только ` + echo + `команда и встроенная структура дерева портов.

Дерево портов настроено со всеми соответствующими файлами и каталогами в каталоге + / usr / ports +. В файловой системе каждый порт представлен отдельным каталогом, который содержит всю информацию, необходимую для сборки и установки программного обеспечения в системе FreeBSD.

Для облегчения организации эти порты сгруппированы по функциям в каталогах категорий в + / usr / ports +. Таким образом, в приведенном выше примере + wget + мы видим, что команда + wget + была отнесена к группе + ftp +. Таким образом, каталог + / usr / ports + содержит каталоги категорий, которые, в свою очередь, содержат каталоги для портов.

Мы можем использовать эту непротиворечивую структуру с помощью команды + echo + и групповых символов. Поскольку мы, вероятно, не знаем категорию, в которой будет существовать порт, мы заменим этот уровень каталога звездочкой. Мы также можем поместить их до и после нашего поискового запроса, если мы хотим быть более гибкими в нашем сопоставлении. Поэтому мы можем искать программы, связанные с + wget +, набрав:

echo /usr/ports/*/*wget*

Это вернет что-то похожее на это:

/usr/ports/ftp/gwget /usr/ports/ftp/wget /usr/ports/www/ruby-wgettsv /usr/ports/www/wgetpaste

Это может быть немного более гибким, чем команда + whereis +, поскольку не требует точного соответствия.

Поиск с использованием доступных целей + make +

Самый мощный способ поиска портов - использовать команду + make +.

Это также команда, которая используется для создания и установки портов в системе, но в более общем смысле это гибкий инструмент, который можно использовать для простого выполнения сложных задач, определенных в файле конфигурации. Разработчики FreeBSD создали + make + “target” (определения задач), которые будут выполнять поиск дерева портов по различным критериям.

Чтобы использовать эту функцию, вы должны сначала перейти к базе дерева портов. Здесь определены цели + make +:

cd /usr/ports

Общий синтаксис для выполнения поиска:

make [search|quicksearch] [searchtype]=[searchquery] [modifiers]

Две цели + make, предназначенные для поиска в дереве портов, это` + search` и + quicksearch. Они имеют одинаковую функциональность и отличаются только отображением по умолчанию.

Цель + search + вернет информацию об имени порта, пути в дереве портов, общем описании, а затем подробности о сборке, включая электронную почту сопровождающего, зависимости сборки, зависимости выполнения и URL-адрес восходящего потока. Цель + quicksearch + возвращает только имя порта, путь и описание.

Типы поиска могут быть следующими:

  • * имя *: поиск только в поле имени порта.

  • * key *: Поиск в полях имени, комментария и зависимостей порта.

  • * путь *: поиск определенного пути в иерархии портов.

  • * info *: Поиск в поле информации (описания) порта.

  • * maint *: поиск по адресу электронной почты сопровождающего.

  • * cat *: поиск по категории порта.

  • * bdeps *: поиск зависимостей во время сборки каждого порта.

  • * rdeps *: Поиск зависимостей во время выполнения каждого порта.

  • * www *: поиск на сайте портов.

Вы также можете добавить «x» перед любой из вышеперечисленных категорий, чтобы удалить результаты, которые соответствуют совпадению. Например, если ваш поиск включает + xname = apache +, любой порт, имеющий строку «apache» в своем поле имени, не будет возвращен.

Давайте рассмотрим несколько быстрых примеров. Ниже вы можете увидеть разницу в выводе целей + search + и + quicksearch +. Цель + search + включает в себя полную информацию о совпадениях:

make search name=htop
Port:   htop-1.0.3
Path:   /usr/ports/sysutils/htop
Info:   Better top(1) - interactive process viewer
Maint:  [email protected]
B-deps: autoconf-2.69 autoconf-wrapper-20131203 automake-1.14_1 automake-wrapper-20131203 gettext-runtime-0.19.3 indexinfo-0.2.2 libexecinfo-1.1_3 libffi-3.0.13_3 libiconv-1.14_6 m4-1.4.17_1,1 ncurses-5.9.20141213 perl5-5.18.4_11 python2-2_3 python27-2.7.9 readline-6.3.8
R-deps: libexecinfo-1.1_3 lsof-4.89.b,8 ncurses-5.9.20141213
WWW:    http://htop.sourceforge.net/

С другой стороны, цель + quicksearch + отображает только важную информацию о найденных совпадениях:

make quicksearch name=htop
Port:   htop-1.0.3
Path:   /usr/ports/sysutils/htop
Info:   Better top(1) - interactive process viewer

Можно скомбинировать различные типы поиска, чтобы сузить результаты. Например, если бы мы искали сетевой монитор + ntop +, мы могли бы увидеть результаты, которые выглядят так:

make quicksearch name=ntop
Port:   ntopng-zmq-3.2.3_1
Path:   /usr/ports/devel/ntopng-zmq
Info:   NTOPNG specific ZMQ library

Port:   diveintopython-5.4_1
Path:   /usr/ports/lang/diveintopython
Info:   Free Python tutorial book that is "not For Dummies(tm)"

Port:   ntop-5.0.1_8
Path:   /usr/ports/net/ntop
Info:   Network monitoring tool with command line and web interfaces

Port:   ntopng-1.2.1_1
Path:   /usr/ports/net/ntopng
Info:   Network monitoring tool with command line and web interfaces

Port:   sntop-1.4.3_1
Path:   /usr/ports/net/sntop
Info:   Monitor status of network nodes using fping

Здесь мы видим, что большинство результатов связаны с + ntop +, но у нас также есть книга по изучению Python. Мы можем дополнительно отфильтровать, добавив путь:

make quicksearch name=ntop path=/net
Port:   ntop-5.0.1_8
Path:   /usr/ports/net/ntop
Info:   Network monitoring tool with command line and web interfaces

Port:   ntopng-1.2.1_1
Path:   /usr/ports/net/ntopng
Info:   Network monitoring tool with command line and web interfaces

Port:   sntop-1.4.3_1
Path:   /usr/ports/net/sntop
Info:   Monitor status of network nodes using fping

Мы также можем изменить поведение поиска несколькими различными способами. Некоторые допустимые модификаторы:

  • * icase *: установите значение «1», чтобы включить регистронезависимость. Это по умолчанию. Чтобы выполнить поиск с учетом регистра, установите для этого параметра значение «0».

  • * display *: содержит список полей, разделенных запятыми, для отображения в выводе.

  • * keylim *: ограничить поиск (используя тип поиска «ключ») только теми полями, которые отображаются. Включите это, установив его на «1».

Например, мы могли бы искать описания или пути, которые содержат заглавную строку «Вставить», набрав:

make search key=Paste display=path,info keylim=1 icase=0
Path:   /usr/ports/devel/pear-SebastianBergmann_PHPCPD
Info:   Copy/Paste Detector (CPD) for PHP code

Path:   /usr/ports/devel/py-zope.copypastemove
Info:   Copy, Paste, and Move support for content components

Path:   /usr/ports/german/bsdpaste
Info:   Pastebin web application to upload and read text on a webserver

Path:   /usr/ports/www/p5-WWW-Pastebin-PastebinCom-Create
Info:   Paste to http://pastebin.com from Perl

Path:   /usr/ports/www/p5-WebService-NoPaste
Info:   Pastebin web application to upload snippets of text

Path:   /usr/ports/www/py-django-dpaste
Info:   Pastebin Django application that powers dpaste.de

Path:   /usr/ports/www/wgetpaste
Info:   Paste to several pastebin services via bash script

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

make quicksearch name=wget
. . .

Port:   ftp/emacs-wget
Moved:
Date:   2011-05-02
Reason: Has expired: Upstream disappeared and distfile is no longer available

Port:   ftp/wgetpro
Moved:
Date:   2011-10-14
Reason: Vulnerable since 2004-12-14

Port:   www/wget4web
Moved:
Date:   2012-01-01
Reason: Has expired: Depends on expired www/apache13

Если порт был перемещен в новое место, поле «Перемещено» будет содержать новое место, где можно найти порт. Если это поле присутствует, но пусто, порт был удален.

Даже если они будут удалены, они все равно будут отображаться в результатах поиска. Если вы хотите предотвратить отображение перемещенных или удаленных портов, вы можете установить переменную окружения + PORTSEARCH_MOVED + в «0».

Например, чтобы установить для этой переменной значение «0» только для следующей команды, используя значение по умолчанию + tcsh +, мы можем набрать:

env PORTSEARCH_MOVED=0 make quicksearch name=wget
Port:   gwget-1.0.4_9
Path:   /usr/ports/ftp/gwget
Info:   GNOME wget front-end

Port:   wget-1.16
Path:   /usr/ports/ftp/wget
Info:   Retrieve files from the Net via HTTP(S) and FTP

Port:   ruby20-ruby-wgettsv-0.95
Path:   /usr/ports/www/ruby-wgettsv
Info:   Collect WWW resources and generate TSV data

Port:   wgetpaste-2.25
Path:   /usr/ports/www/wgetpaste
Info:   Paste to several pastebin services via bash script

Как видите, все записи, которые были перемещены или удалены, теперь отфильтрованы из наших результатов. Если вы хотите сделать это поведением по умолчанию, вы можете установить + PORTSEARCH_MOVED = 0 + в вашем файле + make.conf +:

sudo sh -c 'echo "PORTSEARCH_MOVED=0" >> /etc/make.conf'

Установка портов с помощью Make

Найдя порт, который вы хотите установить, вы можете легко загрузить необходимые файлы, собрать двоичный файл и установить его с помощью команды + make +.

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

Сначала измените местоположение порта. Порт + portmaster + находится в категории + ports-mgmt +:

cd /usr/ports/ports-mgmt/portmaster

Теперь мы можем легко загружать, настраивать, компилировать и устанавливать порт, используя цели + make +. Поскольку эти операции влияют на нашу систему, нам нужно использовать + sudo +. Долгий путь сделать это - через отдельные вызовы + make +, например так. Пока не вводите эти команды, мы покажем вам гораздо более короткую версию:

sudo make config
sudo make fetch
sudo make checksum
sudo make depends
sudo make extract
sudo make patch
sudo make configure
sudo make build
sudo make install

Мы можем немного сократить это, перечислив каждую цель после одной команды + make +, например так:

sudo make config fetch checksum depends extract patch configure build install

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

sudo make install

Как правило, мы хотим немного расширить эту цепочку команд, чтобы убедиться, что мы все настроили правильно. Обычно мы хотим указать + config-recursive +, параметр, не входящий в приведенный выше конвейер, перед целью + install +, чтобы позаботиться о конфигурации для этого порта и любых зависимостях в начале установки. В противном случае процесс сборки может остановиться и ждать ввода пользователя частично путем построения необходимых зависимостей.

Мы также обычно хотим немного почистить после установки, чтобы освободить место на диске и сохранить чистоту системы. Мы можем сделать это с целью + clean + или + distclean +. Цель + clean + удаляет извлеченный исходный код, использованный для построения этого порта и любых зависимых портов. Цель + distclean + также делает это, но также удаляет сжатый исходный архив для этого пакета из каталога + / usr / ports / distfiles +.

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

sudo make config-recursive install distclean

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

Выполните указанную выше команду в каталоге + / usr / ports / ports-mgmt / portmaster +:

sudo make config-recursive install distclean

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

изображение: https: //assets.digitalocean.com/articles/freebsd_ports_intro/dialog.png [Конфигурация порта FreeBSD]

Порт + portmaster + не имеет никаких зависимостей, но если бы они были, параметры конфигурации для зависимостей были бы представлены непосредственно после конфигурации целевого порта выше. Порт будет загружен, настроен и установлен.

Если вы используете по умолчанию + tcsh +, вам нужно будет повторно сканировать PATH после каждой установки, чтобы ваша оболочка знала обо всех установленных приложениях:

rehash

Если вышеуказанный процесс прошел успешно, вы успешно установили свой первый порт.

В то время как основная операционная система и конфигурация выполняются в обычных местах, дополнительное программное обеспечение, установленное через систему портов, устанавливается в иерархии + + usr / local +.

Это означает, что для настройки дополнительного программного обеспечения вам нужно искать в каталоге + / usr / local / etc +. Сами исполняемые файлы хранятся в основном в каталогах + / usr / local / bin и` + / usr / local / sbin`. Имейте это в виду при настройке или запуске приложений.

Примечания относительно приложений, которые запускаются как службы

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

Если вы хотите запустить службу один раз, вы можете сделать это, набрав:

sudo service  onestart

Например, чтобы запустить MySQL, вы можете набрать:

sudo service mysql-server onestart

Предполагая, что любая необходимая конфигурация была завершена, служба запустится один раз. Если вы хотите остановить службу позже, вы можете набрать:

sudo service mysql-server onestop

Хотя это работает для быстрых тестов, это не идеальный способ управления сервисами во FreeBSD. Чтобы настроить службу для запуска при каждой загрузке, необходимо включить ее. Для этого вам нужно добавить строку в файл + / etc / rc.conf.

Файлы инициализации, которые определяют, как запускаются дополнительные службы, хранятся в каталоге + / usr / local / etc / rc.d +. В каждом из этих файлов инициализации переменная с именем + rcvar + сообщает системе инициализации, какую переменную в файле + / etc / rc.conf + искать, чтобы определить, следует ли запускать службу. Для каждой необязательной службы вы можете найти соответствующую строку для добавления в файл + / etc / rc.conf +, набрав:

grep rcvar /usr/local/etc/rc.d/*

Вы получите список, который выглядит примерно так:

/usr/local/etc/rc.d/avahi-daemon:
/usr/local/etc/rc.d/avahi-dnsconfd:
/usr/local/etc/rc.d/dbus:
/usr/local/etc/rc.d/rsyncd:

Выделенная часть вывода показывает переменную, которую мы должны установить в «ДА», чтобы включить каждую из этих служб.

Например, чтобы включить службу демона + rsync +, мы можем добавить эту строку в + / etc / rc.conf +:

rsyncd_enable="YES"

Соответствующая строка должна быть в файле + / etc / rc.conf перед использованием обычных команд управления службами. Например, вы можете добавить вышеуказанную строку в конец файла + / etc / rc.conf + либо с помощью текстового редактора, либо набрав:

sudo sh -c "echo 'rsyncd_enable="YES"' >> /etc/rc.conf"

Это приведет к запуску демона rsync при каждой загрузке. Теперь вы можете управлять сервисом, используя команду + service + без префикса «one». Например, вы можете запустить сервис, набрав:

sudo service rsyncd start

Вы можете снова остановить службу, набрав:

sudo service rsyncd stop

Удаление установленного порта

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

Мы можем использовать цель + deinstall +, чтобы удалить приложение из нашей системы. Снова перейдите в каталог в дереве портов, связанный с приложением, которое вы хотите удалить:

cd /usr/ports/ports-mgmt/portmaster

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

sudo make deinstall

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

sudo make rmconfig

Чтобы удалить параметры конфигурации для этого порта и всех его зависимостей, введите:

sudo make rmconfig-recursive

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

sudo make reinstall distclean

Обновление приложений

Теперь, когда вы знаете, как устанавливать или удалять программы, мы должны продемонстрировать, как поддерживать ваши приложения в актуальном состоянии.

Проверка файла обновления на наличие важных замечаний по обновлению

В начале этого руководства мы сохранили временные метки для файла + / usr / ports / UPDATING +, прежде чем использовать + portsnap + для обновления нашего дерева портов.

Файл + / usr / ports / UPDATING + содержит важные заметки от сопровождающих портов об обновлениях и изменениях, которые могут потребовать дополнительных действий со стороны администратора. Невозможность прочитать этот файл и применить его рекомендации перед обновлением приложений может привести к тому, что ваша система будет в непригодном для использования состоянии или повлиять на функциональность ваших приложений.

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

cat ~/last_update
 File: "/usr/ports/UPDATING"
 Size: 375337       FileType: Regular File
 Mode: (0644/-rw-r--r--)         Uid: (    0/    root)  Gid: (    0/   wheel)
Device: 0,81   Inode: 2011338    Links: 1
Access: Thu Dec 11 22:24:59 2014
Modify:
Change:

Помните, отметка времени «Modify» указывает на последний раз, когда файл UPDATING в нашей системе был изменен администратором порта, а отметка времени «Change» указывает время нашей последней синхронизации. Информация выше - старые временные метки. Из этой информации мы можем сказать, что нам нужно обращать внимание на любые записи с 11 декабря до текущей даты.

Откройте обновленный файл UPDATING сейчас:

less /usr/ports/UPDATING

Файл будет выглядеть примерно так:

This file documents some of the problems you may encounter when upgrading
your ports.  We try our best to minimize these disruptions, but sometimes
they are unavoidable.

You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.

20150101:
 AFFECTS: users of net/unison and net/unison-nox11
 AUTHOR: [email protected]

 Unison has been upgraded to version 2.48, which uses a different wire
 protocol than 2.40 did.  In order to support synchronization with
 other computers where Unison is still at version 2.40, a new port
 net/unison240 has been created.  It provides unison240 and if that is
 GTK2-enabled, also unison240-text.  This unison240 port can be
 installed in parallel with the existing net/unison port.

20141230:
 AFFECTS: users of deskutils/xpad
 AUTHOR: [email protected]

 deskutils/xpad has been moved to deskutils/xpad3, since 4.x has been around
 for a while.

 Should you wish to stick with legacy branch at this time;

 # portmaster -o deskutils/xpad deskutils/xpad3

. . .

Этот файл содержит все потенциально разрушительные изменения для каждого доступного порта вплоть до 2008 года. Вам нужно только обратить внимание на уведомления, которые:

  • Добавлены с момента последнего обновления ваших портов

  • Включите порты, которые вы установили в вашей системе

Таким образом, для этого примера нам нужно будет обратить внимание только на уведомления, которые были добавлены с 11 декабря, касающиеся наших установленных портов. Если вы не знаете, какие порты установлены в вашей системе, вы можете использовать + portmaster + для создания полного списка:

portmaster -l
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2

. . .

Вывод будет разделен на разделы в соответствии с их зависимостями. Используйте эту информацию для сравнения с примечаниями ОБНОВЛЕНИЯ.

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

Проверка на известные уязвимости

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

FreeBSD поддерживает базу данных уязвимостей, которую вы можете проверить, чтобы увидеть, есть ли проблемы с безопасностью на любом из ваших портов или пакетов. Эта функциональность включена в инструмент + pkg +. Запустите аудит безопасности, набрав:

sudo pkg audit -F

Это позволит загрузить последнюю версию базы данных уязвимостей с серверов проекта FreeBSD. Затем он проверит версии всех установленных портов или пакетов и сравнит их с записями в базе данных безопасности.

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

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

Обновление установленных портов

После того, как вы позаботились о любых шагах, описанных в файлах ОБНОВЛЕНИЯ, вы можете обновить программное обеспечение.

Чтобы увидеть, какие порты имеют доступные обновления, вы можете использовать команду + portmaster + с флагом + -L +:

portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> dialog4ports-0.1.5_2
===>>> pkg-1.4.0
       ===>>> New version available: pkg-1.4.3
===>>> pkgconf-0.9.7
===>>> portmaster-3.17.7
===>>> rsync-3.1.1_3
===>>> 5 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> ca_root_nss-3.17.3_1
===>>> expat-2.1.0_2

. . .

===>>> 44 total installed ports
       ===>>> 4 have new versions available

Это обеспечивает вывод, аналогичный строчному варианту варианта, который мы использовали ранее, но также проверяет наличие доступных обновлений. Здесь мы видим, что порт + pkg + имеет новую доступную версию. Мы видим, что в общей сложности 4 порта имеют новые версии.

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

sudo make deinstall reinstall

Вы также можете выполнить то же самое с помощью команды + portmaster +. Вы должны указать категорию и имя порта. Например, чтобы обновить команду + wget +, мы могли бы набрать:

sudo portmaster ftp/wget

Вышеприведенная команда может также использоваться для установки портов. Многие пользователи из других областей считают, что + portmaster + является более знакомым опытом управления программным обеспечением, чем использование целей + make +, о которых мы говорили выше.

Хотя возможно обновить порты независимо, обычно лучше всего обновить все программное обеспечение сразу. Вы можете сделать это с помощью + portmaster +, используя флаг + -a +:

sudo portmaster -a

Это обновит все порты в системе до их последней версии. Любые новые параметры конфигурации будут представлены вам в начале процесса. Если у вас установлены какие-либо пакеты с + pkg + с более новыми версиями, доступными через систему портов, они также будут обновлены и перенесены на порты.

Заключение

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

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

Related