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

В Разд. 3 было указано, что файловая система /var, создаваемая скриптом /etc/rc.diskless2 и наличие корневой файловой системы, доступной только для чтения, приводят к проблемам при работе многих распространенных программных пакетов, используемых во FreeBSD. В этой статье будут даны рекомендации по настройке нормальной работы cron и syslog, установке портов и веб-сервера Apache.

6.1. cron

В файле /etc/rc.diskless2 имеется переменная var_dirs. Эта переменная задает список каталогов, разделенных запятыми, которые будут созданы в каталоге /var после его монтирования как файловой системы в памяти. cron и cron/tabs в этот список не входят, а без этих каталогов cron нормально работать не будет. Включив cron, cron/tabs и, может быть, даже at и at/jobs в качестве элементов этой переменной, вы обеспечите работу даемонов cron(8) и at(1).

Однако это все же не решит проблему с сохранением cron-таблиц между перезагрузками. Когда система перезагружается, то файловая система /var, которая располагается в памяти, будет уничтожена, вместе со всеми cron-таблицами, которые вы могли там иметь. Поэтому одним из решений может стать создание cron-таблиц для пользователей, которым они нужны, монтирование вашей файловой системы / в режиме чтения и записи и копирование этих cron-таблиц в безопасное место, например, /etc/tabs и последующее добавление строки в конец скрипта /etc/rc.diskless2 для копирования этих cron-таблиц в каталог /var/cron/tabs после его создания во время инициализации системы. Вам может также потребоваться добавить строку, которая изменяет режимы доступа и права на каталоги, которые вы создали и на файлы, которые вы скопировали в скрипте /etc/rc.diskless2.

6.2. syslog

В файле syslog.conf задано местоположение некоторых файлов протоколов, которые имеются в каталоге /var/log. Эти файлы не создаются скриптом /etc/rc.diskless2 во время инициализации системы Поэтому где-нибудь в скрипте /etc/rc.diskless2, после секции, создающей каталоги в /var, вам нужно добавить нечто вроде следующего:

# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*
  

Вам также потребуется добавить каталог с протоколами работы к списку каталогов, создаваемых скриптом /etc/rc.diskless2.

6.3. Установка портов

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

Чтобы можно было войти в каталог с портами и успешно выполнить команду make install, необходимо наличие файла /var/db/port.mkversion, в котором записана правильная дата. Затем мы должны создать каталог для пакаджей в файловой системе, не располагающейся в памяти, где будут храниться пакаджи между перезагрузками. Так как для установки пакаджа в любом случае требуется монтирование ваших файловых систем для чтения и записи, имеет смысл выделить область флэш-носителя также и для записи информации о пакадже.

Прежде всего создайте каталог с базой данных о пакаджах. Обычно это каталог /var/db/pkg, но мы не можем разместить базу именно здесь, так как она исчезнет после перезагрузки системы.

# mkdir /etc/pkg

Теперь в скрипт /etc/rc.diskless2 добавьте строку, которая связывает каталог /etc/pkg с /var/db/pkg. Например:

# ln -s /etc/pkg /var/db/pkg
  

Добавьте в скрипт /etc/rc.diskless2 еще одну строку, которая создает и копирует /var/db/port.mkversion

# touch /var/db/port.mkversion
# chmod 0644 /var/db/port.mkversion
# echo 20010412 >> /var/db/port.mkversion
  

где 20010412 является датой, соответствующей вашей версии FreeBSD.

Теперь каждый раз при монтировании ваших файловых систем для чтения и записи и установки пакаджа, команда make install будет работать, потому что найдет подходящий файл /var/db/port.mkversion, а информация о пакадже будет успешно записана в каталог /etc/pkg (так как файловая система будут в это время смонтирована для чтения и записи), который всегда будет доступным операционной системе как /var/db/pkg.

6.4. Веб-сервер Apache

Apache хранит pid-файлы и протоколы в каталоге apache_install/logs. Так как этот каталог, без сомнения, располагается на файловой системе, доступной только для чтения, то это работать не будет. Необходимо добавить новый каталог к списку каталогов из /etc/rc.diskless2 для их создания в каталоге /var и связать apache_install/logs с /var/log/apache. Нужно также задать права доступа и владельца нового каталога.

Сначала добавьте каталог log/apache к списку каталогов, создаваемых скриптом /etc/rc.diskless2.

Затем добавьте в скрипт /etc/rc.diskless2 после секции создания каталогов такие команды:

# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache
  

И наконец, удалите существующий каталог apache_install/logs и замените его ссылкой:

# rm -rf (apache_install)/logs
# ln -s /var/log/apache (apache_install)/logs
  

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.

Обновлено: 12.03.2015