Гид по технологиям

Управление пакетами в FreeBSD с помощью pkg

• 8 min read • Системное администрирование • Обновлено 23 Nov 2025
Управление пакетами FreeBSD через pkg
Управление пакетами FreeBSD через pkg

Иллюстрация логотипа FreeBSD с демоном Beasti на фоне

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

В этом руководстве разъяснены практики работы с бинарными пакетами через pkg на FreeBSD 12. Большая часть материала применима и к FreeBSD 11. Мы рассмотрим не только базовые команды, но и рекомендации для продакшен-серверов, сценарии отката, безопасность и миграцию.

Кому пригодится это руководство

  • Системным администраторам, которые администрируют FreeBSD-серверы.
  • DevOps-инженерам, внедряющим пакеты в автоматизированные пайплайны.
  • Тем, кто переходит с Linux и хочет быстро освоить pkg.

В одном предложении: pkg — это инструмент управления пакетами для FreeBSD, который делает установку, обновление и аудит бинарных пакетов простым и детерминированным.

Пререквизиты

  • FreeBSD 12 (или совместимая версия)
  • Доступ root или sudo
  • Подключение к интернету для работы с публичными репозиториями (если не используете локальный репозиторий)

Основные понятия одним предложением

  • Ports — система сборки из исходников; позволяет тонкую настройку опций при компиляции.
  • Packages — предсобранные бинарные пакеты, готовые к быстрой установке; управляются утилитой pkg.
  • Репозиторий — коллекция пакетов, доступная по сети или локально.

Почему pkg

pkg — это современный менеджер пакетов для FreeBSD. Он заменил старые утилиты и ввёл единый способ управления бинарными пакетами: хранение метаданных в SQLite, кэширование пакетов, поддержку репозиториев и гибкую конфигурацию.

Важно: пакеты устанавливают файлы обычно под /usr/local, а конфигурации часто располагаются в /usr/local/etc, а не в /etc.

Быстрая навигация по разделам

  • Установка и удаление пакетов
  • Поиск и информация о пакетах
  • Кэширование пакетов и управление хранилищем
  • Конфигурация pkg и репозитории
  • Блокировка версий и политика обновлений
  • Рекомендации по безопасности и восстановлению
  • Практические SOP и чеклисты для ролей

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

При первом запуске установки pkg может предложить самоустановиться. Пример установки пакета acme.sh:

pkg install acme.sh

Чтобы не отвечать на запрос подтверждения, добавьте флаг -y:

pkg install -y acme.sh

Удаление пакета:

pkg delete acme.sh

Альтернативная форма удаления:

pkg remove acme.sh

Все операции с пакетами выполняются от root или через sudo.

Установка pkg

На свежей системе FreeBSD утилита pkg может быть не установлена; при первой установке пакета система предложит подтянуть pkg автоматически. Вы также можете явным образом инициализировать систему пакетов:

pkg bootstrap

Это редко нужно вручную — обычно автоматический процесс удобнее.

Поиск пакетов

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

pkg search apache

# apache24-2.4.38  Version 2.4.x of Apache web server

Для подробного вывода используйте флаг -R:

pkg search -R apache24

Пример полного вывода информации о пакете:

# name: "apache24"
# origin: "www/apache24"
# version: "2.4.38"
# comment: "Version 2.4.x of Apache web server"
# maintainer: "[email protected]"
# www: "https://httpd.apache.org/"
# abi: "FreeBSD:12:amd64"
# arch: "freebsd:12:x86:64"
# prefix: "/usr/local"

Эта информация помогает выбрать нужный пакет среди похожих по имени.

Установка пакета и кэширование

pkg скачивает пакеты из репозитория (по умолчанию pkg.FreeBSD.org), затем регистрирует установленные пакеты в базе SQLite: /var/db/pkg/local.sqlite. Не удаляйте этот файл вручную — потеря базы осложнит отслеживание установленных пакетов.

Если вы хотите скачать пакет без установки — используйте pkg fetch:

pkg fetch nginx

По умолчанию fetch скачивает только сам пакет. С опцией -d будут скачаны зависимости:

pkg fetch -d nginx

Кэш пакетов находится в /var/cache/pkg. После выполнения fetch файлы остаются в этом каталоге. Очистка кэша:

pkg clean
pkg clean -a      # удалить всё
pkg clean -y      # ответить утвердительно автоматически

Можно настроить автоматическую очистку, установив в конфигурации AUTOCLEAN = true.

Просмотр установленных пакетов

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

pkg info

Подробная информация о пакете:

pkg info nginx

Вы увидите версию, дату установки, лицензию, зависимости и другие метаданные.

Обновление и апгрейд

Обновление индекса репозиториев:

pkg update

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

pkg upgrade

Если нужно посмотреть, какие пакеты требуют обновления, используйте pkg version или pkg upgrade -n для «сухой прогона».

Автоматическое удаление неиспользуемых зависимостей

pkg умеет удалять пакеты, установленные как зависимости и больше не используемые:

