Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Katkojaskripti

1 view
Skip to first unread message

Olli Lounela

unread,
Nov 30, 1997, 3:00:00 AM11/30/97
to

Nyt lopultakin näyttää, että olen saanut oman katkojaskriptini toimimaan ja
debugattua. Varmaan siinä on edelleen viilaamista, mutta olkaatten hyvät.
Mainintana siitä, miksi tuon olen tehnyt vakka Lasu oman systeeminsä ajat
sitten julkistikin, on etten tykkää cronin käytöstä puuhaan; en ihan luota
siihen että se katkaisee linjan ajoissa.

dialcmd:n numero 123456 tulee korvata sillä mihin soitetaan, ja tunnari siis
omalla (verkon, so. vastaajapään) käyttäjätunnuksella.

-----klippeti-----klippeti-----klippeti-----klap-----

#!/bin/sh
pppfile="/var/run/ppp0.pid"
dialcmd="ATDT123456"
tunnari="olounela"

rm -f /tmp/ppp.log
while : ; do
echo "`date`: ppp script dialing" >> /tmp/ppp.log
/usr/sbin/pppd /dev/modem 38400 name $tunnari noipdefault defaultroute crtscts connect '/usr/sbin/chat -t 60 -v ABORT "NO CARRIER" ABORT BUSY "" $dialcmd CONNECT '
count=7
while [ "$count" != "0" ]; do
sleep $count
if [ -f $pppfile ]; then
sleep 2
fi
count=`expr $count - 1`
done
if [ -f $pppfile ]; then
echo "`date`: ppp id `cat $pppfile`; script going to long sleep" >> /tmp/ppp.log
sleep 1710
echo "`date`: ppp script woke up" >> /tmp/ppp.log
if [ ! -f $pppfile ]; then
echo "`date`: ppp lock missing, assuming user exit and quitting"
exit 0
fi
echo "`date`: ppp script killing process `cat $pppfile`"\
>> /tmp/ppp.log
kill -HUP `cat $pppfile`
sleep 10
fi
done

-----palk-----iteppilk-----iteppilk-----iteppilk-----

Skripti soittaa epäonnistuessaan aina 38 sekunnin välein, ja tarkistaessaan
että linja on ja pysyy nukkuu 42 sekuntia ennen kuin siirtyy varsinaiseen
nukkuvaiheeseen. Näin varsinainen yhteysaika per soittokierros on enintään
29 min 12 s. Näiden luulisi riittävän hitaastikin katkoville ja herääville
linjoille.

Jos viipeet kuitenkaan eivät riitä (tai ovat liikaa) on tuo silmukka
count=7:n jälkeen nukkuminen sekä epäonnistumisen jälkeen (7+6+5+4+3+2+1 s)
että linjaa varmistettaessa (enintään edellinen + 7 * 2 s), ja varsinainen
nukkuaika on tuo 1710 sekuntia. Tämä 1710 s lisättynä varmistusaikaan on
siis tarkoitus olla alle 30 min (= 1800 s). Perusnukkuma aina katkaisun
jälkeen on tuo sleep 10.

Homma autentikoi oletusarvoisesti PAPilla, siis siten, että tunnari haetaan
tiedostosta /etc/ppp/pap-secrets, jonne pitää laittaa rivi (huom! korvaa
omatunnari tunnuksellasi ja omasalasana salasanallasi)

omatunnari * omasalasana

Skriptissä on pari riviä, jotka ovat ylipitkiä, nämä siksi etten ole saanut
vielä iteroitua että miten ne -- erityisesti pppd -- siististi katkotaan
kuitenkin niin että skripti toimisi. Niiden sisältö (siltä varalta että
nyytisvälitys pätkäisee ne) on:

/usr/sbin/pppd /dev/modem 38400 name $tunnari noipdefault defaultroute
crtscts connect '/usr/sbin/chat -t 60 -v ABORT "NO CARRIER" ABORT BUSY
"" $dialcmd CONNECT '

