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

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-подобные механизмы, если применимо.
- Используйте блокировки пакетов для ключевых библиотек и сервисов перед крупными апгрейдами.
Политика обновлений для продакшена
- Тестовый стенд: прогоните pkg upgrade на тестовой системе.
- Бэкап базы пакетов и конфигураций: pkg backup и сохранение /usr/local/etc, /var/db/pkg и /var/cache/pkg.
- Выполнение обновления на узлах с мониторингом и планом отката.
- Откат — как правило, вернуть пакеты из резервного кэша или переустановить конкретную версию из локального репозитория.
Шаблон плана обновления для кластера
- Подготовка: обновить базу пакетов на центральном mirror-сервере.
- Canary-узел: выполнить pkg update && pkg upgrade на одном узле и мониторить 24 часа.
- Ролл-аут: обновление остальных узлов партиями по N штук.
- Валидация: прогон smoke-тестов и проверка логов.
Восстановление и инцидентный план
Если при обновлении что-то пошло не так:
- Не перезагружайте систему сразу, если сервисы ещё работают.
- Откатить пакет до версии, сохранённой в кеше или локальном репозитории:
# пример: установка конкретной версии из локального репозитория
pkg install nginx-1.14.2_3,2- Если база /var/db/pkg повреждена, восстановите её из резервной копии, сделанной заранее (pkg backup).
- В крайнем случае — переустановите пакет и восстановите конфигурации из бэкапа /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-методология управления пакетами
- Идентификация: найти нужный пакет через pkg search.
- Тестирование: установить пакет на staging.
- Бекап: сохранить состояние базы и конфигураций.
- Развёртывание: применить pkg install/upgrade на production поэтапно.
- Наблюдение: мониторить состояние сервисов и логи.
- Откат: использовать кэш, локальный репозиторий или 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 для безопасного развертывания.
Полезные ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента