Новые книги

Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.

Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.
Это книга о русской блогосфере, написанная как документальный роман-френдлента. Ее герои — самые известные, яркие и успешные блогеры Рунета: Антон Носик, Рустем Адагамов, Артемий Лебедев, Линор Горалик, Марта Кетро, Максим Кононенко, Сталик Ханкишиев, Вера Полозкова — восемь человек, которые стали такими, какие они есть, во многом благодаря интернету и которые сделали интернет таким, каким мы знаем его сегодня. Эти восемь человек — во всех смыслах первые лица русской блогосферы — рассказывают о том, как открыли для себя Всемирную паутину, как обустроили ее и приспособили для жизни. Нам, читающим эту френдленту, решать, как в ней жить сегодня.

UUCP Configuration Files

Файлы настройки UUCP

В отличие от более простых программ передачи файлов, UUCP был разработан, чтобы обрабатывать все передачи автоматически. Если только все установлено правильно, ежедневное вмешательство администратора не требуется. Вся необходимая информация сохраняется в паре файлов конфигурации, которые постоянно находятся в каталоге /usr/lib/uucp. Большинство этих файлов используется только при внешнем запросе снаружи.

Введение в Taylor UUCP

Сказать, что конфигурация UUCP является тяжелой, было бы замалчиванием фактов. Это, действительно, запутанная тема, и иногда краткий формат файлов конфигурации не делает вещи проще (хотя формат Talyor читается очень просто по сравнению с более старыми форматами в HDB или Version 2).

Чтобы дать Вам понять, как взаимодействуют все эти файлы, представим наиболее важное и будем просматривать типовые записи этих файлов. Мы не будем объяснять все подробно; более точные сведения даны в отдельных разделах ниже. Если Вы хотите установить на Вашу машину UUCP, лучше всего начать с типовых файлов и адаптировать их постепенно. Вы можете выбирать из предложенного ниже набора примеров или того, что есть в Вашем дистрибутиве Linux.

Все файлы, описанные в этом разделе хранятся в /etc/uucp или в его подкаталогах. Некоторые дистрибутивы Linux содержат код UUCP, который поддерживает HDB и Taylor конфигурации, и используют различные подкаталоги для каждого набора файлов конфигурации. Обычно есть файл README в каталоге /usr/lib/uucp.

Чтобы UUCP работал правильно, эти файлы должны принадлежать пользователю uucp. Некоторые из них содержат пароли и номера телефона, и следовательно, должны иметь права доступа 600. Обратите внимание, что хотя большинство команд UUCP должно иметь бит setuid на имя uucp, Вы должны удостовериться, что программа uuchk такого бита не имеет. Иначе, пользователи будут способны отобразить пароли системы даже при том, что файлы имеют режим доступа 600.

Центральный файл конфигурации UUCP называется /etc/uucp/config. Он используется, чтобы установить общие параметры. Наиболее важный из них (и теперь единственный), является именем UUCP Вашей системы. Для нашей модельной сети Virtual Brewery использован vstout в качестве шлюза UUCP:

# /etc/uucp/config - UUCP main configuration file
nodename         vstout

Следующий важный файл конфигурации называется sys . Он содержит всю системно-специфическую информацию об участках сети, с которыми Вы связаны. Она включает имя участка и информацию относительно связи, например, номера телефонов при использовании связи по модему. Типичный скрипт для модемной связи с машиной pablo:

# /usr/lib/uucp/sys - name UUCP neighbors
# system: pablo
system          pablo
time            Any
phone           555-22112
port            serial1
speed           38400
chat            ogin: vstout ssword: lorca

Ключевое слово port задает порт, который нужно использовать, time определяет время, в которое система может вызываться. chat описывает сценарии входа в систему: последовательность строк, которыми нужно обменяться, чтобы uucico зарегистрировали на pablo. Мы опишем сценарий входа позже. Команда port не называет конкретный файл устройства, например, /dev/cua1, она указывает на файл с соответсвующими записями. Вы можете назначить любое походящее имя.

Файл port содержит информацию о связи непосредственно. Для модемной связи он описывает специальный файл устройства, который нужно использовать, скорость и тип оборудования, соединенного с портом. Пример ниже описывает /dev/ttyS1 (он же COM2), с которым соединен модем NakWell способный к передаче на скорости до 38400bps. Имя порта должно соответствовать имени, заданному в файле sys.

# /etc/uucp/port - UUCP ports
# /dev/ttyS1 (COM2)
port            serial1
type            modem
device          /dev/ttyS1
speed           38400
dialer          nakwell

Информация, имеющая отношение к программам набора номера, cохраняется в другом файле, называемом dial. Для каждого типа программы набора номера он содержит последовательность команд, которые требуются, чтобы вызвать удаленную машину по номеру телефона. Все это называется chat script (сценарий дружеской системы). Пример для вышеупомянутого NakWell мог бы выглядеть следующим образом:

# /etc/uucp/dial - per-dialer information
# NakWell modems
dialer          nakwell
chat            "" AT&F OK ATDT\T CONNECT

Строка, начинающаяся с chat, определяет скрипт модема, который является последовательностью команд, посланных и полученных от модема, чтобы инициализировать его и набрать желательный номер. Последовательность \T будет заменена на номер телефона uucico.

Чтобы в общем показать Вам, как uucico работает с этими файлами конфигурации, предположим, что Вы дали команду:

$ uucico -s pablo

Первым делом uucico ищет pablo в файле sys. Из строки в файле sys для pablo она видит, что должна использовать порт serial1 для установки соединения. Файл port сообщает uucico, что serial1 является портом модема, и что есть подключенный модем NakWell.

uucico теперь ищет запись dial , описывающую модем NakWell, и найдя первую такую запись, открывает последовательный порт /dev/cua1 и выполняет "дружескую беседу" программы набора номера. То есть, посылает AT&F, ждет в ответ OK и т.д. При столкновении со строкой \T, она заменяет эту строку на номер телефона (555-22112), извлеченный из файла sys.

После того, как соединение будет установлено (модем вернет CONNECT), uucico возвращается к файлу sys и выполняет дружескую беседу входа в систему (login chat). В нашем примере она ждет приглашения login: затем посылает имя пользователя (vstout), ждет приглашения password: и посылает пароль (lorca).

После завершения авторизации удаленная система активизирует собственный uucico. Две копии uucico проводят фазу рукопожатия (handshake phase), описанную в предыдущем разделе. Я прекрасно понимаю, что термины "фаза рукопожатия" и "дружеская беседа входа в систему" звучат не очень удачно, но эквивалентная русская терминология в этой области отсутствует.

Что нужно знать UUCP

Работа программ Linux слегка напоминает работу разведки: никто не должен знать лишнего.

Прежде, чем Вы начинаете писать файлы конфигурации UUCP, Вы должны выяснить некоторую необходимую информацию. Сначала Вы должны выяснить, к какому последовательному порту присоединен модем. Обычно порты DOS COM1-COM4 отображаются на специальные файлы устройств с /dev/ttyS0 по /dev/ttyS3. Большинство дистрибутивов, например, Slackware, создают файл /dev/modem как ссылку на соответствующий файл устройства ttyS* и конфигурируют коммуникационные программы kermit, seyon, чтобы они использовали этот обобщенный файл. В этом случае Вы должны также использовать /dev/modem в Вашей конфигурации UUCP.

Причина этого в том, что все программы используют так называемые файлы блокировки (lock files), чтобы сообщить, когда последовательный порт используется. Имена этих файлов блокировки являются конкатенацией строки LCK.. и имени файла устройства, например, LCK..ttyS1. Если программы используют различные имена для одного устройства, они будут не в состоянии распознавать чужие файлы блокировки. Как следствие, они прервут чужие сеансы связи. Это не такое уж маловероятное событие, если Вы планируете, чтобы UUCP использовал crontab. Подробности настройки последовательных портов описаны в главе 4.

Затем Вы должны выяснить, с какой скоростью модем и Linux могут связываться, и установить максимальную эффективную скорость передачи. Эффективная скорость передачи может быть намного выше, чем физическая скорость модема. Например, много модемов посылают и получают данные на скорости 56 kbps. Использование протоколов сжатия (например, V.42bis) позволяет установить фактическую скорость передачи более, чем в 100 kbps.

Конечно, если Вы хотите, чтобы UUCP cделал что-нибудь, Вам нужен номер телефона системы для вызова. Также Вам нужен идентификатор для входа в систему и, возможно, пароль для удаленной машины.

