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

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

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

### 5.1. cron

Во время загрузки содержимое каталогa `/var` формируется скриптом `/etc/rc.d/var` используя данные из `/etc/mtree/BSD.var.dist`, поэтому в нем создается несколько стандартных каталогов, в числе которых — `cron`, `cron/tabs`, `at`.

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

### 5.2. syslog

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

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

### 5.3. Установка портов

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

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

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

`#` `mkdir /etc/pkg`

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

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

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

### 5.4. Веб-сервер Apache

### Примечание:

Шаги, описанные в этой части статьи, необходимо выполнить лишь в том случае, если Apache настроен сохранять свой pid или лог файл вне каталога `/var`. С настройками по умолчанию Apache формирует свой pid файл в `/var/run/httpd.pid`, а лог файлы — в `/var/log`.

Далее в статье подразумевается, что Apache сохраняет свои лог файлы в каталог ``apache_log_dir`` вне каталога `/var`. Когда этот каталог расположен на файловой системе, смонтированной в режиме только для чтения, Apache не сможет сохранять лог файлы, что в свою очередь может вызывать проблемы в работе веб-сервера. В таком случае необходимо добавить новый каталог к списку каталогов из `/etc/rc.d/var` для их создания в каталоге `/var` и связать ``apache_log_dir`` с `/var/log/apache`. Нужно также задать права доступа и владельца нового каталога.

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

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

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

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

`#` `rm -rf ``apache_log_dir``` `#` `ln -s ``apache_log_dir```

Пред. |  |
4. Создание файловой системы с нуля | Начало |

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

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