ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] Новый инитскрипт для pptp-client
@ 2003-05-30 11:30 Yura Zotov
  2003-05-31  0:14 ` Sergey Plyukhin
  0 siblings, 1 reply; 5+ messages in thread
From: Yura Zotov @ 2003-05-30 11:30 UTC (permalink / raw)
  To: Sisyphus List

[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]

В аттаче новый инитскрипт, которым я планирую заменить
/etc/init.d/pptptunnel в новой версии пакета. Прошу всех
заинтересованных посмотреть, попробовать и высказать
замечание/предложения. Будет работать только для
pptp-client >= 1.1.0.

Изменения по сравнению со старой версией:
1. имя туннеля для старта должно быть ЯВНО указано в переменной
   PPTP_TUNNEL в /etc/sysconfig/pptp
2. при старте туннеля не будут добавлены маршруты, определённые
   при настройке туннеля командой pptp-command. Маршруты также
   нужно добавлять в /etc/ppp/ip-up.local.
3. теперь этот скрипт НЕ устанавливает HOSTNAME, так что если, вам
   нужно менять имя машины после старта туннеля, делайте это из
   /etc/ppp/ip-up.local

1 и 2 из-за того, что для старта туннеля теперь не используется
pptp-command start. 3, потому что я считаю /etc/ppp/ip-up.local
более правильным.

Для старта pppd используется параметр linkname, чтобы заранее
знать имя PID-файла. Будьте внимательны, и не используйте этот
параметр в собственных файлах настроек для pppd, относящихся к
данному туннелю. Также для старта pppd используется параметр
updetach. Из-за этого использование в настройках pppd параметра
persist может надолго остановить старт туннеля и системы, если
pptp не сможет установить соединение.

По вопросам настроек pppd -- man pppd.

Замечания и предложения приветствуются.


--
Юрий А. Зотов

[-- Attachment #2: pptptunnel.new --]
[-- Type: text/plain, Size: 1568 bytes --]

#! /bin/sh
#
# chkconfig: - 11 89
# description:	Starts and stops PPTP connection.
# processname: pptptunnel
# config: /etc/sysconfig/network
# config: /etc/sysconfig/pptp


WITHOUT_RC_COMPAT=1

# Source function library.
. /etc/init.d/functions

SourceIfNotEmpty /etc/sysconfig/network
SourceIfNotEmpty /etc/sysconfig/pptp

PIDFILE=/var/run/ppp-$PPTP_TUNNEL.pid
LOCKFILE=/var/lock/subsys/pptptunnel
RETVAL=0

SERVICE_NAME="\"$PPTP_TUNNEL\" PPTP tunnel"

start()
{
	msg_starting "$SERVICE_NAME"
	
	if [ "x$PPTP_TUNNEL" = "x" ]; then
		echo -n "tunnel not defined!"
		failure "tunnel not defined!"
		exit 1
	fi
	

    start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user root --no-announce -- \
	             pppd call $PPTP_TUNNEL linkname $PPTP_TUNNEL updetach
    RETVAL=$?
	
	return $RETVAL
}

stop()
{
	msg_stopping "$SERVICE_NAME"
	stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user root --no-announce pppd
	RETVAL=$?
	return $RETVAL
}

restart()
{
	stop
	start
}

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart|reload)
		restart
		;;
	condstop)
		if [ -e "$LOCKFILE" ]; then
			stop
		fi
		;;
	condrestart)
		if [ -e "$LOCKFILE" ]; then
			restart
		fi
		;;
	condreload)
		if [ -e "$LOCKFILE" ]; then
			restart
		fi
		;;
	status)
		msg_already_running "$SERVICE_NAME"
		echo
		status --pidfile "$PIDFILE" --expect-user root --no-anounce pppd
		RETVAL=$?
		;;
	*)
		msg_usage "${0##*/} {start|stop|restart|reload|condstop|condrestart|condreload|status}"
		RETVAL=1
esac

exit $RETVAL

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [sisyphus] Новый инитскрипт для pptp-client
  2003-05-30 11:30 [sisyphus] Новый инитскрипт для pptp-client Yura Zotov
@ 2003-05-31  0:14 ` Sergey Plyukhin
  2003-05-31 10:52   ` Yura Zotov
  0 siblings, 1 reply; 5+ messages in thread
From: Sergey Plyukhin @ 2003-05-31  0:14 UTC (permalink / raw)
  To: Sisyphus List

Здравствуйте,

On 15:30 Fri 30 May     , Yura Zotov wrote:
> Изменения по сравнению со старой версией:
> 1. имя туннеля для старта должно быть ЯВНО указано в переменной
>    PPTP_TUNNEL в /etc/sysconfig/pptp
> 2. при старте туннеля не будут добавлены маршруты, определённые
>    при настройке туннеля командой pptp-command. Маршруты также
>    нужно добавлять в /etc/ppp/ip-up.local.
но ведь не всегда туннель поднимается сразу с соединением :-(
вполне оправдано поднятие pptp с диалапной машины, но для конкретных
задач только. Подключился к сети, понадобилось VPN подключение - 
поднял, поработал - опустил. (очень удобно через service pptptunnel)
Остальные как работали так и продолжают :-)
Может все-же оставить возможность перестройки маршрутизации VPN при
поднятии самого VPN (и соответственной перестройки обратно) 
{как сейчас еще ;-)} Ведь для boot-up VPN это не помешает.

> 3. теперь этот скрипт НЕ устанавливает HOSTNAME, так что если, вам
>    нужно менять имя машины после старта туннеля, делайте это из
>    /etc/ppp/ip-up.local
опять получается "слишком глобальное" изменение для dial-up
> 
> 1 и 2 из-за того, что для старта туннеля теперь не используется
> pptp-command start. 3, потому что я считаю /etc/ppp/ip-up.local
> более правильным.
тогда уж /etc/ppp/ip-up.d/ 
> 
> Для старта pppd используется параметр linkname, чтобы заранее
> знать имя PID-файла. Будьте внимательны, и не используйте этот
> параметр в собственных файлах настроек для pppd, относящихся к
> данному туннелю. Также для старта pppd используется параметр
> updetach. Из-за этого использование в настройках pppd параметра
> persist может надолго остановить старт туннеля и системы, если
> pptp не сможет установить соединение.
> 
> По вопросам настроек pppd -- man pppd.
> 
> Замечания и предложения приветствуются.
> 
> 
> --
> Юрий А. Зотов

СПАСИБО за предупреждение, а то после dist-upgrade день на восстановление
системы приходится тратить :-)

--
С наилучшими пожеланиями-
Сергей Плюхин=



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [sisyphus] Новый инитскрипт для pptp-client
  2003-05-31  0:14 ` Sergey Plyukhin
@ 2003-05-31 10:52   ` Yura Zotov
  2003-06-01  2:00     ` Sergey Plyukhin
  0 siblings, 1 reply; 5+ messages in thread
From: Yura Zotov @ 2003-05-31 10:52 UTC (permalink / raw)
  To: Sisyphus List

On Sat, May 31, 2003 at 01:14:14PM +1300, Sergey Plyukhin wrote:
> Здравствуйте,
> 
> On 15:30 Fri 30 May     , Yura Zotov wrote:
> > Изменения по сравнению со старой версией:
> > 1. имя туннеля для старта должно быть ЯВНО указано в переменной
> >    PPTP_TUNNEL в /etc/sysconfig/pptp
> > 2. при старте туннеля не будут добавлены маршруты, определённые
> >    при настройке туннеля командой pptp-command. Маршруты также
> >    нужно добавлять в /etc/ppp/ip-up.local.
> но ведь не всегда туннель поднимается сразу с соединением :-(
> вполне оправдано поднятие pptp с диалапной машины, но для конкретных
> задач только. Подключился к сети, понадобилось VPN подключение - 
> поднял, поработал - опустил. (очень удобно через service pptptunnel)
> Остальные как работали так и продолжают :-)
> Может все-же оставить возможность перестройки маршрутизации VPN при
> поднятии самого VPN (и соответственной перестройки обратно) 
> {как сейчас еще ;-)} Ведь для boot-up VPN это не помешает.
> 
> > 3. теперь этот скрипт НЕ устанавливает HOSTNAME, так что если, вам
> >    нужно менять имя машины после старта туннеля, делайте это из
> >    /etc/ppp/ip-up.local
> опять получается "слишком глобальное" изменение для dial-up
> >

Лично я пользуюсь и диалапом, и PPTP совершенно свободно и
независимо, поэтому никаких проблем не вижу. Вероятно, надо
просто похитрее написать скрипты ip-up.*

Я делаю так:

/etc/ppp/peers/tunnel_name:
...
ipparam "tunnel_name"
...

============/etc/ppp/ip-up.local=======================
#!/bin/sh

SCRIPT=/etc/ppp/ip-down.$6

[ -x $SCRIPT ] && $SCRIPT $@

всё, в этом файле больше ничего нету.

============/etc/ppp/ip-up.tunnel_name==================
#!/bin/bash

interface_name=$1
local_IP_address=$3 
remote_IP_address=$4
ipparam=$5

#echo -e "$interface_name\n$tty_name\n$speed\n$local_IP_address\n$remote_IP_address\n$ipparam"> /ip-up.pptp.out

emails_file=/etc/ppp/email.list
MAX_RETRIES=10

restart_service()
{
	/sbin/service $1 restart &> /dev/null
}

ip2mail()
{
	for mail_address in `cat $emails_file`
	do
		echo -e "Name: $HOSTNAME\nIP: $local_IP_address" | mail -s "New IP" "$mail_address"
	done
}

i=0
while [ $i -le $MAX_RETRIES ]
do
	i=$((i+1))
	HOSTNAME=`host $local_IP_address | awk '/domain name pointer/ { sub(/\.$/, ""); print $5 }'`
	if [ "x$HOSTNAME" != "x" ]; then
		hostname $HOSTNAME
		initlog -s "Hostname set to $HOSTNAME" -n "ip-up.pptp"
		restart_service ntpd
		restart_service postfix
		ip2mail
		exit 0
	else
		ERROR_MSG="Hostname lookup failed "
		mail -s "ip-up.pptp: $ERROR_MSG" root@localhost
		sleep 2
	fi
done

Соответственно, в ip-up.tunnl_name можно и route делать и всё,
что хочешь. А все остальные соединения остаются как есть, так как
в /etc/ppp/ip-up.local идёт выбор скрипта по ipparam.
Единственное что нужно делать -- это использовать ipparam. Правда,
недавно я обнаружил неудобство. Выяснилось, что для настройки всех
соединений wvdial использует один единственный
/etc/ppp/peers/wvdial, что, конечно же сильно портит преимущества
данной схемы. Но это всё равно касается только wvdial, так как
для PPTP-туннеля можно указать ipparam и в /etc/ppp/ip-up.local
вписать строчки для выполнения этого скрипта.

Т.о. получается, что PPTP-туннель легко делается независимым и не
влияющим на остальные PPP-соединения.

Ваши замечания?

По вопросам какие параметры передаются скриптам и в каком порядке
man pppd.

> > 1 и 2 из-за того, что для старта туннеля теперь не используется
> > pptp-command start. 3, потому что я считаю /etc/ppp/ip-up.local
> > более правильным.
> тогда уж /etc/ppp/ip-up.d/ 
> > 

По-моему это не годится, так как выполняется для всех соединению
автоматически.