echo "`date`: ppp id `cat $pppfile`; script going to long sleep" >>
/tmp/ppp.log

Erityisesti tuo pppd-rivi tarvinnee räätälöidä omiin tarpeisiin; erityisesti
numero on poistettu. Muilta osin toiminee ainakin Helsingin ylipoistolla :)

Suojaukset ovat seuraavat:
Skriptin /usr/local/bin/ppp ajan sudo:lla moodissa 500 (-r-x------)
(jos ikkunat/päätesessiot ovat tiukassa niin tausta-ajona)
/etc/ppp hakemisto on 755 (drwxr-xr-x)
/etc/ppp/pap-secrets on 600 (-rw-------)

Lisäksi sitten olen kirjoittanut äärisimppelin skriptin nimeltä pppkill,
joka niinikään ajetaan sudo:lla moodissa 500, ja lähinnä säästää
kirjoittamista ja muistamista:

-----klippeti-----klippeti-----klippeti-----klap-----

#!/bin/sh
kill `cat /var/run/ppp0.pid`

-----palk-----iteppilk-----iteppilk-----iteppilk-----

Tuohon ensimmäiseen voisi vääntää sen vielä, että se selaa useita numeroita,
mutta en ole jaksanut, kun 1.11. alkaen ylipoistolla tuntuu tilaa olevan.
Tosin mulla on numeroita selaava mutta suboptimaalinen skripti ajalta kun
ylipoisto oli täynnä, mutta se pitäisi siivota ennen kuin sen julkaisee...

Kannattaa pitää mielessä, että yleensä suuremmat palveluntarjoajat antavat
lennosta soittajalle IP:n poolista, joten ei ole millään tavoin taattua että
IP on sama linjan katkettua. Näiun päätesessiot luultavasti kuolevat, ellei
jonnekin ole asetettu uudelleensuuntaaja -- joku sellaisen taisikin joskus
muutama viikko sitten julkistaa.

Ainiin, loki jota tuo tekee on /tmp/ppp.log, jossa meikäläisellä juuri nyt
seuraavan näköistä ilmoitusta (juu, vastapään motukka on hidas tappamaan
linjaa, virheenkorjaus jnpp):

-----klippeti-----klippeti-----klippeti-----klap-----

Sun Nov 30 16:42:55 EET 1997: ppp script dialing
Sun Nov 30 16:43:34 EET 1997: ppp id 924; script going to long sleep
Sun Nov 30 17:12:04 EET 1997: ppp script woke up
Sun Nov 30 17:12:05 EET 1997: ppp script killing process 924
Sun Nov 30 17:12:15 EET 1997: ppp script dialing
Sun Nov 30 17:12:44 EET 1997: ppp script dialing
Sun Nov 30 17:13:23 EET 1997: ppp id 1088; script going to long sleep

-----palk-----iteppilk-----iteppilk-----iteppilk-----

Toivottavasti näistä on iloa jolle kulle.
--
Olli ...and he thought I'm serious! Hahahaha...

Olli Lounela

unread,
Dec 1, 1997, 3:00:00 AM12/1/97
to

GRRR! Taas yritin olla liian fiksu, mutta ei.

RedHat 4.2:n /bin/sh siis käyttäytyy seuraavasti:

>bash$ foo="kdhfsoig"
>bash$ echo '$foo'
>$foo
>bash$ echo "$foo"
>kdhfsoig

Tästäpä seuraa, että homma ei toiminut, kun oli noita muuttujia
yksinkertaisten lainausmerkkien sisällä. Korjattu varsinainen skripti on
alla, muu toimii OK.

Edelleen pitääpi korvata ###### soitettavalla numerolla ja TUNNARI omalla
(verkon, siis vastaajapään) tunnarilla (meikäläisellä olounela).

-----klippeti-----klippeti-----klippeti-----klap-----
#!/bin/sh
pppfile="/var/run/ppp0.pid"

rm -f /tmp/ppp.log
while : ; do
echo "`date`: ppp script dialing" >> /tmp/ppp.log

/usr/sbin/pppd /dev/modem 38400 name TUNNARI noipdefault defaultroute crtscts connect '/usr/sbin/chat -t 60 -v ABORT "NO CARRIER" ABORT BUSY "" ATDT###### CONNECT '


count=7
while [ "$count" != "0" ]; do
sleep $count
if [ -f $pppfile ]; then
sleep 2
fi
count=`expr $count - 1`
done
if [ -f $pppfile ]; then
echo "`date`: ppp id `cat $pppfile`; script going to long sleep" \
>> /tmp/ppp.log
sleep 1710
echo "`date`: ppp script woke up" >> /tmp/ppp.log
if [ ! -f $pppfile ]; then

echo "`date`: ppp lock missing, assuming user exit and quitting" \
>> /tmp/ppp.log


exit 0
fi
echo "`date`: ppp script killing process `cat $pppfile`"\
>> /tmp/ppp.log
kill -HUP `cat $pppfile`
sleep 10
fi
done
-----palk-----iteppilk-----iteppilk-----iteppilk-----

Ja tuo pppd rivi siis ei saa pätkiytyä hipsujen välistä -- minkä tällä
sisennyksellä tuntuu tapahtuvan joka tapauksessa jos 80 merkkiin/rivi
pyrkii. Sen sisältö on

/usr/sbin/pppd /dev/modem 38400 name TUNNARI noipdefault defaultroute


crtscts connect '/usr/sbin/chat -t 60 -v ABORT "NO CARRIER" ABORT BUSY

"" ATDT###### CONNECT '

Lisäksi, jos sarjaportti on 16550A ja motukka 38400 bps tai nopeampi, voipi
olla hyödyllistä tehdä ennen motukan käyttöä

setserial /dev/modem spd_vhi

ja 14.4 kbps laitteille

setserial /dev/modem spd_hi

Jälkimmäinen asettaa sarjaportin COM2 käyttämään 57.6 kbps pyydettäessä
maksimia (38.4 kbps) ja edellinen käyttämään 115.2 kbps. Miksi asia toimii
näin, en tiedä, mutta kokemukseni on että tuo toimii. Ilmeisesti kyseessä on
jonkin laskurin puolitus kerran tai kaksi.

Joskohan nyt sitten olisi oikein...

J Nikolai Riikonen

unread,
Jan 2, 1998, 3:00:00 AM1/2/98
to

In hy.atk.linux Olli Lounela <olou...@kate.pc.helsinki.fi> wrote:
: Nyt lopultakin näyttää, että olen saanut oman katkojaskriptini

: toimimaan ja debugattua. Varmaan siinä on edelleen viilaamista,
: mutta olkaatten hyvät.

Ettei näitä olisi liian vähän, heitän soppaan oman väsäykseni. Kyseessa
ei oikeastaan ole scripti, vaan Javalla tehty graafinen soittaja.
Se kuitenkin toimii vähän kuin scripti, eli käyttää chattia ja pppd:tä.
Kuitenkin, siihen voi määritellä loputtomasti numeroita, jotka se
soittaa läpi. Lisäksi voi määritellä ajat, joiden kuluttua ohjelma
piippaa. Linjaa ei katkaista automaattisesti, mutta sen avaamalla
dialogilla on 'disconnect' nappula. Niin, ja siinä on 'hieno' kello,
josta näkee yhteysajan noin 5 sekunnin tarkkuudella (aijanlaskenta alkaa
siitä, kun pppd saa yhteyden).

Osoitteesta (pikkuiset niukat ohjeet siellä):
http://www.helsinki.fi/~njriikon/software/

Jos kokeilette, olisi kiva kuulla mielipiteitä.

# Nikolai Riikonen njri...@cc.helsinki.fi #
# Kinaporinkatu 3 A 24 00500 HKI j...@tekla.fi #
# "Jos olisin mies, kävisin ehdottomasti armeijan." -Rytmihäiriö #

0 new messages