FreeBSD и твердотельные устройства
Пред. |  |

# 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

Пред. | Начало |
Построение установочной дискеты `kern.flp` с драйвером fla |  |

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

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