UUCP - Unix to Unix Copy
UUCP - Unix to Unix Copy
Система пересылки файлов по
телефону.
Если uucp правильно
сконфигурирована, то ее
использование выглядит примерно
так:
uucp -r moj_fajl 'pulsar!fajl_tam'
перешлет moj_fajl на удаленную машину
pulsar. Хотя, скорее всего не сделает,
из-за ограничений на права доступа.
А, впрочем, такая команда скорее
всего сработает:
uucp -r moj_fajl 'pulsar!~'
через некоторое время этот файл
вы сможете обнаружить на машине pulsar
в каталоге
/usr/spool/uucppublic
в этот каталог разрешено
копирование с удаленных машин, для
него используется специальное
обозначение: "~"
Пусть вас не удивляет, что в
команде uucp использовались
одинарные кавычки. Они нужны, чтобы
заэкранировать "!" и "~" от
вашего командного интерпретатора
ksh или bash. Ключ -r в команде uucp нужен,
чтобы НЕ ЗАСТАВЛЯТЬ нашу машину
немедленно начинать звонить на pulsar.
Она сама позвонит, в
предусмотренное для этого время.
uucp поддерживается на двух
уровнях:
- Пользовательский. Это команды
uucp - постановка файла в очередь
на удаленную пересылку, и uux -
постановка в очередь на
пересылку удаленной команды.
- Системный. Периодически,
автоматически запускается
демон uucico - (UUCP Copy in Copy out). Он
созванивается с удаленными
машинами по телефону. На
удаленной машине также
запускается "встречный"
демон uucico. Наш демон
"проталкивает" на
удаленную машину все файлы,
которые к этому времени
накопились в очереди на
отправку туда. После этого он
"принимает" файлы, которые
приготовила для нас удаленная
машина (их к нам проталкивает
"встречный" демон uucico, а
наш принимает). После этого
сеанс uucico заканчивается. А
пользователи обнаруживают, что
у них возникли новые файлы.
Предполагается, что системные
администраторы на нашей и на
удаленной машине не забыли
правильно описать и
проконфигурировать систему UUCP.
Конфигурация нашей машины как
UUCP клиента.
После этого наша машина сможет
звонить на удаленные машины и
посылать/забирать оттуда файлы. Для
этого мы должны задать:
- Наше собственное UUCP имя.
- Имя(имена) удаленной(ых) UUCP
системы.
- Телефонный номер(а), по
которому нужно туда звонить.
- Login и пароль, которые выделены
там для нашего uucp-account'а.
- Порт, к которому подключен наш
модем.
- Наборщик - описание "AT"
команд для управления нашим
модемом.
Эти данные задаются в нескольких
конфигурационных файлах, которые
должны лежать в каталоге /etc/uucp
(или /usr/lib/uucp , или /usr/lib/uucp/taylor_config
) (или в каком-нибудь другом, см. man uucp
для более точной информации). Это
файлы:
Config # задает имя нашей машины (и многое другое) ;
Systems # описывает удаленные uucp-системы: имя, но-
# мер телефона, uucp-logname, uucp-passwd ;
Devices # порты, к которым подключены модемы.
Dialers # описывает модемы-наборщики (систему AT-ко-
# манд).
(А в Linux они называются: config, sys, port,
dial)
Итак, представим классический
случай. У вас один Hayes-совместимый
модем V32/V42bis на 14400 baud (GVC, ZyXEL,
US-Robotics...), подключенный к
последовательному порту /dev/modem
(если у вас порт называется /dev/contty03,
вам никто не мешает сделать
символический линк ln -s /dev/contty03
/dev/modem не так ли ?). Имя вашего узла
fedf-uru.
ВНИМАНИЕ. На
большинстве Unix-ов выделены
раздельные специальные файлы для
одного и того-же порта:
терминальная линия (для
подключения терминала или модема,
НА который будут звонить -
используется для getty или ttymon), и
линия с модемным управлением, на
выход - например, чтоб звонить
НАРУЖУ модемом. Эти специальные
файлы и называются по разному,
например:
SunOS: /dev/ttyy01 IN, /dev/ttyz01 OUT
Linux: /dev/ttyS1 IN, /dev/cua1 OUT
ISC: /dev/ttyFD01 IN, /dev/ttyFM01 OUT
SVR4/88: /dev/contty00 IN, /dev/??????? OUT
На самом деле все не
совсем так. Цитирую Linux-Serial-HOWTO:
> There has been some discussion on the merits of /dev/mouse
> and /dev/modem. I strongly discourage the use of these links.
> In particular, if you are planning on using your modem for
> dialin you will run into problems because the lock files will
> not work correctly if you use /dev/modem. Also, Taylor UUCP
> does not support symlinks either.
Однако uugetty позволяет
корректно отрабатывать эту
ситуацию. См. параметр ALTLOCK в /etc/defaults/getty
файле.
Вам надо подключиться к двум
uucp-узлам:
- Узел Релком, имя узла kiae,
телефоны: 9469984, 9469994. Вы
зарегистрированы там под
именем/паролем uufedurp/ABCd8
- Ваше московское отделение, имя
узла fedfond, телефон 095- 125-7623. Вы
зарегистрированы там под
именем/паролем uufedurp/KLmn10
В каталоге /etc/uucp редактируем
файлы Systems, Devices, Dialers
Systems: Удаленные машины
kiae Any modem1 19200 946-9984 "" nrdrdr ogin:-BREAK-ogin:
uufedurp ssword: ABCd8
fedfond Any modem1 19200 8w095-125-7623 "" nr ogin:-BREAK-ogin:
uufedurp ssword: KLmn10
Devices: Описание портов
modem1 contty03 - 19200 gvc1440
Dialers: Команды модемов
gvc1440 =,-, "" MdATZrc OKr EATDPTrc CONNECT mc
А дальше идет описание
Taylor-uucp. Проблема в том, что в
стандартной поставке SVR4/88 _нет_
Taylor-uucp, а есть только т.н. HoneyDanBer-uucp,
он же BNU (Basic Networking Utilities). Taylor новее и
гибче, к тому же поддерживает два
формата конфигурационных файлов -
традиционный (Config, Systems, Devices, Dialers, ...)
и свой (config, sys, port, dial, ...). Есть
конвертер туда-обратно. В Linuxе
Taylor-uucp скомпилирован так, чтобы
сначала искать Taylor-конфигурацию в
/usr/lib/uucp/taylor_config/, если там ничего нет
- искать HDB-конфигурацию в
/usr/lib/uucp/hdb_config/. IMHO главный изъян HDB -
невозможность указывать
альтернативные номера телефонов.
Если вы используете не
устаревший BNU-uucp, а Taylor-uucp 1.05: В
каталоге /usr/lib/uucp/taylor_config создаем
файлы config, sys, port, dial следующего
содержания:
config:
hostname fedf-uru # Наше собственное имя
sys: Удаленные
машины
system kiae # Узел Релком ############################
time Any
port modem1 # Имя описания порта в файле port
speed 38400
chat "" rd ogin:-BREAK-ogin: uufedurp ssword: ABCd8
phone 946-9984
alternate # Второй телефонный номер.
phone 946-9994
system fedfond # Московское отделение ##################
time Any
port modem1 # Имя описания порта в файле port
speed 38400
chat "" nr ogin:-BREAK-ogin: uufedurp ssword: KLmn10
phone 8=095-125-7623
port: Описание
портов
port modem1 # Обозначение порта из файла sys
type modem
device /dev/modem
speed 38400
dialer gvc1440 # Имя наборщика-модема в файле dial
dial: Команды
модемов
dialer gvc1440 # Обозначение наборщика из файла port
# Строка инициализации модема.
# Вместо T будет подставлен телефонный номер
chat "" ATZ OK ATH0E0Q0 OK ATDPT CONNECT
# ATZ - загрузить profile 0
# ATH0 - повесить трубку
# ATE0 - no echo
# ATQ0 - выводить код возврата
chat-fail BUSY # Воспринимать как ошибку набора
chat-fail ERROR
chat-fail NOsCARRIER
chat-fail NOsDIALTONE
Все. Клиентская часть UUCP
сконфигурирована. Теперь, чтобы
"протолкнуть" посланные файлы,
достаточно периодически выполнять
команды:
uucico -s kiae
uucico -s fedfond
А еще лучше, добавить эти команды
в crontab, чтобы они выполнялись
автоматически, по несколько раз в
сутки.
Конфигурирование UUCP с
использованием sysadm.
Все вышеперечисленные настройки
можно сделать, используя утилиту
системного администратора sysadm.
Надо войти в меню network_services / basic_network
Конфигурирование серверной
части UUCP.
Итак, мы уже можем звонить на
чужие машины, и пересылать на них
файлы. Теперь нужно сделать, чтобы
чужие машины (клиенты) могли
звонить нам. Для этого нужно:
- Иметь описание звонящей нам
uucp-системы в файле Systems - для
клиента такое же, как и для
сервера.
- Проверить права доступа для
клиента в файле Permitions
- Завести для него специальный
uucp-login
- Убедиться, что модем стоит в
"Auto-answer" режиме, и на порт
/dev/modem запущена программа getty
(или ttymon), позволяющая
логиниться по телефону на порт
/dev/modem
- Описание добавляется в файл
Systems, (номер телефона и название
порта не обязательны), если мы
сами не собираемся туда
звонить, но я бы посоветовал их
вписать, для единообразия.
- В файле /etc/passwd завести строчку
вида:
uupetrov:x:1002:14:UU
Petrov:/var/spool/uucp:/usr/lib/uucp/uucico
выполнить команды:
pwconv
passwd uupetrov
- Любой терминальной программой
"войти" в модемный порт и
выполнить команды
atz0 # Загрузить пользовательский profile 0
ats0=1 # Регистр0=1 - снимать трубку после 1-го звонка
at&w0 # Сохранить текущий setup в profile 0
at&y0 # Чтобы при включении питания загружался профайл 0
# at&f # загрузить заводские установки, если вы запутались
# с профайлами, можно сделать модему "reset"
Ввиду отсутствия
коммуникационных программ в SVR4
(за исключением сумасшедшего
"cu"), используйте "echo".
echo atz0 > /dev/modem
echo ats0=0 > /dev/modem
echo at&w0 > /dev/modem # и так далее
А еще лучше gold, там есть режим
прямой связи с любым портом.
- В файле /etc/inittab иметь строчку
вида:
c3:234:respawn:/usr/lib/saf/ttymon -g -d
/dev/modem -l contty
Что где лежит в системе UUCP.
- /usr/bin/uucp - переслать
файлы с/на удаленную uucp-систему
- /usr/bin/uux - выполнить
команду на удаленной
uucp-системе
- /usr/bin/uustat - статистика
по выполненным пересылкам
- /usr/lib/uucp/uu* - системные
утилиты UUCP
- /etc/uucp - каталог
конфигурационных файлов UUCP
- /usr/lib/uucp/taylor_config -
конфигурация UUCP в Linux
- /usr/lib/uucp/ - конфигурация
UUCP в других системах
- /var/spool/uucppublic - каталог в
который можно пересылать файлы
с удаленных машин
- /usr/spool/mqueue - очереди
отправляемой электронной
почты
- /usr/ucblib/mqueue - или здесь
эта очередь ?
- /var/spool/uucp/"машина"
- очередь файлов на отправку на
"машину"
- /var/spool/uucp/.Log -
статистика о работе uucp
Осталось настроить нашу
электронную почту.
Если у вас самый простейший
случай: вся ваша почта проходит
через один "знающий" host, с
которым вы соединены по uucp, то надо
в файле /etc/sendmail.cf иметь такую
строку:
. . .
# "Smart" relay host (may be null)
DSuucp-dom:kiae
. . .
В этом случае вся ваша внешняя
почта (т.е. отправляемая за пределы
вашей локальной сети) будет
переправляться по uucp на uucp-узел
"kiae" и дальнейшей ее доставкой
будет озабочен именно kiae.
Предполагается, что он успешно
справится с этой задачей.
А еще чтобы было описание uucp-dom
(ниже в том же файле). Кстати, чтобы
всех окончательно запутать, sendmail.cf
лежит вовсе не в /etc/, а в /usr/ucblib/.
Если у вас какой-либо другой
случай - то это - тяжелый случай.
Дерзайте, успехов вам!
# И надо сделать, чтоб сендмаил не отрезал 8-й бит у посылаемой почты
# Если sendmail8.x.x, то в sendmail.cf:
# strip message body to 7 bits on input?
O7False
# А еще бывает, что sendmail не знает, как правильно называется
# наша машина. Тогда мы пишем что-то в таком стиле:
Cwsystud.ras.ru
Cwserver.systud.ras.ru
Cwlocalhost
Проверка работоспособности и
отладка конфигурации.
Для начала проверим, правильно ли
подсоединен модем. Запускаем
программу cu - эмулятор терминала.
cu -l /dev/modem # Или как там у вас этот порт называется
После этого вы переключитесь на
работу со своим модемным портом.
Все, что вы будете набирать с
клавиатуры, будет перенаправляться
в порт /dev/modem , все, что
"приходит" с этого порта, будет
рисоваться на вашем терминале.
Попробуйте модемом набрать
телефонный номер
atdp100
Проверьте, правильно ли
сконфигурирован "порт" модема
и описание системы в файле Systems.
cu pulsar
Проверьте права доступа к файлам
/dev/modem, /dev/contty*. Должно быть (???):
crw-rw---- 1 root uucp ... /dev/contty0
crw-rw---- 1 root uucp ... /dev/modem
Запустите uucico с максимальным
уровнем выдачи отладочной
информации. Запускать надо из под
пользователя uucp
/usr/lib/uucp/uucico -r1 -x9 -f -s pulsar
/usr/lib/uucp/uucico -x all -f -s kiae
А затем посмотрите на содержание
файлов со статистикой uucp в каталоге
/var/spool/uucp :
.Admin/audit.local
.Log/
.Status/
ERRLOG
LOGFILE
SYSLOG
Например, такой командой
tail -f /var/uucp/.Admin/audit.local &
tail -f /var/uucp/.Log/uucico/kiae
По результатам переписки.
Dmitry Mayorov Compulsory Health Insurance Fund
Phone: +7 (812) 112-3517 St. Petersburg, Russia
> Навешал фильтров на sendmail, rmail,
> а вот это непонятно. Или они научились все из кои8 в исо переворачивать на лету ?
Нет, конечно, потребовалось лечить. Дело сильно упростило то
обстоятельство, что внутри сети везде ISO. Перекодировать по-
этому мне надо только то, что идет через UUCP, то бишь наружу.
Для этого пришлось:
1. Поправить sendmail.cf:
# RelCom UUCP - with ISO 8859-5 to KOI-8 translation
Muucp-koi, P=/usr/local/bin/_uux, F=mDFMhu, S=52/31, R=21, M=100000,
^^^^^^^^^^^^^^^^^^^ мой, см. ниже
A=_uux - -r -a$f -gC $h!rmail ($u)
2. Сделать /usr/local/bin/_uux из трех строк:
#!/bin/sh
PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin:
/usr/local/bin/iso-koi | /usr/bin/uux $*
(iso-koi - понятно какой фильтр)
Это все, на самом деле, весьма грязный hack - вряд ли стоит его
включать в учебник. Оно, конечно, работает, но вот надо по
крайней мере еще и правильный код возврата как-то обеспечить -
с проверкой ошибок и прочими фенечками.
Чтобы принимаемая почта из KOI превращалась в ISO, достаточно:
1. Переименовать rmail в /usr/local/bin/__rmail;
2. Сделать свой rmail, тоже из трех строчек:
#!/bin/sh
PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin:
/usr/local/bin/koi-iso | /usr/local/bin/__rmail $*
Вышеуказанную экзекуцию надо производить именно над rmail, по-
тому что rbmail проверяет контрольные суммы.
А вот rbmail в SVR4/88 совсем нет. Надо искать исходники, собирать...
А RelCom (по крайней мере мой провайдер) именно его пользует.
Это третья причина (после отсутствия Taylor-uucp и удобного
Mail-user агентa), по которой я не стал поднимать
uucp/e-mail на Motorolе.
--
Dmitry Mayorov Compulsory Health Insurance Fund
Phone: +7 (812) 112-3517 St. Petersburg, Russia
[Назад] [Содержание] [Вперед]
|