pkg autoremove

Это важно для удержания системы в чистоте и экономии дискового пространства.

Блокировка пакетов

Чтобы запретить обновление либо удаление пакета, используйте lock:

pkg lock openssl
pkg lock -l         # список заблокированных пакетов
pkg unlock openssl
pkg lock -a         # заблокировать все
pkg unlock -a       # снять блок со всех

Блокировка применяет те же правила и к зависимостям, поэтому будьте внимательны при массовых операциях.

Репозитории и конфигурация

Конфигурация репозиториев располагается в /etc/pkg и /usr/local/etc/pkg/repos. По умолчанию включён репозиторий FreeBSD, конфигурация находится в /etc/pkg/FreeBSD.conf. Пример записи репозитория:

FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

Если вы хотите хранить свои конфигурации отдельно, создайте каталог /usr/local/etc/pkg/repos и поместите туда файлы UCL. Для указания альтернативного каталога используйте REPO_DIRS в /usr/local/etc/pkg.conf.

Пример базового pkg.conf с несколькими важными опциями:

# /usr/local/etc/pkg.conf
PKG_DBDIR = "/var/db/pkg";
PKG_CACHEDIR = "/var/cache/pkg";
# INDEXDIR = "/var/db/pkg";
# DEFAULT_ALWAYS_YES = false;
# ASSUME_ALWAYS_YES = false;
REPO_DIRS = "/usr/local/etc/pkg/repos";
AUTOCLEAN = true;

Для изучения всех опций смотрите man pkg.conf.

Часто используемые команды-подсказки

# Установить пакет без вопросов
pkg install -y package

# Бекап локальной базы пакетов
pkg backup

# Список всех установленных пакетов
pkg info

# Информация о пакете
pkg info package

# Поиск пакета в репозитории
pkg search -i package

# Показать пакеты с известными уязвимостями
pkg audit -F

# Узнать, какому пакету принадлежит файл
pkg which /usr/local/bin/nginx

# Удалить неиспользуемые автоматические зависимости
pkg autoremove

# Очистить кэш полностью
pkg clean -ay

# Обновить локальный каталог пакетов
pkg update

# Обновить все установленные пакеты
pkg upgrade

# Проверка целостности всех пакетов
pkg check -saq

# Проверить, не менялись ли файлы пакета
pkg check -s nginx

# Показать файлы, установленные пакетом
pkg info -l nginx

# Список пакетов, помеченных как ручные
pkg prime-list

Когда использовать ports вместо packages

  • Когда требуется специфичная конфигурация сборки или нерегулярные опции компиляции.
  • Когда пакет недоступен в бинарном виде для вашей архитектуры.

Против использования ports:

  • Сборка из портов занимает время и требует инструментов компиляции.
  • Поддержка унифицированных обновлений сложнее, чем для бинарных пакетов.

Рекомендация: использовать pkg по умолчанию; переходить на ports только при необходимости изменения compile-time опций.

Советы по безопасности и целостности

  • Регулярно запускать pkg audit для обнаружения уязвимостей:
pkg audit -F
  • Подписывайте локальные репозитории и храните fingerprints в защищённом месте.
  • Контролируйте доступ к /var/db/pkg и /usr/local/etc/pkg через права и SELinux-подобные механизмы, если применимо.
  • Используйте блокировки пакетов для ключевых библиотек и сервисов перед крупными апгрейдами.

Политика обновлений для продакшена

  1. Тестовый стенд: прогоните pkg upgrade на тестовой системе.
  2. Бэкап базы пакетов и конфигураций: pkg backup и сохранение /usr/local/etc, /var/db/pkg и /var/cache/pkg.
  3. Выполнение обновления на узлах с мониторингом и планом отката.
  4. Откат — как правило, вернуть пакеты из резервного кэша или переустановить конкретную версию из локального репозитория.

Шаблон плана обновления для кластера

  1. Подготовка: обновить базу пакетов на центральном mirror-сервере.
  2. Canary-узел: выполнить pkg update && pkg upgrade на одном узле и мониторить 24 часа.
  3. Ролл-аут: обновление остальных узлов партиями по N штук.
  4. Валидация: прогон smoke-тестов и проверка логов.

Восстановление и инцидентный план

Если при обновлении что-то пошло не так:

  1. Не перезагружайте систему сразу, если сервисы ещё работают.
  2. Откатить пакет до версии, сохранённой в кеше или локальном репозитории:
# пример: установка конкретной версии из локального репозитория
pkg install nginx-1.14.2_3,2
  1. Если база /var/db/pkg повреждена, восстановите её из резервной копии, сделанной заранее (pkg backup).
  2. В крайнем случае — переустановите пакет и восстановите конфигурации из бэкапа /usr/local/etc.

Чеклисты для ролей

Системный администратор:

  • Иметь доступ root/sudo.
  • Иметь актуальные бэкапы /usr/local/etc и /var/db/pkg.
  • Выполнять pkg update и pkg audit регулярно.
  • Блокировать критические пакеты перед обновлениями.

DevOps-инженер:

  • Интегрировать pkg в CI/CD: кеширование пакетов, локальные репозитории.
  • Тестировать обновления на staging перед roll-out.
  • Автоматизировать pkg backup и очистку кэша.

Разработчик приложений:

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

Mini-методология управления пакетами

  1. Идентификация: найти нужный пакет через pkg search.
  2. Тестирование: установить пакет на staging.
  3. Бекап: сохранить состояние базы и конфигураций.
  4. Развёртывание: применить pkg install/upgrade на production поэтапно.
  5. Наблюдение: мониторить состояние сервисов и логи.
  6. Откат: использовать кэш, локальный репозиторий или restore из бэкапа.

Примеры конфигураций и шаблонов

Простой файл репозитория /usr/local/etc/pkg/repos/local.conf:

local: {
  url: "file:///usr/local/pkgrepo",
  enabled: yes
}

Пример pkg.conf для автоматической очистки и кастомного каталога репо:

# /usr/local/etc/pkg.conf
PKG_CACHEDIR = "/var/cache/pkg";
REPO_DIRS = "/usr/local/etc/pkg/repos";
AUTOCLEAN = true;
ASSUME_ALWAYS_YES = false;

Совместимость и миграция между версиями FreeBSD

  • ABI помечается как FreeBSD:<версия>:<архитектура> — пересмотрите abi-параметр при смене мажорной версии.
  • При миграции между FreeBSD 11 и 12: проверяйте зависимости и ABI; возможно, потребуется пересборка некоторых пакетов из портов.
  • Для кластеров с разными версиями OS держите отдельные репозитории.

Контроль качества и тесты приёмки

Критерии приёмки после установки/обновления пакета:

  • Сервис стартует и проходит smoke-тесты.
  • Логи не содержат ошибок > error за первые 10 минут.
  • Инструменты мониторинга показывают нормальное потребление памяти и CPU.

Тестовые сценарии:

  • Установка из нуля на чистой VM.
  • Установка с уже существующими зависимостями и проверка автоматической замены.
  • Обновление до новой версии и выполнение rollback.

Частые ошибки и способы их устранения

Проблема: конфликт версий библиотек

  • Решение: заблокировать пакет lib и установить совместимую версию требуемого пакета.

Проблема: повреждён /var/db/pkg/local.sqlite

  • Решение: восстановить из bkp /var/db/pkg/backup или выполнить pkg backup до применения изменений.

Проблема: нехватка места в /var/cache/pkg

  • Решение: очистить кэш pkg clean -a и настроить AUTOCLEAN=true.

Security hardening для pkg

  • Ограничьте права на /usr/local/etc/pkg и /var/db/pkg только необходимым учеткам.
  • Подпишите собственные репозитории и проверьте fingerprints.
  • Используйте разделение ролей: автоматизация обновлений должна выполняться от сервисного аккаунта с минимальными правами.

Decision flowchart для принятия решения установить пакет или собрать из ports

flowchart TD
  A[Нужна ли специальная опция сборки?] -->|Да| B[Использовать ports]
  A -->|Нет| C[Имеется бинарный пакет для архитектуры?]
  C -->|Да| D[Использовать pkg]
  C -->|Нет| B
  B --> E[Сборка из ports и создание локального пакета]
  D --> F[Установка и проверка]

Риск-матрица при обновлениях

  • Низкий риск: патчевые версии библиотек без изменений ABI — допускается автоматический roll-out.
  • Средний риск: новые мажорные версии приложений — тестировать на staging и canary.
  • Высокий риск: критические системные библиотеки (libc, openssl) — обновления только после бекапа и плана отката.

Короткое объявление для команды (100–200 слов)

В ближайшее время мы обновляем политику управления пакетами на FreeBSD. Компания переходит к стандартизированному использованию pkg и централизованному локальному репозиторию для бинарных пакетов. Это ускорит установки и упростит откат в случае проблем. Перед любым массовым обновлением выполняйте pkg backup и проверку на staging. Для критических сервисов обязателен canary-процесс: обновление одного узла и мониторинг 24 часа. Подробный SOP и чеклисты опубликованы в общем репозитории документации.

Социальный превью для публикации

OG title: Управление пакетами FreeBSD с помощью pkg OG description: Полное руководство по pkg: установка, обновления, репозитории, безопасность и playbook для продакшенов.

Заключение

FreeBSD предлагает гибкий и мощный подход к установке программного обеспечения: порты для случаев, когда нужна компиляция, и pkg — для быстрой и стандартизированной работы с бинарными пакетами. Для повседневного администрирования и автоматизации используйте pkg: он экономит время, даёт средства для аудита и интеграции с CI/CD. Сохраняйте резервные копии базы пакетов и конфигураций, тестируйте апгрейды, и применяйте описанные в статье чеклисты и SOP для безопасного развертывания.

Полезные ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро