Базовая поддержка сервера FreeBSD

При администрировании серверов FreeBSD важно понимать основные процедуры обслуживания, которые помогут сохранить систему в хорошем состоянии.

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

Читайте также: Начало работы с FreeBSD 10.1

Обновление базовой операционной системы FreeBSD

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

Примечание: В обновлениях бывают баги, о которых можно прочитать в конце этого раздела.

Чтобы запросить обновления системы на серверах проекта FreeBSD, загрузить все новые файлы и установить их, введите следующую команду:

sudo freebsd-update fetch install

Также вначале вам нужно установить sudo из портов или пакетов.

Команда freebsd-update – это утилита для управления программным обеспечением в базовой операционной системе. Подкоманда fetch загружает любые обновления, а подкоманда install применяет их к системе.

Когда обновления появляются, вы можете просмотреть список программного обеспечения, на которое влияет то или иное обновление. Прокручивать страницу можно с помощью стрелки вниз или пробела. Когда вы достигнете конца списка, обновления будут применены.

Затем необходимо перезапустить все программное обеспечение, которое было обновлено. При каких-либо обновлениях ядра потребуется перезагрузка для предотвращения непредвиденного поведения. Вы можете сделать это с помощью команды:

sudo shutdown -r now

Баги в обновлениях

На данный момент в процедуре обновления FreeBSD есть баг. Он приводит к зависанию системы при перезагрузке после процедуры обновления.

Чтобы избежать этого, отключите обновления или журналирование обновлений в файловой системе. В основе бага лежат sоft update, поэтому их отключение предотвратит зависание перезагрузки. Эта обширная процедура увеличит время восстановления, которое потребует ваш диск в будущем (пока вы не включите эти функции).

Для этого, прежде чем применять какие-либо обновления, откройте однопользовательский режим:

sudo nextboot -o "-s" -k kernel

Затем с помощью веб-консоли сервера откройте сессию оболочки и отключите sоft update или журналирование обновлений.

Чтобы отключить sоft update, введите:

tunefs -n disable /

Чтобы отключить журналирование, введите:

tunefs -j disable /

После этого можно начать перезагрузку и перезапустить сервер в многопользовательском режиме:

reboot

После загрузки можно извлечь и применить обновления FreeBSD, используя описанную выше процедуру без зависания перезагрузки.

Рекомендуем следить за списком багов.

Автоматизация проверки обновлений

Можно настроить в системе ежедневную автоматическую проверку патчей безопасности с помощью cron. Для этого у утилиты freebsd-update есть специальная подкоманда cron.

Команда приостанавливает работу на некоторое время (до часа), чтобы распределить нагрузку на сервер. Затем она проверяет наличие обновлений и загружает их (в основном, операция fetch проходит в фоновом режиме). Если обновления будут загружены, указанный пользователь будет уведомлен об этом. Обновления не устанавливаются автоматически, чтобы администратор мог сам принять решение.

Чтобы настроить автоматическую проверку обновлений, откройте /etc/crontab:

sudo vi /etc/crontab

В конец файла добавьте строку:

@daily root freebsd-update -t freebsd cron

Вышеприведенная команда автоматически запускает команду обновления от пользователя root. Если обновления обнаружены, пользователь, указанный после флага -t, будет уведомлен об этом.

Сохраните и закройте файл.

При следующем входе в учетную запись freebsd вы можете проверить свою почту:

mail

Если обновления были загружены, вы увидите что-то вроде:

Mail version 8.1 6/6/93.  Type ? for help.
"/var/mail/freebsd": 1 message 1 new
>N  1 freebsd@freebsdserver       Thu Dec 18 21:45 209/3997  "freebsdserver security updates"
&

Просмотреть список обновлений можно, введя номер сообщения, связанный с уведомлением.

1

Если вам подходят эти обновления, вы можете быстро установить их:

sudo freebsd-update install

Не забудьте перезагрузить компьютер после установки патчей ядра, а также перезапустить все сервисы, на которые повлияло обновление.

Синхронизация источников операционной системы

Синхронизация копии исходного кода FreeBSD с текущей системой – задача не менее важная, чем своевременное обновление программ. Это полезно по целому ряду причин. Некоторые порты требуют исходный код для правильной сборки; также исходный код можно использовать для отслеживания новых веток программного обеспечения.

Исходный код FreeBSD поддерживается в репозитории SVN. Если вам просто нужна самая современная версия исходного кода, вы можете использовать утилиту svnup для синхронизации вашей системы. Это намного быстрее, чем использовать subversion.

Чтобы установить пакет svnup, введите:

sudo pkg install svnup

Если вы предпочитаете использовать порты, введите:

cd /usr/ports/net/svnup
sudo make config-recursive install clean

После загрузки утилиты нужно немного отладить файл конфигурации. Откройте его с правами sudo в текстовом редакторе:

sudo vi /usr/local/etc/svnup.conf

Во-первых, нужно выбрать зеркало из предложенного списка. В конфигурационном файле есть несколько строк host =, все они закомментированы. Выберите то зеркало, которое, по вашему мнению, находится ближе и раскомментируйте его:

. . .
[defaults]
work_directory=/var/tmp/svnup
#host=svn.freebsd.org
#host=svn0.us-west.freebsd.org
host=svn0.us-east.freebsd.org
#host=svn0.eu.freebsd.org
. . .

Затем вы должны убедиться, что разделы файла, описывающие каждую ветку SVN, ссылаются на используемую вами версию релиза. Вы можете найти версию с помощью команды:

freebsd-version
10.1-RELEASE-p2

Эта команда сообщает о ветке операционной системы, а также о системном патче. Часть, на которую следует обратить внимание – это номер перед первым тире (10.1, как в данном примере). RELEASE означает, что в настоящее время система отслеживает наиболее стабильную ветку, доступную для FreeBSD.

Вернитесь в файл, убедитесь, что определение параметра branch= в разделе [release] содержит этот номер:

. . .
[release]
branch=base/releng/10.1
target=/usr/src
. . .

Это гарантирует, что вы загрузите правильный исходный код. Сохраните и закройте файл.

Теперь, поскольку вы отслеживаете ветку release, можно ввести:

sudo svnup release

Это загрузит самую последнюю версию дерево исходного кода в /usr/src. Вы можете обновить его в любое время, снова запустив эту команду.

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

sudo pkg install subversion

Если вы предпочитаете порты, введите:

cd /usr/ports/devel/subversion
sudo make config-recursive install clean

Работа команды subversion займет значительно больше времени. Она загружает не только текущую версию каждого файла в дереве, но и всю историю проекта.

Если вы ранее синхронизировали код с помощью инструмента svnup, нужно удалить исходное дерево, прежде чем проверить код с помощью subversion:

sudo rm -rf /usr/src

Подробные инструкции о работе с subversion выходят за рамки данного мануала. Но общая идея заключается в запуске команды checkout для одной из веток на любом из зеркал исходного кода FreeBSD.

Например, чтобы проверить тот исходный код, который вы использовали ранее с помощью команды svnup, можно ввести:

sudo svn checkout https://svn0.us-east.FreeBSD.org/base/releng/10.1 /usr/src

Обратите внимание, что URL-адрес этой команды в основном представляет собой комбинацию определений host= и branc = из конфигурационного файла svnup.

Обновление записи дополнительного программного обеспечения

FreeBSD предоставляет два разных формата для установки дополнительного программного обеспечения на ваш сервер. Первый формат – это система портов на основе исходного кода, а второй – хранилище предварительно скомпилированных пакетов на основе доступных портов. Для управления программным обеспечением, которое находится за пределами базовой операционной системы, используется ряд дополнительных инструментов.

Система хранит информацию о портах, которые можно установить, в иерархии каталогов /usr/ports. Эта структура каталогов называется деревом портов. Прежде чем применять порты, нужно убедиться, что в дереве портов есть обновленная информация о доступном программном обеспечении. Для этого можно использовать команду portsnap.

Синтаксис команды portsnap зеркально отображает команду freebsd-update в некотором роде. Иногда дерево портов предварительно заполнено исходной информацией о доступных портах, которую вы можете обновить.

Однако обычно каталог /usr/ports сначала пуст. Если это так, при первом использовании portsnap нужно запустить extract:

sudo portsnap fetch extract

Эта команда извлечет дерево портов и поместит его в /usr/ports. Это может занять некоторое время; также важно, чтоб до этого в /usr/ports не было другой информации.

Чтобы обновить информацию о доступных портах, используйте:

sudo portsnap fetch update

Этот процесс может занять немного времени в зависимости от того, как давно вы последний раз обновляли дерево портов. Команда загрузит огромное количество файлов для каждой доступной программы, которая была изменена с момента ее последнего запуска. Она заполнит иерархию /usr/ports информацией о портах.

Система пакетирования pkg также может использовать некоторую часть этой информации. Также она поддерживает собственную базу данных для отслеживания готовых бинарных пакетов, доступных для установки. Чтобы обновить эту БД, введите:

sudo pkg update

Это позволит вам получить последнюю информацию о базе данных пакетов с серверов проекта FreeBSD. Стоит отметить, что для многих операций pkg update выполняется автоматически как часть команды, поэтому как автономная команда она не всегда необходима.

Обновление дополнительного программного обеспечения

Теперь вы умеете применять обновления базовой операционной системы, обновлять исходный код системы и локальную информацию о доступных портах и пакетах.

Теперь можно использовать эту информацию о программном обеспечении для загрузки и применения обновлений дополнительного программного обеспечения. Процесс будет отличаться в зависимости от того, что вы используете – порты или пакеты. Если вы используете оба формата, вам может потребоваться дополнительное управление процессами.

Обнаружение обновлений программ

Для начала нужно определить, какие приложения можно обновить. Существует несколько способов сделать это.

Команда pkg

Если вы хотите сравнить программное обеспечение, установленное в текущей системе, с информацией о новейших доступных версиях, вы можете использовать подкоманду version pkg. Она показывает установленную версию и может отображать информацию о доступных версиях.

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

Узнать, обновлено ли программное обеспечение, можно с помощью команды:

pkg version -vIL=

Если в последнем индексном файле (ранее загруженном командой portsnap) есть ссылки на новую версию любого программного обеспечения, в выводе команды вы найдете список несоответствий. Например:

perl5-5.18.4_10                    <   needs updating (index has 5.18.4_11)

При проверке установленное в системе программное обеспечение сравнивается с последним индексом в дереве портов. Иногда обновления появляются в дереве портов, но еще не доступны в пакетах. Это происходит потому, что пакеты основаны на дереве портов и часто немного отстают.

Потому вышеуказанная команда может показывать обновления, которые пока еще не доступны в пакетах. Чтобы определить эти экземпляры, вы можете сравнить вывод указанной выше команды с выводом этой команды:

pkg version -vRL=

Эта команда проверяет наличие новых версий в базе данных pkg (вместо индексного файла в дереве портов). Если две команды производят один и тот же вывод, вы можете обновить любые пакеты с помощью pkg.

Если в первой команде есть обновления, которые не отображаются во второй команде, это означает, что изменения еще не были перемещены из дерева портов в пакеты. Если вы используете пакеты программного обеспечения, которое хотите обновить, вы можете либо дождаться выхода пакета, либо получить последнее обновление из портов.

Команда portmaster

Если вы чаще собираете программное обеспечение из исходного кода с помощью портов, привлекательной альтернативой для вас будет команда portmaster. Этот инструмент полезен для любых задач управления ПО из портов во FreeBSD, от проверки и загрузки обновлений до установки или удаления портов и всех их зависимостей.

Чтобы получить команду portmaster, вы можете либо установить пакет, либо скомпилировать его из системы портов.

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

sudo pkg install portmaster

Если вы хотите скомпилировать ее из портов, перейдите в каталог пакетов дереве портов и введите:

cd /usr/ports/ports-mgmt/portmaster
sudo make install clean

После установки вы можете увидеть сообщение о добавлении новой информации в файл /etc/make.conf и изменении базы данных пакетов. Это не обязательно случится, если вы используете FreeBSD 10.1 или новее.

После того, как вы установили portmaster, вы можете проверить наличие обновлений:

portmaster -L

Команда изучит все программное обеспечение, установленное в текущей системе, и сравните его с индексным файлом, чтобы узнать, доступны ли новые версии. Так же, как и команда pkg, эта команда выводит обновления независимо от того, как было установлено программное обеспечение (с помощью портов или пакетов). Она классифицирует программное обеспечение на основе того, как оно связано с другим программным обеспечением с точки зрения зависимостей.

Любое программное обеспечение, имеющее доступные обновления, будет выражено строкой с отступом:

===>>> perl5-5.18.4_10
===>>> New version available: perl5-5.18.4_11

В конце команда выведет общее количество обновлений:

===>>> 42 total installed ports
===>>> 1 has a new version available

Поскольку portmaster работает в основном с портами, все обнаруженные обновления должны быть доступны.

Проверка уязвимости программного обеспечения

FreeBSD поддерживает базу данных уязвимостей, которую нужно регулярно проверять, чтобы убедиться, что в программном обеспечении вашей системы нет уязвимостей.

Иногда бывает полезно обновлять все программное обеспечение в системе, но программы с обнаруженными уязвимостями нужно обновлять как можно чаще. Чтобы проверить известные уязвимости программ, установленных в текущей системе, введите:

pkg audit -F

Эта команда загрузит последнюю базу данных уязвимостей с серверов FreeBSD и проверит ее на наличие установленного в этой системе программного обеспечения. Если в вашем программном обеспечении существуют какие-либо уязвимости, команда предупредит вас.

Проверка примечаний UPDATING

Перед обновлением какого-либо программного обеспечения важно проверить наличие каких-либо ошибок, которые могут возникнуть в результате обновления. Разработчики портов FreeBSD иногда вносят изменения, которые не могут быть применены без вмешательства пользователя. Если вы не будете проверять эту информацию, сервер будет использовать нерабочее программное обеспечение и потенциально испорченную систему.

В каталоге /usr/ports в файле UPDATING содержится информация о любых обновлениях программного обеспечения, которые могут иметь неожиданные результаты. Чтобы прочитать этот файл, введите:

less /usr/ports/UPDATING

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

This file documents some of the problems you may encounter when upgrading
your ports.  We try our best to minimize these disruptions, but sometimes
they are unavoidable.
You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.
20141208:
AFFECTS: users of ports-mgmt/poudriere, ports-mgmt/poudriere-devel
AUTHOR: bdrewery@FreeBSD.org
8.4 jails created with Poudriere 3.1, or poudriere-devel-3.0.99.20141117
should be recreated with 'jail -d' and 'jail -c'. This fixes pkg(8)
crashes.
20141205:
AFFECTS: users of polish/kadu
AUTHOR: pawel@FreeBSD.org
Before running kadu 1.x for the first time upstream developers
advise to backup your ~/.kadu directory.
. . .

Следует регулярно проверять этот файл на наличие новых записей о проблемах с обновлением. Поскольку этот файл содержит большой объем ненужной информации (которая либо не касается программного обеспечения, установленного в вашей системе, либо описывает проблему предыдущего обновления), обычно нужно проверять только записи ближе к началу файла.

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

Обновление портов и пакетов

После выполнения рекомендованных в файле UPDATING действий нужно обновить программное обеспечение. Методы будут зависеть от того, что вы используете – предварительно скомпилированные пакеты или исходные порты.

Если вы в основном используете пакеты и хотите использовать этот формат для обновления, вы можете ввести такую команду:

sudo pkg upgrade

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

Тут есть один важный нюанс: если вы устанавливаете программы как из пакетов, так и из портов, команда может попытаться переустановить программное обеспечение, установленное с помощью системы портов. Это может произойти, если вы скомпилировали приложение с различными пользовательскими параметрами, требующими разных зависимостей и т. д.

Такой сценарий выглядит так:

freebsd@wowie:~ % sudo pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
Checking for upgrades (2 candidates): 100%
Processing candidates (2 candidates): 100%
The following 1 packages will be affected (of 0 checked):
Installed packages to be REINSTALLED:
portmaster-3.17.7 (options changed)
The operation will free 1 KB.
40 KB to be downloaded.
Proceed with this action? [y/N]:

В этом случае команда portmaster была установлена через систему портов, но команда pkg пытается привести ее в соответствие с версией, о которой она знает. Если вы хотите сохранить пользовательскую версию программы, вы можете нажать «N» для этой операции, а затем заблокировать пакет:

sudo pkg lock portmaster

Это предотвратит обновление этой программы, что позволит вам обновить остальную часть программного обеспечения с помощью команды pkg upgrade. Если вы хотите обновить заблокированное программное обеспечение, вы можете временно разблокировать его:

sudo pkg unlock portmaster

Если для поддержки пакетов вы в основном используете portmaster и порты, вы можете обновить все программное обеспечение с помощью команды:

sudo portmaster -a

Будет предложено выбрать параметры для портов, которые нужно обновить. Если вы не знаете, что означает какой-либо из параметров, или если у вас нет какой-либо конкретной причины менять эти параметры, можно использовать значения по умолчанию.

Если вы используете portmaster до обновления пакетов, из-за задержки обновлений между портами и пакетами есть вероятность, что некоторое программы, установленные из пакетов, попробуют обновиться из портов. Если это не проблема, вы можете использовать этот метод. Если вы предпочитаете использовать пакеты, вероятно, лучше подождать, пока обновление появится в скомпилированном пакете.

Также можно обновить определенный пакет, указав его категорию и имя в дереве портов:

sudo portmaster category/portname

К примеру, чтобы обновить порт vim-lite, нужно ввести:

sudo portmaster editors/vim-lite

Заключение

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

Некоторые из них (например, обновление исходного кода базовой системы) не нужно выполнять часто, а некоторые другие задачи (обновление базовой операционной системы и обновление программного обеспечения с уязвимостями) нужно выполнять регулярно. Поддержка системы сначала может показаться сложным делом, но когда вы познакомитесь с необходимыми инструментами, вы будете легко справляться со всеми необходимыми задачами.

Читайте также:

Tags: