Программа удаленного распространения файлов (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