Введение
FreeBSD — полноценная операционная система класса UNIX, а не дистрибутив. В отличие от Linux-экосистемы, где система собирается из множества независимых проектов (ядро, coreutils, systemd, glibc — всё от разных команд), FreeBSD разрабатывается как единый инженерный продукт: ядро, системные утилиты, init-система, библиотеки и документация создаются, версионируются и тестируются совместно.
Это определяет ключевые свойства системы: предсказуемость поведения, архитектурная чистота, стабильность под нагрузкой и строгое разделение системного и пользовательского слоёв.
Архитектура системы
Base System
Базовая система (base system) включает ядро, драйверы, системные библиотеки, init, shell (/bin/sh — ash-совместимый), системные утилиты и rc-службы. Все компоненты синхронизированы по версиям и обновляются атомарно. Текущую версию базовой системы можно проверить через freebsd-version.
Принципиальное отличие от Linux: в FreeBSD нет понятия «дистрибутив» — есть одна система с одним деревом исходников (/usr/src), из которого собирается всё, от ядра до ls.
Ports и Packages
FreeBSD архитектурно разделяет системный и пользовательский слой:
| Слой | Назначение | Расположение |
|---|---|---|
| Base | сама операционная система | /, /usr |
| Ports | сборка программ из исходников | /usr/ports |
| Packages | готовые бинарные пакеты | /usr/local |
Сторонний софт устанавливается в /usr/local (бинарники, библиотеки, конфиги), системные файлы остаются в /. Это разграничение позволяет обновлять base system независимо от приложений и наоборот — фундаментальный архитектурный выбор, которого в большинстве Linux-дистрибутивов нет.
Ports — это дерево Makefile'ов с патчами и метаданными для сборки из исходников с возможностью выбора опций (make config). Packages — бинарные пакеты, собранные из тех же портов с дефолтными опциями. Для большинства задач достаточно pkg, порты нужны когда требуется специфическая конфигурация сборки.
Философия
Linux-подход — система как конструктор: выбираешь ядро, init-систему, набор утилит, пакетный менеджер. FreeBSD-подход — система как инструмент: всё уже собрано, протестировано и задокументировано как единое целое.
FreeBSD не пытается скрыть устройство системы. Она предполагает, что администратор понимает, что делает, и ценит минимализм, прозрачность, контроль и воспроизводимость поведения. Практически любой компонент системы можно изучить на уровне исходного кода — это не декларация, а реальная практика: исходники base system доступны в /usr/src, а документация (Handbook) считается эталоном системной документации в UNIX-мире.
Модель релизов консервативна: новые функции внедряются только после тщательного тестирования. Ветка RELEASE — это production-ready система, STABLE — промежуточная с бэкпортами, CURRENT — development.
Управление системой
Конфигурация
Вся настройка централизована в текстовых файлах. Основные системные конфиги: /etc/rc.conf (главный — включение сервисов, сетевые настройки, параметры загрузки), /etc/sysctl.conf (параметры ядра), /etc/fstab, /etc/hosts. Конфигурации стороннего софта лежат в /usr/local/etc/ — это следствие архитектурного разделения base/packages.
Сервисы (rc-система)
Система служб основана на классической rc-модели. Скрипты лежат в /etc/rc.d/ (системные) и /usr/local/etc/rc.d/ (из пакетов). Управление:
service nginx start
service sshd restart
sysrc nginx_enable=YES # включение сервиса (редактирует rc.conf)
В rc.d есть механизм зависимостей через директивы REQUIRE/BEFORE/AFTER в скриптах, но он значительно проще systemd — нет сокет-активации, нет cgroups-интеграции, нет параллельного запуска по умолчанию. Всё реализовано через shell-скрипты, что делает систему полностью прозрачной и отлаживаемой.
Логи
Основной системный журнал — /var/log/messages. Ротация настраивается через newsyslog.conf. Нет journald — используется классический syslog (syslogd).
Ключевые подсистемы
Jails
Jails — встроенный механизм контейнеризации, появившийся в FreeBSD 4.x (2000 год), задолго до Docker и LXC. Jail — это изолированное окружение с собственной файловой системой, сетевым стеком, пользователями и процессами, работающее на том же ядре.
В отличие от Linux-контейнеров, jails не требуют дополнительных инструментов — это часть base system. Управление через jail(8), конфигурация в /etc/jail.conf. Для удобства существуют надстройки: bastille, cbsd, pot.
Типичные сценарии: изоляция сервисов, мультитенантный хостинг, тестовые окружения, сборочные среды.
UFS (Unix File System)
UFS2 — историческая и до сих пор поддерживаемая файловая система FreeBSD, используемая по умолчанию при установке без ZFS. Включает soft updates (механизм обеспечения целостности метаданных без журналирования, с меньшим overhead'ом чем классический journaling) и опциональное journaling через SUJ (Soft Updates Journaling) для ускорения fsck после сбоя.
Главное преимущество UFS перед ZFS — минимальные требования к ресурсам. ZFS активно использует ARC (Adaptive Replacement Cache) и при малом объёме RAM (1–2 ГБ и менее) может создавать memory pressure, что на VPS с ограниченной памятью приводит к деградации. UFS работает стабильно даже на 256–512 МБ RAM, что делает её разумным выбором для лёгких VPS и embedded-сценариев.
Чего нет в UFS по сравнению с ZFS: нет контрольных сумм данных (silent data corruption не детектируется), нет copy-on-write, нет встроенного сжатия и дедупликации, нет boot environments. Снапшоты есть и они встроенные — mksnap_ffs(8) часть base, — но устроены заметно примитивнее ZFS-овских. Разметка через gpart, управление через стандартные newfs, tunefs, mount.
Trade-off прост: UFS — для ресурсо-ограниченных или простых сценариев, ZFS — когда важны целостность данных, снапшоты и гибкость управления хранилищем, но при наличии достаточной RAM (минимум 4 ГБ, комфортно от 8 ГБ).
Все цифры памяти в этом разделе — ориентир из практики, а не документированное требование, и стоит читать их именно так. Ни Handbook, ни zfs(8) минимума RAM для ZFS не задают вовсе; единственный порог, который вообще есть в документации, — предупреждение инсталлятора при hw.physmem меньше примерно 200 МиБ («At least 256 MiB is recommended»), и относится оно к установке через пакетный base, а не к выбору между UFS и ZFS. Порядок величин практикой подтверждается, первоисточником — нет.
ZFS
FreeBSD — одна из лучших платформ для ZFS (наряду с illumos-производными). ZFS интегрирован в base system начиная с FreeBSD 7.0. Рекомендуемой файловой системой проект её при этом не объявляет: Handbook перечисляет Auto (ZFS), Auto (UFS), Manual и Shell как равноправные варианты разметки, а bsdinstall(8) про свой интерактивный разметчик пишет прямо противоположное — «autopart — … Defaults to UFS».
Ключевые возможности: copy-on-write, снапшоты, встроенное сжатие, checksumming, RAID-Z (программный RAID без аппаратного контроллера), boot environments (загрузочные окружения — позволяют откатить систему после неудачного обновления).
Управление через zpool и zfs. Boot environments управляются через bectl.
DTrace
DTrace — фреймворк динамической трассировки, портированный из Solaris. Позволяет инструментировать работающее ядро и пользовательские процессы без перезапуска и без заметного overhead'а в отсутствие активных проб.
Полезен для диагностики производительности, отладки сетевого стека, анализа I/O-паттернов. В Linux аналогичную нишу занимают eBPF/bpftrace, но DTrace во FreeBSD — зрелый и стабильный инструмент, доступный из коробки.
Управление пакетами
Основной инструмент — pkg. Базовые операции:
pkg update # обновление индекса репозитория
pkg install <package> # установка
pkg upgrade # обновление всех пакетов
pkg info # список установленных
pkg search <name> # поиск
pkg audit # проверка уязвимостей
Обновление системы
FreeBSD разделяет обновление base system и пакетов — это принципиально.
Обновление базовой системы бинарными патчами:
freebsd-update fetch install
Граница применимости freebsd-update проходит не по имени ветки, а по тому, что Release Engineering выпускает в бинарном виде: обновления собираются для ALPHA, BETA, RC и RELEASE и не собираются для PRERELEASE, STABLE и CURRENT.
Для веток без бинарных обновлений остаётся пересборка из исходников (make buildworld, make installworld) — но это уже не единственный путь: пакеты base публикуются и для активных веток STABLE и CURRENT, причём для веток разработки — дважды в сутки.
Начиная с 15.0 у base появился второй способ: система ставится и обновляется как набор пакетов с именами FreeBSD-* из отдельного репозитория FreeBSD-base (исторически этот подход называют pkgbase), и bsdinstall при установке спрашивает, какой метод использовать — традиционные дистрибутивные наборы или пакеты. В 15.0 pkgbase заявлен как technology preview, и в 15.1 (текущий production-релиз, 15.0 переведён в legacy) статус тот же: дистрибутивные наборы остаются умолчанием установочных образов всей серии 15.x. freebsd-update и дистрибутивные наборы поддерживаются на всём цикле stable/15, а убрать их планируют в 16.0.
pkg upgrade -r FreeBSD-base # обновление base на системе, установленной через pkgbase
Два способа не сочетаются, и это не рекомендация, а проверка в коде: обнаружив пакетный base, freebsd-update печатает «freebsd-update is incompatible with the use of packaged base» и завершается с кодом 1. Так что путей обновления base сейчас три — бинарные патчи, пакеты и сборка из исходников, — и на конкретной системе действует ровно один.
Обновление пакетов:
pkg upgrade
При использовании ZFS перед обновлением рекомендуется создать boot environment (bectl create pre-upgrade) — это даёт возможность откатиться при проблемах.
Структура файловой системы
| Путь | Назначение |
|---|---|
/ |
базовая система |
/usr |
пользовательские программы base system |
/usr/local |
сторонний софт (из pkg/ports) |
/usr/src |
исходники base system |
/usr/ports |
дерево портов |
/etc |
конфиги системы |
/usr/local/etc |
конфиги пакетов |
/var |
runtime-данные и логи |
/boot |
загрузчик и ядро |
Базовые инструменты администратора
| Утилита | Назначение |
|---|---|
ifconfig |
настройка сетевых интерфейсов |
route |
управление таблицей маршрутизации |
netstat |
статистика сети и соединений |
sockstat |
просмотр открытых сокетов |
systat |
интерактивный мониторинг (сеть, I/O, VM) |
top |
мониторинг процессов |
ps |
список процессов |
service |
управление службами |
sysrc |
редактирование rc.conf |
sysctl |
параметры ядра |
kldload |
загрузка модулей ядра |
kldstat |
список загруженных модулей |
dmesg |
сообщения ядра |
pkg |
управление пакетами |
bectl |
boot environments (ZFS) |
Преимущества
FreeBSD особенно сильна в серверных и сетевых задачах: стабильная работа под нагрузкой, один из лучших сетевых стеков среди open-source ОС (исторически TCP/IP-стек FreeBSD был эталонной реализацией), первоклассная поддержка ZFS, встроенная контейнеризация через jails, строгая и предсказуемая архитектура.
Ограничения
Поддержка оборудования уже от Linux — особенно это касается новейших GPU, Wi-Fi-чипов и периферии ноутбуков. Меньше десктоп-ориентированного софта, хотя существует Linux binary compatibility layer (linuxulator), позволяющий запускать Linux-бинарники. Порог входа выше: система предполагает осознанное администрирование. Экосистема контейнеров и оркестрации (Docker, Kubernetes) ориентирована на Linux — это основной практический барьер для многих сценариев.
Оптимальные сценарии использования
Серверы, сетевые сервисы (DNS, почта, прокси), firewall/маршрутизация (pf — один из лучших пакетных фильтров), storage-системы (ZFS + NFS/iSCSI/Samba), jail-based хостинг, лабораторные и инфраструктурные среды.
Рекомендуемый порядок изучения
Файловая структура и навигация → rc-система и управление сервисами → сеть (ifconfig, pf, routing) → pkg и порты → sysctl и конфигурация ядра → jails → ZFS → DTrace.
Читать всё это лучше по FreeBSD Handbook — он покрывает каждый пункт списка и написан как учебник, а не как справочник.
Источники
freebsd-base(7)— pkgbase: именаFreeBSD-*, репозиторийFreeBSD-base,pkg upgrade -r FreeBSD-base, наборыFreeBSD-set-*, публикация для STABLE и CURRENT; HISTORY — поддержка появилась в 15.0: man.freebsd.org/cgi/man.cgi?query=freebsd-base&sektion=7freebsd-update(8)— BINARY UPDATES AVAILABILITY: для каких веток бинарные обновления собираются: man.freebsd.org/cgi/man.cgi?query=freebsd-update&sektion=8- Исходник
freebsd-update.sh, ветка releng/15.1 — взаимоисключениеfreebsd-updateи пакетного base: cgit.freebsd.org/src/plain/usr.sbin/freebsd-update/freebsd-update.sh?h=releng/15.1 - FreeBSD 15.0-RELEASE Announcement — pkgbase как technology preview, удаление дистрибутивных наборов в 16.0 с сохранением на весь цикл stable/15: freebsd.org/releases/15.0R/announce/
- FreeBSD Handbook, Chapter 2 "Installing FreeBSD" — два способа установки начиная с 15.0, дистрибутивные наборы как умолчание в 15.x, варианты разметки: docs.freebsd.org/en/books/handbook/bsdinstall/
- FreeBSD Handbook, Chapter 27 "Updating and Upgrading FreeBSD" — pkgbase как tech preview с 15.0 и планы замены
freebsd-update: docs.freebsd.org/en/books/handbook/cutting-edge/ bsdinstall(8)—autopartпо умолчанию выбирает UFS: man.freebsd.org/cgi/man.cgi?query=bsdinstall&sektion=8jail(8)— HISTORY: jail появился в FreeBSD 4.0, конфигурационный файл в 9.1: man.freebsd.org/cgi/man.cgi?query=jail&sektion=8sh(1)— AUTHORS: происхождение/bin/shот ash: man.freebsd.org/cgi/man.cgi?query=sh&sektion=1freebsd-version(1)— раздельные версии ядра и userland: man.freebsd.org/cgi/man.cgi?query=freebsd-version&sektion=1hier(7)—/usr/local,/usr/ports,/usr/srcи разделение base и local: man.freebsd.org/cgi/man.cgi?query=hier&sektion=7tunefs(8)— soft updates journaling и его влияние на времяfsck: man.freebsd.org/cgi/man.cgi?query=tunefs&sektion=8mksnap_ffs(8)— снапшоты UFS: man.freebsd.org/cgi/man.cgi?query=mksnap_ffs&sektion=8rc.conf(5)— параллельного запуска служб по умолчанию нет,jail_parallel_startвключается явно: man.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5- FreeBSD 7.0-RELEASE Release Notes — ZFS добавлен в 7.0: freebsd.org/releases/7.0R/relnotes/
- FreeBSD Release Information — модель релизов и текущий статус веток: freebsd.org/releases/
Связанные заметки
- FreeBSD — файловая структура — следующая статья цикла: как организована иерархия каталогов
- FreeBSD — сводный cheatsheet — карта всех статей цикла и быстрая справка по командам
- FreeBSD — обновление системы — механизм обновлений base system и пакетов
- FreeBSD VPS: Honeypot — практический сценарий на реальном сервере
- sudo vs doas — утилиты повышения привилегий, doas родом из OpenBSD
- Магия как метафора: язык и культура Unix — откуда взялся демон-маскот и остальной словарь Unix
- Загрузка: от питания до первой инструкции ядра — механизм загрузки на трёх архитектурах, с трёхступенчатой цепочкой FreeBSD в сравнении
Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.
Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.