--
Юрий А. Зотов


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [sisyphus] Новый инитскрипт для pptp-client
  2003-05-31 10:52   ` Yura Zotov
@ 2003-06-01  2:00     ` Sergey Plyukhin
  2003-06-01  6:31       ` Yura Zotov
  0 siblings, 1 reply; 5+ messages in thread
From: Sergey Plyukhin @ 2003-06-01  2:00 UTC (permalink / raw)
  To: Sisyphus List

On 14:52 Sat 31 May     , Yura Zotov wrote:
> > > 3. теперь этот скрипт НЕ устанавливает HOSTNAME, так что если, вам
> > >    нужно менять имя машины после старта туннеля, делайте это из
> > >    /etc/ppp/ip-up.local
> > опять получается "слишком глобальное" изменение для dial-up
> > >
> 
> Лично я пользуюсь и диалапом, и PPTP совершенно свободно и
> независимо, поэтому никаких проблем не вижу. Вероятно, надо
> просто похитрее написать скрипты ip-up.*
> 
> Я делаю так:
> 
> /etc/ppp/peers/tunnel_name:
> ...
> ipparam "tunnel_name"
> ...
получается "ссылка сам на себя"
нужное слово уже есть в имени файла
> 
> ============/etc/ppp/ip-up.local=======================
> #!/bin/sh
> 
> SCRIPT=/etc/ppp/ip-down.$6
здесь не опечатка?
> 
> [ -x $SCRIPT ] && $SCRIPT $@
> 
> всё, в этом файле больше ничего нету.
> 
> ============/etc/ppp/ip-up.tunnel_name==================
> #!/bin/bash
> 
> interface_name=$1
> local_IP_address=$3 
> remote_IP_address=$4
> ipparam=$5
> 
> #echo -e "$interface_name\n$tty_name\n$speed\n$local_IP_address\n$remote_IP_address\n$ipparam"> /ip-up.pptp.out
> 
> emails_file=/etc/ppp/email.list
> MAX_RETRIES=10
> 
> restart_service()
> {
> 	/sbin/service $1 restart &> /dev/null
а не получится тут разрыв связи модемом?
> }
> 
> ip2mail()
> {
> 	for mail_address in `cat $emails_file`
> 	do
> 		echo -e "Name: $HOSTNAME\nIP: $local_IP_address" | mail -s "New IP" "$mail_address"
> 	done
> }
> 
> i=0
> while [ $i -le $MAX_RETRIES ]
> do
> 	i=$((i+1))
> 	HOSTNAME=`host $local_IP_address | awk '/domain name pointer/ { sub(/\.$/, ""); print $5 }'`
> 	if [ "x$HOSTNAME" != "x" ]; then
> 		hostname $HOSTNAME
> 		initlog -s "Hostname set to $HOSTNAME" -n "ip-up.pptp"
> 		restart_service ntpd
> 		restart_service postfix
> 		ip2mail
> 		exit 0
> 	else
> 		ERROR_MSG="Hostname lookup failed "
> 		mail -s "ip-up.pptp: $ERROR_MSG" root@localhost
> 		sleep 2
> 	fi
> done
> 
> Соответственно, в ip-up.tunnl_name можно и route делать и всё,
> что хочешь. А все остальные соединения остаются как есть, так как
> в /etc/ppp/ip-up.local идёт выбор скрипта по ipparam.
в примере как-то "обще" и нет ничего об удалении маршрутов 
после опускания туннеля. Но это, конечно, поправимо :-)
> Единственное что нужно делать -- это использовать ipparam. 
> 
> Т.о. получается, что PPTP-туннель легко делается независимым и не
> влияющим на остальные PPP-соединения.
именно этого и надо :-)
> 
> Ваши замечания?
получается "новый" /etc/ppp/ip-up.tunnel_name  "почти калька" с 
существующего /etc/ppp/peers/__default. Может просто в этот файл и
добавить необходимые изменения?
Или существует какая-то иная причина и необходимо отказаться именно от
/etc/ppp/peers ?

В принципе все-равно откуда ставить маршруты из /etc/ppp/peers/__default
или /etc/ppp/ip-up.tunnel_name :-)
Это не первая и не последняя "переделка"
В любом случае спасибо за разьяснения.

> 
> По вопросам какие параметры передаются скриптам и в каком порядке
> man pppd.
> --
> Юрий А. Зотов



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [sisyphus] Новый инитскрипт для pptp-client
  2003-06-01  2:00     ` Sergey Plyukhin
