НАЗВАНИЕ
uucp-files - Описание управляющих файлов UUCP
СПИСОК ФАЙЛОВ
Файлы в /usr/lib/uucp (в скобках вариант BSD)
ОПИСАНИЕ
Настройка системы UUCP осуществляется с помощью управляющих файлов. Они условно делятся на несколько частей:
ЛОКАЛЬНОЕ ИМЯ СИСТЕМЫ
Имя вашей системы UUCP ищет в таком порядке:
ОБЩИЕ ПРАВИЛА
Все управляющие файлы пишутся по общим правилам.
Строки, начинающиеся с '#', игнорируются (в них пишутся
комментарии). Символ '\' в конце строки означает, что
информация продожается на следующей строке. Пустые
строки, как правило, игнорируются. Заготовки всех файлов содержатся в дистрибутиве (справочник UUAIDS) и
содержат подробный комментарий.
Далее в именах файлов опущено начало "/usr/lib/uucp".
ФАЙЛ Systems
Файл /usr/lib/uucp/Systems (L.sys) описывает ВСЕ
известные системе UUCP имена. Каждая строка в нем
содержит следующие поля, разделенные пробелами:
Файл Systems используется для проверки, известна ли машина системе UUCP, и для исходящих вызовов других машин. Подробное описание и примеры приведены ниже.
ФАЙЛ USERFILE
Этот файл описывает права доступа разных машин к тем
или иным справочникам, а также их право на выполнение
команд того или иного класса (см. ниже L.cmds), и соответствие между именем входа (login-name) и именем
машины. Строки в нем имеют формат:
login-name,uucp-name [-Xкласс] [список_справочников]где пара login-name и uucp-name определяет допустимость появления машины 'uucp-name' под именем 'login-name', 'класс' определяет максимальный класс разрешенных команд, 'список_справочников' определяет те справочники, доступ к которым разрешен машине 'uucp-name'.
Кроме того, в этом файле могут быть такие записи:
,local список_справочниковопределяет список справочников, которые могут указываться в команде 'uucp' выполняемой любым локальным пользователем,
login-name,local список_справочниковопределяет, какие справочники может читать/писать локальный пользователь 'login-name' с помошью UUCP,
any, список_справочниковопределяет права произвольной машины (по умолчанию).
ФАЙЛЫ Dialcodes и L.aliases
Файл 'Dialcodes' (L-dialcodes в варианте BSD) содержит
символьные обозначения номеров телефонов, например:
MOSCOW 8=812
Файл 'L.aliases' содержит описание псевдонимов, что позволяет вместо одной UUCP машины ссылаться на другую. Например:
demos fuug
означает, что все, что предназначено для 'fuug', надо отправлять на demos. (Пример взят с kiae!, на котором иностранные письма маршрутизировались на 'fuug', но, так как с 'fuug' работал 'demos', реально посылались на 'demos').
uustartup
Это программа, которая вызывается после успешного соединения c удаленной машиной, с единственным аргументом
- именем этой машины. Она пишется администратором системы UUCP в случае, если необходимо сбросить какие то
буфера (например, batchmail). Например, на 'kiae!' эта
программа на 'csh' имеет вид:
#! /bin/csh -f if ( $1 == demos ) then batchmail -f fuug endif batchmail -f $1
ОПИСАНИЕ МАШИНЫ, ВЫЗЫВАЮЩЕЙ ЛОКАЛЬНУЮ
Для того, чтобы другая система могла общаться с вашим
UUCP, вызывая его по телефону, прямой линии или TCP/IP,
она должна быть описана в файлах "Systems" (L.sys) и
"USERFILE".
Прежде всего, для машины 'uucp-name' заводится имя пользователя, пароль, а в качестве shell-a устанавливается /usr/lib/uucp/uucico. Например, в /etc/passwd соответствующая запись может иметь вид:
uualex:xcsSGAKWYFG:5:5:alex.kiae.su:/usr/spool/uucp:/usr/lib/uucp/uucicoМашина 'имя' заводится в /usr/lib/uucp/Systems (L.sys). Формат описания:
имя incomingВ /usr/lib/uucp/USERFILE пишется строка:
login-name,имя [-Xкласс] список_справочников
Если параметр -X. опущен, считается, что данная система может выполнять команды класс '0'.
Если файл L.cmds уже заведен ранее, и содержит описание всех необходимых команд, то на этом заведение машины 'имя' кончается.
ОПИСАНИЕ УСТРОЙСТВ ВЫЗОВА
Если ваша система должна вызвывать другие машины сама,
то прежде всего необходимо описать все устройства,
которые используются для вызова. В случае TCP/IP такое
описание не требуется, терминальные линии же описывают
в файле /usr/lib/uucp/Devices (L-devices). Каждая
запись этого файла имет вид:
Caller Line Useful Class Dialer [Chat ...]где
Dialer [-xN] номер:опции /dev/линия скоростьи должна возвращать стандартные коды ответа, описанные в диалере 'gdial'.
Атрибуты модема трактуются произвольно, но рекомендуется использовать хотя бы следующие:
DIR tty31 - 19200 vax ACU tty01 - IAE9600,Om Disco2400-MNP
ОПИСАНИЕ ВЫЗЫВАЕМОЙ МАШИНЫ
Машина, которую надо вызывать, описывается в файле
Systems. В этом файле должна быть одна или несколько
строк, описывающих алгоритм и правила вызова. Строки
имеют формат:
Имя Время Тип_вызова Класс_устройства Адрес_машины Send Expect ...
Any SaSu0100-0700 MoTuWeThFrSa1900-0700(Заметим, что естественным образом пишется диапазон времени, переходящий через 0). Можно повторять запись, разделяя ее вертикальной чертой, например:
MoTuWeThFrSa1900-0700|SaSu0000-2400В этом же поле можно указать максимальный приоритет (Grade) выполняемых в указанное время заданий - /Grade. Кроме того, через ',' или ';' можно указать максимальное время запрета на повторный вызов. Дело в том, что по умолчанию, послу сбоя соединения система устанавливает временный запрет на связь с удаленной машиной, чтобы предотвратить пустую трату телефонного времени в случае, если сбой вызван какой то неустранимой причиной (например, та машина стоит). Это время растет экспоненциально от сбоя к сбою - 5 минут, 10 минут, 20 минут, и так далее. Если вы предполагаете, что сбои вызываются случайными причинами, или вам нужно во что бы то ни было устанавливать связь, имеет смысл ограничить этот интервал сверху. Записывается это так (например):
Any;5 SaSu0000-2400;50В этом случае время запрета не будет больше указанного в строке.
Итак, допустим, вы хотите вызывать машину 'kiae' в любой день недели, причем в рабочие дни в дневное время запретить передачу и прием новостей, которые идут (допустим) с приоритетом 'd', и не допускаете, что машина в kiae может простаивать больше 15 минут. Тогда вы делаете такую запись в поле времени:
Wk0900-1800/Z;15|Any/z;15Наиболее распространена запись вида:
Any или Any;15
TCP - вызов по TCP/IP. В этом случае в поле КЛАСС записывается номер порта сервера UUCP (обычно 'uucp' или '540'), в поле адреса адрес машины в TCP/IP, например:
kiae Any TCP uucp relcom.kiae.su login: имя word: парольDIR - вызов по постоянно включенной линии. В этом случае в поле адреса пишется имя устройствва (без /dev/), на которое включена эта линия (оно должно быть описано в Devices как 'direct'):
kiae Any;5 DIR 9600 tty24 .......ACU - вызов через модем. В этом случае в поле адреса пишется номер телефона и атрибуты настройки модема. Например:
kiae Any;15 ACU 9600,Om 9469994:mnp ........В этом же поле (тип программы вызова) можно указывать протокол работы и параметры локального и удаленного протоколов. Протоколы отделяются от типа запятой, удаленные протоколы пишутся после '/'. Примеры:
(На самом деле, программа вызова определяется по первым 3-м буквам, так что можно писать, как и в HDB UUCP: ACUKIAE. Полное название ищется в Devices при определении линии для вызова).
Категория линии (префикс, состоящий из букв), Скорость линии (может быть '*'), Требуемые атрибуты линии (модема)Категория линии определяет те строки Devices, которые будут рассматриваться - их категории должны совпадать. Скорости также должны совпадать, за исключением случая, когда в Systems стоит '*' - тогда на самой линии может быть любая скорость. Атрибуты (отделяются запятой) сравниваются с атрибутами линий в Devices - все атрибуты из Systems должны иметься в описании линии в Devices. Примеры:
WCKS19200,p - линия сети ВЦКС, скорость порта 19200, требуется протокол PEP.
На самом деле все эти характеристики условны, а система просто ищет в Devices строку, в которой в поле Класс написано:
WCKS19200,[что-угодно]p[что-угодно]Еще пример - описание системы fuug на машине kiae:
fuug Any;5 ACU,g(7,64) 19200,Fp ....А в файле Devices принято обозначать атрибутом 'F' линии, по которым можно звонить за рубеж, а 'p' - модемы с протоколом 'PEP'. Например:
ACU tty18 - 19200,FOIpv9m T2500
:mnp - MNP :comp - компрессия :v42 - V42bis :v32 - V32 :pep - протокол PEP :xon - использование XON/XOFFКроме того, символ '=' означает 'ждать гудка', а '-' - пауза. Перед номером может идти символьный префикс - код города, который заменяется на номер телефона в соответствии с файлом 'Dialcodes'. В случае TCP в поле адреса пишется адрес машины в TCP/IP, а в случае DIR сокращенное (без '/dev/') имя устройства.
Имеется несколько 'Escape' последовательностей, понимаемых особым образом:
Поле 'Expect' имеет один из двух форматов:
Expect Expect-Send1-Expect1...Во втором случае, если не пришел ответ 'Expect', посылается 'Send1' и ожидается 'Expect1', и так далее.
В строке 'Expect' могут также указываться
kiae Any;15 ACU 2400 9469984 ogin:--ogin: uualex assword:-uualex-asswprd: uuXYZСтрока в Devices:
ACU tty1A - 9600 SmartOneЭто был простейший вариант. Вот более сложный:
kiae Any;15 ACU,g(3,256)/g(4,128) ISKRA*,Im2 MOSCOW9469994:mnp:long \ "" P_ZERO ogin:~6--ogin:-BREAK-ogin:--ogin: \d\025uualex \ assword:~65-\d\025uualex\r\c-assword: 25XYZpasswd 7Devices:
ACU acu00 - ISKRA19200,IOmv921 Case4696r Dialcodes MOSCOW 8=852В последнем случае в классах устройств буквы трактуются как:
ТОНКОСТИ НАСТРОЙКИ
При описании вызываемой машины необходимо предусматривать следующее:
ПРОВЕРКА
Для проверки вызова uucico вызывается в режиме
отладки. Полезно бывает проверить правильность
'Systems', взяв какой либо 'kermit' и проверив все
'Expect/Send', посылая их вручную. Причиной ошибки
может быть неверная четность посылаемого текста, или
неверный символ стирания буфера (символ '025' во многих
System-V не стирает буфер при вводе имени или пароля).
ОПИСАНИЕ ДОПУСТИМЫХ КОМАНД И СПРАВОЧНИКОВ
Следующий этап описания любой системы - это обеспечение
необходимых ограничений для нее. Для этого служат файлы
USERFILE и L.cmds.
Файл L.cmds содержит список команд, которые могут выполнять удаленные машины, с [возможно] указанием, к какому классу UUCP должны принадлежать машина, чтобы выполнять данную команду, описание того, нужно ли посылать ответ и в каких случаях, и описание пути поиска команд (PATH). Файл может содержать следующие строки:
Описание пути поиска команд: PATH=путь_поиска_команд, например:
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin
Описание того класса, к которому относятся следующие команды: X=класс, где класс - число от 0 до 9,
Описание команды в формате: команда[,[Error][No]], например:
rmail,Error rbmail,No rnews,Error rsend
По умолчанию uux шлет уведомление о выполнении команд.Суффикс 'No' блокирует это послание во всех случаях, суффикс 'Error' - оставляет только в случае ошибки.
Пример файла:
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin rmail,Error rbmail,No X=2 rnews,Error X=4 rsend X=9 who lpr
Второй файл, в котором надо описывать права доступа USERFILE. Формат его упоминался в выше. В нем указывается:
login-name,uucp-name [-Xкласс] список_справочников
При выполнении команды проверяется, что класс этой команды не выше класса данной uucp машины. В приведенном выше примере для выполнения команды 'lpr' машиной 'alex' в файле должно стоять что то вроде:
uualex,alex -X9 /usr/spool/uucppublic
ОПИСАНИЕ МОДЕМОВ (L.dialers)
Как правило, для работы с модемами используется внешний
диалер (в системе есть встроенные имена 'hayes',
'hayes2400' - для вызова по правилам работы с совместимыми с Hayes модемами, но они совершенно не учитывают
специфику конкретного модема). Если в описании Devices
указан тип модема, отличный от известного 'uucico' (то
есть от 'hayes' или 'hayes2400'), то вызывается универсальный диалер, который берет описание модема из файла
'/usr/lib/uucp/L.dialers'. Параметры вызова этого диалера описана в 'gdial(8)'.
В файле L.dialers описано все, что нужно для
Modem=Тип_модемаи кончается строкой, состоящей из точки:
Строки, начинающиеся с #, игнорируются (еще до обработки символа '').
Параметры модема описываются записями вида:
Имя=Значениеили
Имя=Значение Значение ...
В первом случае на одной строке могут быть несколько описаний, во втором - список значений, разделенных пробелами, занимает весь остаток строки, и, если нуобходимо, может быть продлен на следующие строки, если в конце строки стоит '\'. При этом символ \ не рассматривается как пробел. Можно использовать одиночные или двойные кавычки, так, что, например, Start" '01'" представляет собой одно слово. Имена переменных могут сокращаться до 2-х букв, если это обеспечивает однозначное распознавание.
Список переменных (* - обязательно описание, ! - значение - массив) | |||
Modem | * | имя модема в системе | |
Use | * | имя модема - аналога, его описание | |
Hang | * | ! | Как оборвать связь (в формате Send Expect, см. ниже) |
Save | ! | Инициализация ПЗУ модема (Send Expect) | |
Call | * | ! | Вызов (Send Expect) |
Host | ! | Перевод в режим ожидания звонка (Send Expect) | |
Reset | ! | Сброс модема при каких либо трудностях (Send Expect) | |
Valid | Символы, допустимые в номере |
Ответы модема:
Connect | ! | Возможные ответы модема при соединении |
Busy | ! | Ответы, означающие занятость телефона |
Nocar | ! | Ответы - нет несущей |
Error | ! | Ответы - ошибка команды модема |
Ring | Ответ - опознан входящий звонок | |
Rring | Ответ - опознан звонок на удаленном модеме | |
Baud | ! | Список допустимых скоростей работы с модемом (не путать со скоростью связи) |
Chars | Строка замены символов в номере вида: -<Символ задержки>=<Символ ожидания гудка> (например, -,=W) | |
Tconn | Время (в секундах), отводимое на соединение | |
Trring | Время, отводимое на соединение после приема первого удаленного звонка (Rring) | |
Tmodem | Время на ожидание ответа после команды модема | |
Tdigit | Время, добавляемое при вызове на каждую цифру | |
Tpause | Время, добавляемое на паузу (символ '-' в номере) | |
Twait | Время, добавляемое на ожидание гудка |
Далее следует описание опций. Опции включаются в номер в L.sys через двоеточие и вызывают дополнительную настройку модема при выполнении его команд (см. O в описании Send ниже).
Options=название подставить название подставить ...
где название - название опции (mnp, ...) подставить - команды модема, которые подставляются вместо O в строке, посылаемой на модем (!!! в строке 'подставить' обратный слеш не удваивается, в отличие от 'Send') Имена опций произвольны, но есть рекомендованные стандартные имена (в зависимости от категории Acu в L.devices):
v32, b2400, b1200, b300, bany
Переменные в формате Send / Expect описывают команды модему и ожидаемые ответы в форме:
Послать Ждать Послать Ждать ...Причем Ждать может иметь форму
Ждать-Послать1-Ждать1...
аналогично файлу Systems в описании систем UUCP. (Если Ждать не получен, послать строку Послать1 и ждать ответа Ждать1, и так далее. Правила записи строк Послать и Ждать:
Ждать если отсутствует последнее поле Ждать в строке "Call", то система ждет ответа в соответствии с переменными Conn, Busy, Nocar и т.д.
если строка Ждать начинается с пробела (" *", например), то ответ ищется, не дожидаясь получения символа LF (перевод строки) с модема. Пробел при этом пропускается. Иначе сначала система ждет получения символа перевода строки, а затем уже сравнивает полученную строку с возможными ответами. Пробелы в ответах модема игнорируются,
Послать в строке "Послать" распознаются следующие специальные последовательности:
Для описания нового модема в этом файле рекомендуется найти описание похжего модема, сослаться на него и описать только те характеристики, которые отличаются.
СТАТИСТИКА И ЧИСТКА КАТАЛОГОВ
Система UUCP пишет несколько файлов статистики и протоколов работы.
Протокол
Протокол работы системы пишется в
'/usr/spool/uucp/.Admin/LOGFILE' (в BSD варианте - в /usr/spool/uucp/LOGFILE). Можно сгенерировать систему так, чтобы статистика по каждой машине и от каждой команды системы писалась
отдельно, но обычно это не делается для упрощения просмотра протоколов. В протокол пишутся:
alex kiae1 (3/20-23:19-15009) XQT QUE'D (who)
СТАСТИСТИКА UUCP
При передаче и приеме файлов UUCP пишет статистику в файл '/usr/spool/uucp/.Admin/SYSLOG'
(/usr/spool/uucp/SYSLOG в варианте BSD). В каждой строке записываются:
имя пользователя, имя машины, (дата, время, номер процесса), (точное время ) операция (send/received data), длина файла время передачи возможно, число повторов по таймеру.
Эта статистика обрабатывается командой 'uurate', которая подсчитывает объемы и скорость передачи данных.
Пример записи:
alex altserv (3/20-19:10) (701107844.15) sent data 1228800 bytes 2306.64 secs 45 retries
Протокол
При вызове UUCP в пассивном режиме (через
'login:'), если на удаленном конце включена
отладка (-xN), uucico пишет отладочну/ информацию в файл '/usr/spool/uucp/.Audit/имя
(/usr/spool/uucp/AUDIT/имя в варианте BSD).
Каждый раз этот файл начинается заново. Рекомендуется стирать из этого справочника файлы,
пролежавшие больше суток (что и делает
uu.daily).
Ежедневно должна запускаться программа очистки и сбора статистики. Эта программа (как правило, /usr/lib/uucp/uu.daily) уничтожает задания и файлы, которые не смогли выполниться за указанное в ней время, а затем, если имеется справочник '/usr/spool/uucp/.Old' (/usr/spool/uucp/OLD в варианте BSD) собирает на помесячной основе протокол и статистику работы, а если такого справочника нет, просто сохраняет последовательно статистику и протоколы за 7 последних дней. Подробнее она описана в uu-daily(8).
СМ. ТАКЖЕ
uudaily(8), gdial(8), uucico(8), uuxqt(8), "Замечания
по реализации UUCP".