Также надо знать порядок входа в систему. Следует ли нажать клавишу Enter перед появлением приглашения для входа? Что будет отображено: login: или user:? Это необходимо для создания сценария дружеской беседы (chat script), который описывает uucico как регистрироваться. Если у Вас возникают затруднения, попробуйте вызывать систему программой терминала kermit или minicom и записать точно, что Вы делаете.

Имена сайтов

Как и при работе с сетями TCP/IP, Ваш компьютер должен иметь имя для UUCP-сетей. Пока Вы просто хотите использовать UUCP для передачи файлов, это имя не должно удовлетворять никаким стандартам. Единственое ограничение в том, что имя не должно быть больше, чем 7 символов, чтобы не путать машину с файловыми системами, которые накладывают ограничения на имя файла.

Однако, если Вы используете UUCP для почты или новостей, Вы должны подумать о наличии имени, зарегистрированного в UUCP Mapping project. UUCP Mapping project описан в главе 17. Даже если Вы делите домен с кем-то, Вы можете получить официальное имя UUCP для своего участка сети.

Часто люди выбирают свое UUCP имя так, чтобы соответствовать первому компоненту имени домена. Предположим, что адрес Вашего домена swim.twobirds.com, тогда имя главной машины UUCP было бы swim. Обычно именно так и бывает. Конечно, Вы можете также использовать любое UUCP имя.

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

По умолчанию, набор программ UUCP использует hostname как имя UUCP. Это имя обычно устанавливается в скрипте rc и хранится в /etc/hostname. Если ваше имя UUCP отлично от того, что Вы устанавливаете в качестве имени своей машины, Вы должны использовать опцию hostname в файле config, чтобы сообщить uucico о Вашем имени UUCP. Это будет рассмотрено чуть позже.

Файлы настройки Taylor

Теперь мы вернемся к файлам конфигурации. Taylor UUCP получает информацию из следующих файлов:

config

Это основной файл конфигурации. Вы можете определить Ваше имя UUCP именно в нем.

sys

Описывает все участки сети, известные Вам. Для каждого участка он определяет имя, в какое время вызывать его, какой номер набрать, какое устройство использовать и как регистрироваться.

port

Описывает все доступные порты, вместе с обеспечиваемой ими скоростью и программами соединения, которые нужно использовать.

dial

Описывает программы номера, используемые, чтобы установить телефонное соединение.

dialcode

Содержит расширения для символьных номеров (dialcodes).

call

Содержит имя входа в систему и пароль, который нужно использовать при вызове системы.

passwd

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

Файлы конфигурации Taylor состоят из строк, содержащих пары "ключевое слово=значение". Знак hash (#) представляет собой комментарий, действующий до конца строки. Чтобы использовать знак # просто так, Вы можете ввести его с наклонной чертой влево \#.

Есть очень много опций, которые Вы можете изменять в этих файлах конфигурации. С их помощью вы сможете сконфигурировать модемную связь UUCP. Дополнительные разделы описывают изменения, необходимые, если Вы хотите использовать UUCP поверх TCP/IP или поверх последовательного соединения. Полное описание дается в Texinfo-документах, которые распространяются вместе с исходным текстом Taylor UUCP.

Если Вы думаете, что сконфигурировали вашу систему UUCP полностью, можете проверить конфигурацию, используя uuchk (находится в /usr/lib/uucp). uuchk читает ваши файлы конфигурации и печатает детализированный отчет о значениях, используемых для каждой системы.

Общие опции настройки: файл config

Скорее всего Вы вообще не будете использовать этот файл, чтобы описать UUCP hostname. По умолчанию, UUCP использует имя, которое Вы устанавливаете командой hostname, но вообще хорошая идея установить имя UUCP явно. Типовой файл config показан ниже:

# /usr/lib/uucp/config - UUCP main configuration file
hostname        vstout

Здесь можно задать еще ряд параметров, например, имя каталога для буфера. Эти параметры будут рассмотрены позже в разделе “Анонимный UUCP.”

Как сказать UUCP о других системах: файл sys

Файл sys описывает системы, о которых Ваша машина знает. Запись представляется ключевым словом system; затем до следующей директивы system следуют детальные параметры, специфические для этой системы. Обычно, сведения системы определяют номер телефона, login chat и другие подобные параметры входа в систему.

Параметры перед самой первой записью system задают значения по умолчанию для всех систем.

Наиболее важные элементы записи подробней описаны ниже.

Имя системы

Команда system задает имя удаленной системы. Вы должны определить правильное имя удаленной системы, не псевдоним, потому что uucico сравнит это значение с ответом системы.

Каждое имя системы может появляться только один раз. Если Вы хотите использовать несколько наборов конфигураций для той же самой системы (различные номера телефонов, которые uucico должен пробовать по очереди), Вы можете определять альтернативы (alternates). Альтернативы описаны ниже.

Номер телефона

Если связь с удаленной системой достигается по телефонной линии, поле phone определяет номер, который модем должен набрать для связи. Он может содержать отдельные лексемы, интерпретируемые процедурой набора uucico. Знак равенства (=) означает ждать вторичный тон набора кода, тире (-) генерирует паузу в одну секунду. Например, некоторые телефонные станции сбрасывают номер, если Вы не делаете паузу между набором префиксного кода и номера телефона. Я не знаю соответствующий термин для этого, но Вы знаете, что иногда на внутренней телефонной станции Вы должны набрать 0 или 9, чтобы получить выход наружу.

Любая встроенная символьная строка может использоваться, чтобы скрыть местную информацию (например, код области). Любая такая строка транслируется с помощью файла dialcode. Предположим, что Вы имеете следующий файл dialcode:

# /usr/lib/uucp/dialcode - dialcode translation
Bogoham         024881
Coxton          035119

С такими определениями Вы можете использовать номер телефона Bogoham7732 в файле sys , что делает работу немного проще.

port и speed

Опции port и speed используются, чтобы выбрать устройство, используемое для вызова удаленной системы и установки максимального быстродействия. Запись system может использовать одну или обе опцию сразу. При поиске подходящего устройства в файле port могут быть выбраны только те порты, которые соответствуют имени порта и (или) диапазону скоростей.

Вообще, при использовании опции speed есть ограничение. Если в файле port определено только одно устройство, uucico всегда использует его, так что Вам остается только задать желаемую скорость. Если Вы имеете несколько модемов, подключенных к Вашей системе, uucico пробует все подходящие, пока не найдет неиспользуемый в данный момент. В этом случае задавать порт не следует: если порт указан, никакого поиска вообще не будет.

login chat

Выше мы уже сталкивались со скриптом входа в систему (login chat script), который сообщает uucico, как регистрироваться в удаленной системе. Он состоит из списка лексем, определяя строки, ожидаемые и посланные локальным процессом uucico. Проблема состоит в том, чтобы заставить uucico ждать, пока удаленная машина не пошлет приглашение входа в систему, затем послать имя входа в систему, ждать, пока удаленная система пошлет приглашение на ввод пароля, и посылать пароль. Ожидание и посылка строки чередуются. uucico автоматически добавляет символ возврата каретки (\r) к любой посылаемой строке. Таким образом, простой скрипт похож на:

ogin: vstout ssword: catch22

Обратите внимание, что поля записи не содержат текста приглашений. Удостоерьтесь, что вы войдете в систему , даже если система посылает Login: вместо login:.

uucico также учитывает некоторые виды условного выполнения, например, в случае, если getty удаленной машины должен быть сброшен перед посылкой приглашения. Для этого Вы можете присоединить под-дружескую (sub-chat) беседу к ожидающейся строке. Sub-chat выполняется только, если основное соединение не удалось, то есть произошла блокировка по времени. Один из способов использовать эту возможность состоит в том, чтобы послать BREAK, если удаленная система не отображает приглашение входа в систему. Следующий пример дает всесторонний скрипт дружеской беседы, который должен работать и в случае, если Вы должны нажать Enter прежде, чем войти в систему. Пустая строка ("") говорит UUCP ничего не ждать и продолжать посылать следующую строку немедленно.

"" \n\r\d\r\n\c ogin:-BREAK-ogin: vstout ssword: catch22

Имеется несколько специальных строк и ESC-символов, которые могут включаться в скрипт:

""

Пустая строка сообщает, чтобы uucico не ждал ничего, а продолжил посылать следующую.

\t

Табуляция.

\r

Перевод каретки.

\s

Пробел. Вы нуждаетесь в нем, чтобы включить пробел в строку регистрации в скрипте.

\n

Перевод строки. В unix-системах понятия перевода (возврата) каретки и перевода строки разделены в отличие от DOS/Windows-систем.

\\

Обратный слэш (\).

В посылаемой строке в дополнение к вышеупомянутым допустимы следующие ESC-символы и последовательности:

EOT

Конец передачи (^D).

BREAK

Прерывание (Break).

\c

Возврат каретки в конце строки.

\d

Пауза в 1 секунду.

\E

Дает возможность эхо-проверки. Эхом (ECHO) называется возвращение копии всей переданной информации для контроля. Этот режим требует, чтобы uucico дождался ECHO всего, что он передает прежде, чем сможет продолжать регистрацию. Это удобно, когда используется в скриптах модема (с которыми мы столкнемся ниже). По умолчанию эхо выключено.

\e

Выключить эхо-контроль.

\K

Аналогично BREAK.

\p

Пауза на половину секунды.

Альтернативы (Alternates)

Иногда желательно иметь несколько описаний для входа в одну систему, например, если система может быть доступна на различных модемных линиях. С Taylor UUCP Вы можете делать это, определив так называемую альтернативу (alternate).

Альтернативная строка сохраняет все установки из основной и определяет только те значения, которые должны быть отменены в заданной по умолчанию или добавлены к ней. Альтернатива смещена, относительно записи для системы, строкой, содержащей ключевое слово altgrnave alternate.

Чтобы использовать два номера телефона для pablo , Вы должны изменить файл sys следующим образом:

system       pablo
phone        123-456
.. entries as above ...
alternate
phone        123-455

При вызове pablo, uucico теперь сначала наберет 123-456 и, если ничего не получается, попробует альтернативу. Альтернативный вход сохраняет все установки из основного входа системы и изменяет только номер телефона.

Ограничение времени вызова

Taylor UUCP реализует ряд способов, обеспечивающих ограничение времени обращения к удаленной системе. Вам потребуется сделать это или из-за ограничений, которые удаленная система накладывает на услуги в течение рабочих часов или просто, чтобы избегать времени с высокими ценами за услуги. Обратите внимание, что всегда возможно отменить ограничения времени обращения, запустив uucico с опцией –S или –f.

По умолчанию, Taylor UUCP отвергнет соединения в любое время, так что Вы должны использовать некоторый вид спецификации времени в файле sys. Если Вы не очень заботитесь об ограничении времени обращения, Вы можете определить опцию time со значением Any (любой) в файле sys.

Самый простой способ ограничить время обращения, поле time, которое сопровождается строкой, состоящей из дня и подполя времени. День может быть комбинацией Mo, Tu, We, Th, Fr, Sa, Su, Any (любой), Never (никогда) или Wk для выходных дней. Время состоит из двух значений часов (в 24-часовом формате), отделяемых тире. Они определяют диапазон, в течение которого обращения допустимы. Комбинация этих лексем пишется без интервалов. Можно задать несколько интервалов, разделяя их запятыми. Например, MoWe0300-0730, Fr1805-2000 допускает обращение в понедельник и среду с 3 до 7.30 утра и в пятницу с 18.05 до 20.00. Когда поле time охватывает полночь, и написано Mo1830-0600, это фактически означает понедельник, между полуночью и 6.00 утра и между 18.30 пополудни и полуночью понедельника.

Taylor UUCP также имеет специальные лексемы, которые можно использовать в строке времени: NonPeak и Night. Они эквивалентны Any2300-0800,SaSu0800-1700 и Any1800-0700,SaSu соответственно.

Команда time задает параметр, который описывает время повтора в минутах. Когда попытка установить соединение не удалась, uucico не допустит другой попытки вызвать удаленный компьютер в течение некоторого интервала. По умолчанию, используется схема backoff, где интервал повтора увеличивается с каждым последующим отказом. Например, когда Вы определяете время повторения в 5 минут, uucico откажется вызывать удаленную систему в течение 5-ти минут после последнего отказа.

Команда timegrade позволяет Вaм настраивать приоритет буферизации. Допустим, что Вы имеете следующие команды timegrade в записи системы:

timegrade           N Wk1900-0700,SaSu
timegrade           C Any

Это допускает задачи с приоритетом буферизации (spoolgrade) C и выше (обычно почта имеет степень B или C), они будут приняты всякий раз, когда соединение установлено, в то время, как новости (обычно ставятся в очередь со степенью N) будут переданы только ночью и в выходные.

Точно так же, как команда time, команда timegrade берет интервал повторения в минутах как дополнительный третий параметр.

Однако есть и недостатки высоких приоритетов буферизации: опция timegrade применяется только к тому, что посылает Ваша система; удаленная система может передать все, что угодно. Вы можете использовать опцию call-timegrade, чтобы явно запросить послать только работы выше некоторой степени буферизации, но нет никакой гарантии, что удаленная система так и поступит.

Аналогично, поле timegrade не проверяется, когда удаленная система вызывает Вашу и любые работы, поставленные в очередь для системы вызова будут ей посланы. Однако, удаленная система может явно запрашивать Ваш uucico, чтобы ограничить себя некоторым приоритетом задач.

Описание устройств: файл port

Файл port сообщает uucico о доступных портах. Это могут быть порты модема, другие типы последовательных соединений и сокеты TCP.

Подобно файлу sys, port состоит из отдельных кусков, начинающихся с ключевого слова port, сопровождаемым именем порта. Это имя может использоваться в описании порта в файле sys. Нет потребности в уникальности имени; если существуют порты с одним и тем же именем, uucico перепробует все по очереди, пока не найдет тот, который в настоящее время не используется.

Команда port должна обязательно сопровождаться именем, которое задает, какой порт описан. Допустимые типы: modem, direct для прямых соединений и tcp для сокетов TCP. Если команда port отсутствует, по умолчанию тип порта принимает значение modem.

В этом разделе я опишу лишь порты модема. Сокеты TCP и прямые соединения будут обсуждаться позже.

Для модема и прямого соединения Вы должны определить файл для вызова устройства напрямую. Обычно это имя специального файла устройства в каталоге /dev (подобно /dev/ttyS1).

В случае использования модема, port также определяет, какой модем соединен с портом. Различные типы модемов должны быть настроены по-разному. Следовательно, Вы должны сообщить uucico, как инициализировать Ваш модем и как соединяться с требуемым номером. Taylor UUCP хранит описания всех программ набора номера в файле dial . Чтобы использовать любую из них, Вы должны определить имя программы набора номера, используя команду dialer.

Иногда Вам потребуется использовать модем различными способами в зависимости от системы, которую Вы вызываете. Например, некоторые старые модемы не понимают, когда быстрый модем пытается соединяться на скорости 56 kbps; они просто пропускают строку вместо того, чтобы вести переговоры на скорости в 9600 bps. Если Вы знаете, что некоторые машины используют такой "немой" модем, для вызова их Вы должны настраивать свой модем иначе. Для этого Вам нужно добавить строку port в файл port, которая определит другую программу набора номера. Теперь Вы можете задать новому порту другое имя, типа serial1-slow, и использовать директиву port в описании системы в файле sys.

Лучший способ отличать порты состоит в том, чтобы отличать порты по скоростям, которые они поддерживают. Например, два описания порта для вышеупомянутого случая могут выглядеть следующим образом:

# NakWell modem; connect at high speed
port            serial1         # port name
type            modem           # modem port
device          /dev/ttyS1      # this is COM2
speed           115200          # supported speed
dialer          nakwell         # normal dialer
# NakWell modem; connect at low speed
port            serial1         # port name
type            modem           # modem port
device          /dev/ttyS1      # this is COM2
speed           9600            # supported speed
dialer          nakwell-slow    # don't attempt fast connect

Системная запись для машины drop получает для использования порт serial1, но в случае запроса на использование скорости 9,600 bps uucico автоматически использует вторую запись порта. Все остальные сайты, которые работают со скоростью 115,200 будут вызываться с использованием первой записи port. По умолчанию используется первая запись с подходящей скоростью.

Как набирать номер: файл dial

Файл dial описывает способ, которым используются различные программы набора номера. Традиционно, переговоры программ набора номера UUCP быстрее, чем модемы, потому что раньше было обычной практикой иметь одно (дорогое) автоматическое устройство набора, обслуживающее целый набор модемов. Сегодня большинство модемов имеют встроенную поддержку набора, так что это различие становится более размытым.

Однако различные программы набора номера или модемы могут требовать различной настройки. Вы можете описать каждый из них в файле dial. Куски в файле dial начинаются с команды dialer, которая определяет имя программы набора номера (звонилки).

Наиболее важная часть, скрипт модема (modem chat), определяется командой chat. Подобно скрипту входа в систему (login chat), он состоит из последовательности строк uucico, посылаемых программе набора номера и ответов, которые требуется получить. Они обычно используются, чтобы сбросить модем к известному состоянию, и набирать номер. Вот пример для Hayes-совместимого модема:

# NakWell modem; connect at high speed
dialer          nakwell         # dialer name
chat            "" AT&F OK\r ATH1E0Q0 OK\r ATDT\T CONNECT
chat-fail       BUSY
chat-fail       ERROR
chat-fail       NO\sCARRIER
dtr-toggle      true

Скрипт модема начинается с "", пустой ожидаемой строки. Cледовательно, uucico пошлет команду (AT&F) сразу же. Команда Hayes AT&F нужна для сброса модема. Затем uucico ждет, пока модем не пошлет OK, и посылает следующую команду, которая выключает локальное эхо, и т.п. После того, как модем снова возвращает OK, uucico посылает команду набора ATDT (для России ATDP). Escape-последовательность \T в этой строке заменяется на номер телефона, получаемый из файла sys. Затем uucico ждет, пока модем не возвратит CONNECT, который говорит о том, что соединение с удаленным модемом было установлено успешно.

Часто модем будет не в состоянии соединиться с удаленной системой, например, если другая система общается с кем-то еще, и линия занята. В этом случае модем вернет сообщение об ошибке, указывающее на причину отказа. Скрипт модема не способен обнаружить такие сообщения; uucico будет ждать требуемую строку, пока не выйдет время ожидания. В файле регистрации UUCP (log file) будет записано "timed out in chat script" вместо истинной причины.

Однако, Taylor UUCP позволяет Вам поставить в известность uucico об этих сообщениях, используя команду chat-fail, как показано выше. Когда uucico обнаруживает строку chat-file при выполнении скрипта модема, то прерывает обращение и регистрирует сообщение об ошибках в файле регистрации UUCP (log файле).

Последняя команда в показанном выше примере говорит UUCP переключить строку DTR перед запуском скрипта модема. Большинство модемов может быть сконфигурировано так, чтобы при обнаружении изменений в строке DTR перейти в командный режим. Вы также можете сконфигурировать модем на сброс при обнаружении перехода на DTR. Некоторые из них, однако, не понимают таких вещей и зависают.

UUCP поверх TCP

В первый момент это может показаться абсурдом, но на самом деле UUCP поверх TCP не такая уж плохая идея, особенно при пересылке большого количества данных, типа новостей Usenet. На TCP-узлах новостями в основном обмениваются, используя NNTP протокол, в котором статьи запрашиваются и посылаются индивидуально, без сжатия и прочей оптимизации. Хотя и подходящая для больших узлов с большим объемом новостей, эта методика не подходит для небольших участков сети, которые получают новости медленным соединением типа ISDN. Им удобней объединить качества TCP с преимуществами посылки новостей в больших пакетах, которые могут быть сжаты и таким образом перемещаться с очень низкими затратами. Стандартный способ передать эти пакеты состоит в том, чтобы использовать UUCP поверх TCP.

В файле sys Вы определяете систему, которую нужно вызвать через TCP.

system          gmu
address         news.groucho.edu
time            Any
port            tcp-conn
chat            ogin: vstout word: clouseau

Команда address задает IP-адрес машины или ее полное доменное имя. Соответствующий участок файла port выглядел бы так:

port            tcp-conn
type            tcp
service         540

Этот пример говорит, что TCP-соединение должно использоваться, когда файл sys ссылается на tcp-conn , и что uucico должен пытаться соединяться с TCP-портом 540 на удаленной машине. Это заданный по умолчанию номер порта для обслуживания UUCP. Вместо номера порта, Вы можете также давать символическое имя порта командой service. Номер порта, соответствующий этому имени будет найден в файле /etc/services. Общее имя для UUCP-сервиса uucpd .

Использование прямого соединения

Допустим, что Вы используете прямое соединение своей системы vstout с системой tiny. Как и в случае с модемом, Вы должны описать вход в систему в файле sys. Команда port идентифицирует последовательный порт tiny.

system          tiny
time            Any
port            direct1
speed           38400
chat            ogin: cathcart word: catch22

В файле port Вы должны описать последовательный порт для прямого соединения. Описание программы набора номера (dialer) не нужно, так как нет никакой потребности в наборе.

port            direct1
type            direct
speed           38400
device          /dev/ttyS1