@ 2003-06-01  6:31       ` Yura Zotov
  0 siblings, 0 replies; 5+ messages in thread
From: Yura Zotov @ 2003-06-01  6:31 UTC (permalink / raw)
  To: Sisyphus List

On Sun, Jun 01, 2003 at 03:00:09PM +1300, Sergey Plyukhin wrote:
> > Лично я пользуюсь и диалапом, и PPTP совершенно свободно и
> > независимо, поэтому никаких проблем не вижу. Вероятно, надо
> > просто похитрее написать скрипты ip-up.*
> > 
> > Я делаю так:
> > 
> > /etc/ppp/peers/tunnel_name:
> > ...
> > ipparam "tunnel_name"
> > ...
> получается "ссылка сам на себя"
> нужное слово уже есть в имени файла
> > 

не понял

> > ============/etc/ppp/ip-up.local=======================
> > #!/bin/sh
> > 
> > SCRIPT=/etc/ppp/ip-down.$6
> здесь не опечатка?
> > 

Да, опечатка. Я скопировал сюда по ошибке свой ip-down.local.
Впрочем, отличия только в словах up и down.

> > 
> > restart_service()
> > {
> > 	/sbin/service $1 restart &> /dev/null
> а не получится тут разрыв связи модемом?

Ну, зависит от демона. Просто у меня динамический IP по PPTP
соответственно ему выставляется "динамическое" доменное имя.
Некоторые программы (postfix, ntpd) оказались чувствительны к
изменению имени и IP, поэтому им надо делать restart.

> > 
> > Соответственно, в ip-up.tunnl_name можно и route делать и всё,
> > что хочешь. А все остальные соединения остаются как есть, так как
> > в /etc/ppp/ip-up.local идёт выбор скрипта по ipparam.
> в примере как-то "обще" и нет ничего об удалении маршрутов 
> после опускания туннеля. Но это, конечно, поправимо :-)

Просо мне маршруты не нужны. Мне хватает одного всегда
определённого статического.

> > Единственное что нужно делать -- это использовать ipparam. 
> > 
> > Т.о. получается, что PPTP-туннель легко делается независимым и не
> > влияющим на остальные PPP-соединения.
> именно этого и надо :-)
> > 
> > Ваши замечания?
> получается "новый" /etc/ppp/ip-up.tunnel_name  "почти калька" с 
> существующего /etc/ppp/peers/__default. Может просто в этот файл и
> добавить необходимые изменения?
> Или существует какая-то иная причина и необходимо отказаться именно от
> /etc/ppp/peers ?

Файл ы /etc/ppp/peers -- это конфигурационные файлы для pppd.
Авторы pptp-command решили в них хранить в комментариях ещё и
информацию для роутинга и т.п. pptp-command просто читает эти
комментарии и делает маршруты. К сожалению, pptp-command имеет
недостатки, которые не позволяют его дальше использовать в
дистрибутиве для старта туннеля, поэтому я и написал новый
скрипт.

Файлы /etc/ppp/ip-up.local и т.п. -- это программы (чаще всего на
языке командного интерпретатора), которые пользователь пишет для
выполнения определённых действий по факту поднятия или падения
определённого PPP-интерфейса.

Так что разница принципиальна: конфиги -- программы.

> 
> В принципе все-равно откуда ставить маршруты из /etc/ppp/peers/__default
> или /etc/ppp/ip-up.tunnel_name :-)
> Это не первая и не последняя "переделка"
> В любом случае спасибо за разьяснения.
> 

На самом деле есть всё-так нюанс. /etc/init.d/pptptunnel по
умолчанию запускается сразу после /etc/init.d/network. Раньше
можно было гарантировать, что все действия из него (изменение
имени машины, настройка маршрутов и т.п.) будут выполнены до
старта остальных сервисов, например postfix. Теперь же, эту
гарантию дать нельзя, так как скрипт ip-up.tunnel_name
запускается отдельным процессом и pppd не ждёт его завершения. Я
ещё не решил, насколько эта гарантия важна.
 

--
Юрий А. Зотов


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-06-01  6:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-30 11:30 [sisyphus] Новый инитскрипт для pptp-client Yura Zotov
2003-05-31  0:14 ` Sergey Plyukhin
2003-05-31 10:52   ` Yura Zotov
2003-06-01  2:00     ` Sergey Plyukhin
2003-06-01  6:31       ` Yura Zotov

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git