Linux callback howto.
В багатьох новачків-лінуксоїдів виникає питання: як використовувати послугу зворотнього виклику для роботи в мережі Інтернет. Якщо для користувачів систем М$ цієї проблеми не існує взагалі, то для юнікс-подібних систем потрібно дещо “потанцювати з бубном”. Отже переходимо для розгляду цієї проблеми.
Взагалі для роботи callback в Linux потрібно небагато: ppp версії 2.4.1 чи новішої, зібраної з підтримкою протоколу CBCP, щосьзграфічним_інтерфейсом для роботи через ppp в зручному режимі (не всім зручно працювати в консолі), ще обов'язково: модем та телефонна лінія, не зайвим буде й аккаунт якого-небудь провайдера з callback %).
Перше: підтримка протоколу CBCP в ppp. Якщо ви не впевнені в наявності необхідних
опцій, то робимо наступне: завантажуємо сирці ppp з http://ppp.samba.org (або
беремо його з диску сирців, якщо він є), розпаковуємо,
знаходимо файл ./pppd/Makefile.linux
та прибираємо коментар з рядка CBCP=y
.
Після цього йдуть стандартні:
$ ./configure
$ make
$ su
[root@host]# make install
Треба зауважити, що /usr/sbin/pppd
має бути suid.
Отже, маємо ppp з підтримкою всього, що нам потрібно. Можемо починати працювати. Перший (графічний) метод: беремо kppp зі складу KDE 3.3 або chestnut-dialer (що кому до вподоби) й заповнюємо в них усі потрібні поля, у крайньому разі — читаємо інструкцію до вибраної дзвонилки.
Метод другий (консольний): тут вже на що в кого вистачить фантазії, але
найголовніше створити peer-конфіги (тека /etc/ppp/peers
), наводжу свої:
CB
/dev/ttyS0
115200
connect '/usr/bin/chat -f /etc/ppp/dialCB.ch -r /var/log/chat.report'
defaultroute
lock
ipcp-accept-local
ipcp-accept-remote
noauth
user *******
callback #######
-detach
CBAnswer
/dev/ttyS0
115200
connect '/usr/bin/chat -f /etc/ppp/dialCBAnswer.ch -r
/var/log/chat.report'
defaultroute
lock
ipcp-accept-local
ipcp-accept-remote
noauth
user ******
callback #######
-detach
Гадаю, всі зрозуміли, що замість зірочок пишемо логін, а замість ####### — свій номер.
Тепер створюємо файл /etc/ppp/dialCB.ch, в якому пишемо:
REPORT CONNECT
ABORT BUSY
ABORT "NO CARRIER"
ABORT ERROR
ABORT "NO DIALTONE"
""
"at&f"
TIMEOUT 5
OK
ATDP#######
TIMEOUT 70
CONNECT
та dialCBAnswer.ch:
REPORT CONNECT
ABORT BUSY
ABORT "NO CARRIER"
ABORT ERROR
ABORT "NO DIALTONE"
""
"at&f"
TIMEOUT 5
OK
""
TIMEOUT 60
RING
ATA
TIMEOUT 40
CONNECT
В мене все це працювало за допомогою скрипта:
#!/bin/sh
while [ 1=1 ]; do
echo "===> Starting pppd"
/usr/sbin/pppd call CB
echo "===> Waiting for incoming call"
/usr/sbin/pppd call CBAnswer
echo "===> Connection terminated"
sleep 2
done
Всі скрипти були написані Олександром Мотіним (mav@alkar.net) та трохи адаптовані мною під лінукс.
З'єднувався запуском, роз'єднувався вбивством скрипта (хоча це й не зовсім зручно, але мене влаштовувало).
Ну а тепер — швидких ліній та “а ні busy ні disconnect'у”.