Софт FreeBSD

В процессе написания все то что планировал вложить в одну статью будет разбито на три, вот так неожиданно…
Как ставить, откуда ставить, как обновлять. Эти и другие вопросы я попытаюсь сегодня описать.
Я думаю вы в курсе, что есть два самых распространенных способа поставить во Фре порты и пакеты.
Как делать свой мейк будет в другой статье:)

Порты:
У Фри есть дерево портов(/usr/ports/), именно из портов я и ставлю софт
В папке портов, кроме самого дерева портов можно найти и вот такие файлики:
CHANGES перечислены изменения, произведенные в инфраструктуре «портов» FreeBSD.
COPYRIGHT содержит информацию о лицензировании для коллекции «портов» в целом.
GIDs содержит перечень всех числовых групповых идентификаторов (GID), используемых программным обеспечением в коллекции «портов». чтобы избежать путаницы и порты не использовали одну и туже учетку для разных целей
KNOBS содержит перечень всех параметров настройки, доступных в коллекции «портов».
LEGAL можно увидеть список всех правовых ограничений в программном обеспечении, включенном в коллекцию «портов».
MOVED находится список «портов», которые были перемещены из одной категории в другую.
Makefile содержит высокоуровневые инструкции для всей коллекции «портов» в целом.
Mk/ содержит подробные низкоуровневые инструкции для всей коллекции портов в целом.
README содержит описание верхнего уровня организации коллекции «портов».
Templates/ содержит заготовки файлов, используемые другими разделами коллекции портов
Tools/ содержит программы, сценарии и другие средства автоматизации, которые в основном используются разработчиками «портов».
UIDs содержит перечень всех числовых идентификаторов пользователей (UID), используемых программным обеспечением в
коллекции «портов».
UPDATING содержит примечания, используемые при обновлении программного обеспечения.
distfiles/ содержит исходный код программного обеспечения, устанавливаемого из «портов».
/usr/ports/INDEX-7 содержит список всех «портов» в алфавитном порядке.

B-deps перечислены зависимости, то есть программное обеспечение, которое должно быть установлено до выполнения сборки этого «порта».
E-deps список компонентов с помощью которых порт должен быть предварительно разархивирован
P-deps перечислены все зависимости, необходимые для наложения исправлений, — изредка исправления должны накладываться с помощью определенных инструментов.
F-deps определяет зависимости получения (fetch dependencies), то есть специальное программное обеспечение, с помощью которого должен загружаться исходный код программы.

Чтобы быть в курсе новинок портостроения
http://www. freebsd.org/cgi/ports.cgi.
http://www.freshports.com.

Сразу после инсталяции обновите порты:
# portsnap fetch extract

Для обновления портов к актуальному(на текущий день) состоянию используют конструкцию
# portsnap fetch update

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

# whereis lsof
lsof: /usr/ports/sysutils/lsof

Более глубокий поиск по портам:

# cd /usr/ports/
# make search name=links
# make search key=security

# make search key=mc | more
Port:   mcplay-0.3.i
Path:   /usr/ports/audio/mcplay
Info:   A curses based front-end to various audioplayers
Maint:  [email protected]
B-deps: glib-1.2.10_13 pkg-config-0.25_1
R-deps: glib-1.2.10_13 pkg-config-0.25_1
WWW:    http://www.yahuxo.de/mcplay/

Отличие этих двух команд в том, что name ищет только в названии порта, а key в именах портов, комментариях, описаниях и зависимостях
«B-deps» — это зависимости для построения,
«R-deps» — зависимости для запуска приложения.

Компиляция и установка приложений из дерева портов:

# cd /usr/ports/www/lynx/
# make install clean
# rehash (если используете csh)

Если хотим собрать список всех установленных портов с зависимостями итд, ссылки на справочные материалы и это все в одной html то нужно выполнить в папке /usr/ports/

# make readmes

