Управление пакетами в FreeBSD 14
В FreeBSD бывает два способа установки и управления приложениями через порты или пакеты. Утилита pkg используется для управления пакетами в FreeBSD. В статье будут показаны основные команды pkg утилиты и рассказано как установить и удалить программы и сервисы через пакеты, обновить все установленные пакеты за раз.
Смешивать в системе установку через порты и пакеты не рекомендуется. Если ты используешь для установки порты, то обновляй приложения через порты. В статье рассказывается про пакеты и утилиту pkg, а как обновлять через порты читай: https://notby.net/obnovlenie-vsekh-ustanovlennykh-portov-freebsd
1. Установка pkg
Если пакетный менеджер pkg еще не установлен, то устанавливаем его
pkg
Соглашаемся с тем что пакетный менеджер будет установлен.
Пакетный менеджер успешно установлен.
2. Выбор Latest ветки обновления
Этот раздел можешь пропустить если тебе не нужна ветка последних пакетов, а ты используешь стандартную стабильную ветку.
По умолчанию пакеты в FreeBSD используют Quarterly (квартальную) ветку обновлений. Это означает что пакеты обновлятся раз в квартал. Если появляется проблема с безопасностью в пакете, обновление приходит раньше.
Существует еще Latest (последняя) ветка. В этой ветке всегда свежие версии программ и сервисов, по мере их сборки после появления в коллекции портов FreeBSD. Ветка Latest может незначительно отставать от портов FreeBSD.
Я привык использовать порты, а что-то тяжелое ставить из пакетов. И что бы версии что в портах и пакетах были одинаковые я использую Latest ветку.
Перейдем на Latest ветку пакетов.
Создаем директорию для пользовательского файла конфигурации pkg
mkdir -p /usr/local/etc/pkg/repos
Скопируем файл конфигурации
cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf
Отредактируем файл /usr/local/etc/pkg/repos/FreeBSD.conf
nano /usr/local/etc/pkg/repos/FreeBSD.conf
Заменим в файле quarterly на latest
После изменения необходимо обязательно обновить репозиторий пакетов. Параметр -f сделают полную загрузка репозитория пакетов.
pkg update -f
3. Обновление установленных пакетов
Обновляем репозиторий пакетов
pkg update
Обновляем все установленные пакеты
pkg upgrade
Будет показано доступные пакеты для обновления и установка новых пакетов если это необходимо.
Соглашаемся если все корректно, дожидаемся окончания обновления пакетов.
4. Список установленных пакетов
Просмотрим список установленных пакетов
pkg info
Выведем список пакетов относящихся к PHP
pkg info | grep php
Посмотрим информацию про конкретный пакет, например php82.
pkg info php82
Будет выведена подробная версии и информация о пакете, параметры сборки порта в пакеты, дата установки и так далее.
5. Поиск пакета в репозитории
Чтобы найти пакет в репозитории и доступные его версии для установки используем команду
pkg search mariadb
Выполнится поиск доступных пакетов и их версий с именем mariadb
6. Установка пакета
Устанавливаем пакет. Для примера установим nano.
pkg install nano
Также будут установлены необходимые пакеты если они нужны. Для nano дополнительные пакеты не требуются.
Текстовый редактор nano успешно установлен.
Если пакет имеет несколько версий, необходимо прямо указывать версию пакета. В предыдущем разделе искали доступные версии mariadb. Сервер MariaDB имеет несколько версии для установки. Например, для установки сервера MariaDB версии 10.6.* необходимо будет использовать mariadb106-server в запросе установке
pkg install mariadb106-server
7. Удаление пакета
Для удаления пакета используем команду, где nginx - имя удаляемого пакета
pkg remove nginx
Если удаляемый пакет является зависимостью для других пакетов, то будет выведен список удаляемых пакетов вместе с этим пакетом. Nginx не является для других пакетом зависимостью, поэтому удален только он будет.
8. Блокировка и разблокировка пакета
Пакет можно заблокировать чтобы он не обновлялся при автоматическом обновлении всех пакетов. Это удобно если несколько приложений собираются из портов с необходимыми опциями.
Заблокируем например пакет php82 от любых действий с ним
pkg lock php82
Так же не будет возможности обновить php82 через порты пока заблокирован пакет.
Разблокируем пакет php82
pkg unlock php82
Список всех заблокированный портов в системе
pkg lock -l
Я обновляю почти все через пакеты, так как это быстрее. Nginx и PHP у меня собираются с нужными мне опциями из портов. Я поступаю следующим образом: обновляю все пакеты через pkg, затем разблокирую пакеты Nginx и PHP, обновляю их через сборку из портов, вновь блокирую их чтобы случайно не обновить.
Это получается некий костыль, но я как то к этому привык и проблем у меня с этим не возникает. В комментариях в соцсетях под постом с этой статьей можешь оставить комментарий как это можно оптимизировать, если это возможно.
Если используется много приложений через порты, то логично отказатся от пакетов совсем.
9. Удаление неиспользуемых пакетов
После удаления пакетов, могут оставатся пакеты зависимости которые были необходимы для работы удаленного пакета.
Удалим все неиспользуемые пакеты
pkg autoremove
Будут удалены все неиспользуемые пакеты.
Если что-то собиралось из портов, то для сборки были собраны autoconf, automake, gmake и другие утилиты. Для пакетного менеджера они не являются зависимостями для других пакетов и небыли явно установлены в систему.
Чтобы утилиты для сборки портов не удалялись, необходимо их пометить как не автоматически установленные пакеты
pkg set -A 0 devel/autoconf devel/automake devel/gmake
Пакеты autoconf, automake, gmake были помечены как установленные пакеты, и теперь они не будет удалятся по команде pkg autoremove
.
Список пакетов которые явно установленные (не как необходимые зависимости) можно посмотреть командой
pkg prime-list
После удаления неиспользованных пакетов, очистим старые установочные файлы
pkg clean
Будет выведен список старых установочных файлов для удаления и суммарный объем который будет освобожден после их удаления.
Чтобы удалить установочные файлы пакетов которые сейчас установлены в систему, добавляем параметра -a к команде
pkg clean -a
Если в системе мало место на диске, периодически выполняй очистку от установочных файлов.