Программа удаленного распространения файлов (Remote File Distribution Program, rdist) задумывалась как средство сохранения идентичности файлов, хранимых на нескольких узлах.

Единственная команда rdist позволяет передать несколько различных файлов на ряд узлов. В основе действий команды лежат инструкции, хранимые в файле настройки rdist - Distfile.

Назначение Distfile аналогично назначению файла Makefile, используемого совместно с командой make, а синтаксис и структура этих файлов схожи. Стоп, без паники! Все не настолько плохо. Начальная настройка для команды rdist сложнее, чем простой синтаксис команды гср , однако rdist обеспечивает лучшее управление и в долгосрочной перспективе проще в сопровождении.

Файл Distfile состоит из макроопределений и примитивов. Макроопределению может быть назначено одно значение или список значений. Список значений заключается в скобки, например macro = (значение значение). После того как значение присвоено, можно обратиться к макроопределению, используя синтаксис ${macro}, где macro - имя макроопределения. Примитивы описаны в табл. 9.4.

Таблица 9.4. Примитивы rdist

Примитив Назначение
install Рекурсивно обновлять файлы и каталоги
notify address Передать почтовое сообщение, уведомляющее об ошибке или
состоянии, по указанному адресу (address)
except file Исключает указанный файл из обновления
except_pat pattern Исключает из обновления файлы, имена которых соот-
ветствуют шаблону (pattern)
special «command» Исполняет указанную команду после обновления каждого
файла

Проще всего понять, как сочетаются макроопределения и примитивы в рабочем файле Distfile, взглянув на пример. Следующий файл настройки распространяет текущую версию dhcpd и наиболее свежий файл настройки dhcpd.conf, копиру я их на удаленные серверы horseshoe, arthropod и limulus:

HOST S = ( horseshoe root@limulus arthropod ) 
FILES = ( /usr/sbin/dhcpd /etc/dhcpd.conf ) 
${FILES} -> ${H0STS} 
install ; 
notify сЭтот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Рассмотрим каждую из строк файла:


HOSTS = ( horseshoe root@limulus arthropod )

Эта строка содержит HOSTS , макроопределение, включающее имя каждого из удаленных серверов. Обратите внимание на запись, соответствующую узлу limulus. В ней содержится указание rdist выполнять обновление limulus в качестве пользователя root. На horseshoe и arthropod rdist выполняется с правами того пользователя, которому принадлежит на локальном узле.

FILES = ( /usr/sbin/dhcpd /etc/dhcpd.conf )

Макроопределение FILES перечисляет файлы, которые необходимо син- хронизировать.

${FXLES} -> ${H0STS}

Последовательность символов -> имеет специальное значение для rdist. Программа rdist должна скопировать файлы, перечисленные в левой части выражения, на узлы, перечисленные в правой части. В этом случае FILES - макроопределение, содержащие имена файлов /usr/sbin/dhcpd и /etc/dhcpd.conf, a HOST S - макроопределение, содержащее имена узлов horseshoe, limulus и arthropod. Таким образом, данная команда предписывает rdist скопировать два файла на три различных узла. Действие всех последующих примитивов распространяется на это отображение файлы-узлы.

install ;

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

notify Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Сообщения о состоянии и ошибках должны передаваться по электронной почте на адрес Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..

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

И последнее замечание: файл настройки не обязательно называть именем Distfile. В командной строке rdist при помощи ключа -f может указываться любое имя. Таким образом, приведенный выше файл можно сохранить под именем dhcp.dist и использовать в такой команде:

% rdist -f dhcp.dist