Руководство FreeBSD

         

Обновление в ручном режиме


Однако если вы хотите произвести обновление вручную, то вы не можете просто скопировать файлы из /usr/src/etc в /etc и получить работающую систему. Некоторые из этих файлов сначала нужно ``установить''. Это нужно потому, что каталог /usr/src/etc не является копией того, что должен содержать ваш каталог /etc. Кроме того, есть файлы, которые должны присутствовать в /etc, но которых нет в /usr/src/etc.

Если вы используете mergemaster(8) (как это рекомендуется), то вы можете перейти сразу к следующему разделу.

Вручную проще всего сделать это, установив файлы в новый каталог, а затем пройтись по ним, отмечая разницу.

Сделайте резервную копию вашего каталога /etc: Хотя, в теории, никаких автоматических действий с этим каталогом не производится, всегда лучше чувствовать себя уверенным. Так что скопируйте имеющийся каталог /etc в какое-нибудь безопасное место. Запустите что-то вроде:

# cp -Rp /etc /etc.old

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

Вам нужно создать шаблонную структуру каталогов для установки нового содержимого /etc и других файлов. Подходящим местом является /var/tmp/root, и в нём потребуется разместить некоторое количество подкаталогов.

# mkdir /var/tmp/root

# cd /usr/src/etc

# make DESTDIR=/var/tmp/root distrib-dirs distribution

Эти команды приведут к созданию нужной структуры каталогов и установке файлов. Множество каталогов, созданных в /var/tmp/root, будут пустыми и должны быть удалены. Проще всего сделать это так:

# cd /var/tmp/root

# find -d . -type d | xargs rmdir 2>/dev/null



Эти команды удалят все пустые каталоги. (Стандартный поток диагностических сообщений перенаправляется в /dev/null для исключения предупреждений о непустых каталогах.)

Теперь /var/tmp/root содержит все файлы, которые должны быть помещены в соответствующие места в /. Теперь пройдитесь по каждому их этих файлов и определите, чем они отличаются от имеющихся у вас файлов.

Заметьте, что некоторые из файлов, которые были установлены в каталог /var/tmp/root, имеют первым символом ``.''.
На момент написания единственными такими файлами являлись файлы начальных скриптов командных процессоров в /var/tmp/root/ и /var/tmp/root/root/, хотя могут быть и другие (зависит от того, когда вы это читаете). Обязательно пользуйтесь командой ls -a, чтобы выявить их.

Проще всего сделать это путём сравнения двух файлов при помощи команды diff(1):

# diff /etc/shells /var/tmp/root/etc/shells

Эта команда покажет разницу между вашим файлом /etc/shells и новым файлом /var/tmp/root/etc/shells. Используйте это для определения того, переносить ли сделанные вами изменения или скопировать поверх вашего старого файла.

Называйте новый корневой каталог (/var/tmp/root) по дате, чтобы вы смогли легко выявить разницу между версиями: Частое перестроение системы означает также и частое обновление /etc, которое может быть несколько обременительным.

Вы можете ускорить этот процесс, сохраняя копию последнего набора измененных файлов, которые вы перенесли в /etc. Следующая процедура подаст вам одну идею о том, как это сделать.

Выполните перестроение системы обычным образом. Когда вы вам потребуется обновить /etc и другие каталоги, дайте целевому каталогу имя на основе текущей даты. Если вы делаете это 14 февраля 1998 года, то вы можете сделать следующее:

# mkdir /var/tmp/root-19980214

# cd /usr/src/etc

# make DESTDIR=/var/tmp/root-19980214 \ distrib-dirs distribution

Перенесите изменение из этого каталога, как это описано выше.

Не удаляйте каталог /var/tmp/root-19980214 после окончания этого процесса.

Когда вы загрузите самую последнюю версию исходного кода и перестроите систему, выполните шаг 1. Это даст вам новый каталог, который может называться /var/tmp/root-19980221 (если вы ждете неделю между обновлениями).

Теперь вы можете видеть изменения, которые были сделаны за прошедшую неделю, выполнив при помощи команды diff(1) рекурсивное сравнение двух каталогов:

# cd /var/tmp

# diff -r root-19980214 root-19980221

Как правило, здесь содержится гораздо меньше отличий, чем между каталогами /var/tmp/root-19980221/etc и /etc.Так как отличий меньше, то и легче перенести эти изменения в ваш каталог /etc.

Теперь вы можете удалить более старый из двух каталогов /var/tmp/root-*:

# rm -rf /var/tmp/root-19980214

Повторяйте этот процесс всякий раз, когда вам нужно перенести изменения в каталог /etc.

Для автоматической генерации имён каталогов можно использовать команду date(1):

# mkdir /var/tmp/root-`date "+%Y%m%d"`


Содержание раздела