Каждый раз делая make install clean мы не задумываемся как наша ОС выполняет кучу рутинной работы, предлагаю посмотреть:
make config — задание или изменение текущих настроек
make fetch После настройки «порта» система отыскивает предопределенный список сайтов Интернета, откуда можно получить исходный код.
make checksum подтверждает, что цифровая подпись файла distfile соответствует подписи из файла distinfo «порта».
make extract развертывает и извлекает скачанный код.
make patch накладывает на исходный код в рабочем каталоге все заплатки, имеющиеся в составе «порта».
make depends проверяется зависимость «порта» от любых других программ.
make configure проверяет необходимость запуска сценария configure. Это отдельный этап, отличный от make config.
make build происходит компиляция проверенного, извлеченного и исправленного программного кода.
make install устанавливается программа, а ее наличие регистрируется в /var/db/pkg.

Полезные опции make (выполнять, находясь в директории порта):
# make showconfig — показать текущие опции сборки порта
# make rmconfig — удалить все текущие настройки для порта
# make showconfig-recursive — показать настройки для текущего порта и всех зависимостей
# make config-recursive — задать настройки для текущего порта и всех зависимостей
# make rmconfig-recursive — удалить настройки для текущего порта и всех зависимостей
# make config-conditional — пропустить задание опций для портов, у которых уже были заданы требуемые опции.
# make print-index — удобный для чтения индекс.

С добавлением опций из make файла, недоступны через конфиг.
make WITH_DEBUG=1 install
make deinstall удаление порта
make reinstall выполняет повторную установку порта
make clean очистка собранного порта
make distclean удалит ненужные distfiles текущего «порта» вместе со всеми зависимостями.
Для очистки всего дерева «портов» запустите make clean -DNOCLEANDEPENDS прямо в /usr/ports.
# make PREFIX=/usr/pkg install clean PREFIX установка в указанный каталог
Добавляем в /etc/make.conf переменную WITH_MYSQL=YES и тогда все порты будут по умолчанию собираться с поддержкой MySQL

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

# cd /usr/ports/www/lynx
# make package­recursive clean
или
# make package

Когда Вы делаете make package, происходят две вещи. Во-первых, создается пакет и помещается в /usr/ports/packages. Во-вторых, на локальной машине устанавливается этот порт, если он еще не был установлен. Если Вам не нужно это приложение, после создания пакета
просто наберите make deinstall.

Утилита pkg_add установка ПО из пакетов
# pkg_add /usr/ports/packages/All/lynx­X.X.X.tbz -Установка пакетов с локального сервера
# pkg_add ­-r clamav Установка пакетов с удаленного сервера
# pkg_add -K mc не удалять загруженные пакеты

Утилита pkg_info показать список дополнительно установленных пакетов
# pkg_info — список всего установленного стороннего софта
-r имя_пакета — показать пакеты необходимые данному
-R имя_пакета — показать пакеты которые зависят от данного
-W абсолютное_имя_файла — показать пакет которому принадлежит файл
-x — если не помните версию софта:)
-d — длинное описание (по умолчанию)
-с — короткое описание в одну строчку
-D — выводит послеустановочные сообщения(как иногда этого не хватает)
-s — сколько места занимает установленный порт
-a — все пакеты
-L — выводит полный путь для каждого файла, который был установлен для приложения:

% pkg_info -xL lynx | more
Information for lynx-2.8.4.1d:

Files:
/usr/local/man/man1/lynx.1.gz
/usr/local/bin/lynx
/usr/local/etc/lynx.cfg.default
/usr/local/share/doc/lynx/CHANGES

Утилита pkg_version проверка статуса установленных портов

Покажет алфавитный список приложений, установленных в системе. При
этом каждое приложение следует за одним из трёх символов:

* =: свежее приложение;
* <: уже есть более новая версия приложения; * >: вам надо обновить индекс.

Так, чтобы определить какие приложения требуют модернизации:
% pkg_version -l «<" Выведет устаревшие приложения % pkg_version -L "=" % pkg_version -v | more подробный отчет Утилита Portupgrade обновления установленных портов
portupgrade libgmp — обновление конкретного порта
-a обновит все порты установленные в системе
-R проверит зависимости для установки,
-r проверит приложения, которые зависят от порта.
-F сначала скачивает все что нужно, потом собираем
-l ведет лог
-n подробно пишет что будет делать
-i перед каждым действием будет спрашивать вашего решения

Иногда может потребоваться запуск pkgdb — обновляет базу данных пакетов.
Эта база данных находится в /var/db/pkg/pkgdb.db.
-F — исправляет базу
-fu — без участия человека примет решение как лучше исправить базу портов
-a -то что можно безопасно исправить, применяется с -F

Утилита pkg_which (или pkgdb) используется для определения, какому приложению принадлежит файл.
-o покажет из какой категории в дереве портов, наше приложение
-v имя приложения и следующее за ней через : имя порта, который установил это приложение.

Обычный which показывает путь к исполняемому файлу
$ which pkgdb
/usr/local/sbin/pkgdb

pkg_which скажет мне какому приложению принадлежит файл:
$ pkg_which pkgdb
portupgrade-20030723
или
$ pkgdb pkgdb
portupgrade-20030723

Также можно посмотреть и в обратном порядке, покажет какой программе принадлежит файл:
$ cd /usr/local/bin
$ pkg_which *yaf*
kdemultimedia-3.1.3

Утилита Portmaster
Использует только структуру самих портов, без дополнительных надстроек или использования сторонних языков. С помощью нее можно обновлять, часть или все порты.
portmaster libgmp — обновление конкретного порта
-­L Сравнение версии установленного ПО с версиями в дереве портов
-e Удаление пакета и нужных только ему пакетов
­-a Проверка всех портов и обновление по мере необходимости.
-f Обязательная пересборка пакета
­­—force­config Выполнить команду ‘make config’ для всех портов (перекрывается -G)
-о замена одного порта на другой
-r проверка как зависящих так и зависимых портов
—- clean-distfiles, поиск устаревших дистфайлов
—- clean-distfiles-all, молча удалит все устаревшие дистфайлы

Утилита Portaudit проверяет уязвимость портов
/usr/ports/ports-mgmt/portaudit
Эта прога не висит в памяти, а запускается как бинарник в удобное время
В случае обнареженя уязвимости при запуски из periodic на рутовую почту шлется письмо.
portaudit -a -выводит отчет об уязвимости установленных портов.если че,ругается примерно так: Affected package: png-1.2.18
portaudit -C -выводит отчет об уязвимости порта, находящегося в текущей директории.В основн,для разработчиков
portaudit -F -скачиваем последнюю базу по портам (там всего-ничего)
portaudit -q — «тихий» режим
portaudit -d — смотрим,когда последний раз качалась база по портам
portaudit -V — покажет свою версию
portaudit -v — Verbose mode
portaudit -X days — загружает базу,если она старше «days»
portaudit -f — проверка пакетов,описанных(перечисленных) в файле
portaudit <пакет> — информация по дырам в конкретном пакете
Также portaudit не дает устанавливать порты,версия которых младше текущей.
Порт можно скомпилить даж с уязвимостями ,если указать в /etc/make.conf

DISABLE_VULNERABILITIES=yes

Список установленных пакетов находиться: /var/db/pkg/
В каждой папке из списка будут находиться такие файлы:
+COMMENT содержит краткое описание пакета,
+DESC более подробное описание.
+MTREE DIRS содержит описание пакета в формате mtree(l).
+CONTENTS, в котором перечислены все файлы, установленные пакетом, все пакеты зависимостей и все инструкции по удалению пакета.
Опционально:
+IGN0REME создав файл мы приказываем Portmaster пропустить порт при обновлении:)

Удаление происходит с помощью:
# pkg_delete
-f — принудительное удаление(даже если есть зависимости)
или
# cd /usr/ports/cat/portdir
# make deinstall

Литература:
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/ports-finding-applications.html
http://www.none.com.ua/freebsd/freebsd-tips-configurirovanie-portov/
http://i-rrv.ru/portmaster-шпаргалка-по-ключам/
http://www.lissyara.su/articles/freebsd/security/portaudit/

Комментарии: