Ansluta till internet utan webbläsare

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Ansluta till internet utan webbläsare

Håller på att installera en liten server som jag ska ha till Subversion+TRAC server, plus utvecklings-webbserver.

Jag har knapp erfarenhet av Linux, den sträcker sig iprincip bara till lite Ubuntu. Så eftersom jag är van vid kommandona från debian så tänkte jag att någon avkomma från det skulle vara bäst, sen har ubuntu bra community och dokumentation vad jag både hört och upplevt, så det blev Ubuntu.

Eftersom jag tänkte lära mig lite på kuppen (och att min server-dator inte stödjer PAE) så valde jag bort server versionen av Ubuntu och tankade hem deras alternativa installations-cd ("ubuntu-7.10-alternate-i386.iso") och installerade bara grundsystemet (alltså en konsol utan fönster hanterare osv).

Allt är väl och funkar som det ska! Dock får jag mitt internet från mitt universitet (Uppsala) och de kräver login för att få tillgång till internet.

Alltså när man har anslutit till nätverket och öppnar webbläsaren kommer en login-sida upp (oavsett vilken adress man försöker komma till). Där skriver man in lösenord osv och loggar in, när det är gjort är man online och allt funkar som vanligt.

Problemmet med min server är att det inte finns någon webbläsare! Datorn har kontakt med nätverket (allt ser i alla fall rätt ut när jag kör "ifconfig") men som sagt har den inte kontakt med internet då det krävs att man loggar in. självklart går det inte att installera t.ex. Lynx via "apt-get install lynx" eftersom det kräver internet anslutning. Moment 22 med andra ord...

Nu skulle man kunna tänka sig att jag kan logga in med min vanliga datorn sätta in nätverkssladden i servern så är allt frid och fröjd men nätverket ger servern ett nytt ip och kräver att man loggar in igen (antar att det känner att MAC-adressen är en annan)...

Min fråga är nu: Hur man kan lösa det? Som sagt är min erfarenhet av linux _begränsad_ men jag antar att det måste finnas något annat sätt att installera Lynx än genom apt-get, i så fall kan jag kanske tanka ner det och föra över det till servern via diskett...

Vidare undrar jag om man kan fixa en mer långsiktig lösning, inte speciellt bra om man varje gång servern ska startas ska behöva surfa in och logga in till internet med lynx (dessutom droppar nätverket internet-anslutningen om den är inaktiv under cirka 10 minuter, och då blir det ett jäkla springande)...

Kan man möjligen skriva ett bash-script som skickar ett POST-request (via HTTP) till login-sidan automatiskt när datorn startar och sedan en annan som skickar ut en ping mot internet var 5:e minut eller så. Programmerade ett liknade program till windows men det var i C# så blir lite omständigt om man ska köra det på servern. Om inte det funkar (BASH) vad kan man annars skriva det i? måste det var ett kompilerat C/C++ program eller liknade eller kan man skriva det i python? (har ingen erfarenhet av python, har de ens socket-klasser?)

Lång text... men hoppas något kan hjälpa mig! Tack på förhand!

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Det går bra att överföra en browser som Lynx med diskett eller USB-minne eller nåt.

Mha Curl t ex skulle jag tro att du skulle kunna snickra ihop ett autoinloggningssystem. Curl är alltså en applikation, ett bash-script skulle du kunna använda för att köra det. Python är också trevligt till sån scripting och då behöver du kanske inte gå vägen kring Curl, men då kanske du får återuppfinna mer av hjulet, så att säga.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Tack, dock har jag bara kommit halvvägs...

hittade Lynx (på http://lynx.isc.org/lynx2.8.5/index.html ) och laddade ner "lynx2-8-5.tar.gz", dock fattar jag inte hur man ska kunna installera... Antar att det står massa om detta på nätet men på grund av min okunskap vet jag inte om det jag hittar är tillämpbart här. Installations dokumenten som finns i arkivet med lynx hjälper mig inte heller... Är det källkoden jag har lyckats ladda hem? kan man inte få det färdig kompilerat?

edit: för att förtydliga har jag fört över arkivet till server och packat upp det i min home mapp...

Trädvy Permalänk
Medlem
Registrerad
Apr 2004

Du har laddat hem källkoden. Enklare är att ladda hem ett färdigkompilerat .deb-paket.

Det du skall ha finns här; http://packages.ubuntu.com/gutsy/lynx
Direktlänk till .deb-filen: http://ge.archive.ubuntu.com/ubuntu/pool/main/l/lynx/lynx_2.8...

Det finns dock risk för att inte alla dependencies inte är installerade. I så fall får du även dra hem dem.

När du monterat usb-minnet/cd-skivan/whatever installerar du med:

dpkg -i paketnamn

I fallet med lynx blir det alltså "dpkg -i lynx_2.8.6-2ubuntu1_i386.deb", om du står i samma mapp som paketet.

Jag tänkte skriva något klyftigt här

Trädvy Permalänk
Medlem
Plats
at home
Registrerad
Nov 2007

Du kan ladda ner Lynxs paketet som deb fil

http://packages.ubuntu.com/gutsy/i386/lynx/download

sudo dpkg -i lynx_2.8.6-2ubuntu1_i386.deb

Sen ett ltet frågetecken om alla beroenden redan finns installerade
http://packages.ubuntu.com/gutsy/lynx

Men det märker man.

ASUS K56CB i7, W10.
HTC 10 ICE InsertCoin SVN, Nougat
ASUS Transformer Prime 32GB, Nougat :)
Ubiquiti Edge Lite, UniFi AP-AC-Lite (AP) samt ASUSAC68U och N66U (AP), fiber 250/100Mbit/s.
Mitt nätverk: http://imgur.com/VYJjrzL Bild http://imgur.com/89WYq81

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Tackar så mycket! Verkligen räddare i nöden!

En (möjligen två) fråga kvarstår...

Om jag som sagt har ett python-script som jag ska köra vid start så skriver jag bara in ett BASH script i "/etc/rc.local"? (det kommer då köras när datorn startar upp, tillskillnad från de som ligger i home-mappen (dvs. ".rcbash" osv) som bara körs när man loggar in...

Men om jag vill att ett python-script ska köras var 5 min eller likande hur går jag till väga då?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jun 2003

crontab -e ( lägg till -u Användare ) om du vill att scriptet ska köras som Användare
lägg till denna rad där i sedan:
*/5 * * * * /path/to/my/python/script/that/i/love/to/run > /dev/null 2>&1

då kommer det köras var femte minut.

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Prefekt! Tack!

Har dock en sista fråga

Min server kommer inte ha någon fast ip utan kommer använda en dynamiskt DNS tjänst (www.dyndns.com). Jag kommer alltså lägga till en updater som updaterar ip:et till tjänsten.

Jag tänkte lägga till inadyn enligt följande guide.

Enligt den ska man lägga till en crontab likt detta:

@reboot /usr/sbin/inadyn

Det jag undrar nu är vilken som kommer köras först, uppdateraren för dynDNS eller mitt logga-in-på-internet-script? (som jag har lagt till i "/etc/rc.local"). Och kommer mitt script köra klart innan uppdateringsprogrammet startar?

Om inte, hur ska man lösa det? lägga till scriptet som en crontab också? köra uppdateraren via "/etc/rc.local"? Kan man försäkra sig att mitt script kör klart innan uppdateraren kör (mitt script tar relativt lång tid att köra, dels tar det ett tag att hämta sidorna och om den misslyckas att logga in så väntar den i 5 sekunder till nästa försök)...

Tack på förhand igen!

Trädvy Permalänk
Medlem
Plats
Tobo
Registrerad
Jan 2006

om du inte byter ip-adress allt för ofta kan du lägga till scriptet för dyndns-uppdatering i mappen /etc/cron.daily så körs det en gång om dagen. men om du byter ip varje gång du loggar in så kan du ju bara lägga till det i slutet på ditt script.

Trädvy Permalänk
Medlem
Registrerad
Aug 2005

Om du inte löst det så kan du kolla in Curl, ganska användbart i sånna här fall. Jag skrev ett vanligt shellskript som använde Curl's HTTP/FTP funktionalitet (det var ett tag sen iofs).

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

tack, men löste det genom att python scriptet när det har anslutit till internet kör inadyn genom "os.system("/usr/sbin/inadyn")"..

Om något är intresserad (eller mer sannolikt kommer över denna tråd när de stöter på samma problem) är mitt pythonscript som följer:

import time import urllib import urllib2 import os checkSite = urllib.urlopen("http://www.google.com") checkSiteText = checkSite.read() if checkSiteText.find("<title>Google</title>") == -1: print "System offline, trying to connect..." for i in range(4): if i != 0: print "Could not connect, trying again..." time.sleep(5) params = urllib.urlencode({'action': 'Login', 'usergroup': 'UpUnet-S', 'username': 'xxxx1234', 'password': 'a1b2c3d4'}) connectSite = urllib2.urlopen("https://netlogon.student.uu.se", params) connectSiteText = connectSite.read() if connectSiteText.find("Inloggad som:") != -1: print "System online" os.system("/usr/sbin/inadyn") break else: print "Could not connect, abort..." else: print "System online" os.system("/usr/sbin/inadyn")

Trädvy Permalänk
Medlem
Plats
at home
Registrerad
Nov 2007

Snyggt...

Om du tröttnat på SVN så finns Bazaar

http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html

Canonical/Ubuntu/Launchpad projekt körs via Baazar inkl en hög
inflyttade projekt.

https://launchpad.net/

ASUS K56CB i7, W10.
HTC 10 ICE InsertCoin SVN, Nougat
ASUS Transformer Prime 32GB, Nougat :)
Ubiquiti Edge Lite, UniFi AP-AC-Lite (AP) samt ASUSAC68U och N66U (AP), fiber 250/100Mbit/s.
Mitt nätverk: http://imgur.com/VYJjrzL Bild http://imgur.com/89WYq81

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

tack för tipset!

Btw: när jag kör likt scriptet ovan så antar jag att scriptet startar inadyn som en "sub-gren" (eller vad det nu heter) till sig självt. Med andra ord kommer scriptet köras hela tiden. Även om det kanske inte gör något, resursmässigt osv, men av ren nyfikenhet, finns det någon funktion som startar programmet som en egen "gren" (och efter den har gjort det går vidare i scriptet och avslutas när den når slutet, och inadyn fortsätter att köras?)

(Antar att man kanske kan skriva ett bash-script som startar inadyn och sen köra bash-scriptet från python-scriptet och på så sätt lösa det, men det känns lite omständigt...)

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2004

Ska inte inadyn vara startat hela tiden? Om du kör det i crontab och har ett script som uppdaterar din IP säg var 10:e minut så kanske du får ett glapp på upp till 10 minuter innan din IP uppdateras.

När jag körde inadyn förut så tror jag att jag hade det startat hela tiden i en screen-session så känner den av om ens IP måste uppdateras på DynDNS och fixar det automagiskt.

Trädvy Permalänk
Medlem
Registrerad
Nov 2005

Jo, klart den ska köra hela tiden... Tror du har missförstått mig lite...

Om jag kör inadyn via crontab så finns det ju en risk att inadyn hinner försöka uppdatera mitt ip hos dynDNS innan mitt script har lyckats koppla upp till internet. Därför måste jag säkerställa att inadyn startas efter att mitt script har kopplat upp, och för att säkerställa detta gjorde jag som dunz0r föreslog och gjorde att scriptet startade inadyn (se koden ovan).

Vidare så måste jag säkerställa att uppkoppling behålls (eftersom internet stängs ner om man är inaktiv i mer än cirka 10 minuter). Därför har jag lagt till en crontab med ett _annat_ script (som egentligen är precis samma som scriptet ovan bortsett från att den inte startar inadyn). Detta körs var 5:e minut.

Så inadyn körs hela tiden (via start-scriptet), och var femte minut körs ett annat script som säkerställer att uppkopplingen behålls.

Problemmet är just att när start-python-scriptet startar inadyn verkar den vänta på att det ska avslutas innan det själv avslutas, eftersom inadyn aldrig avslutas gör inte heller start-scriptet det.

Om jag kör "ps aux" i konsolen får jag:

root 4117 0.0 3.3 6660 4252 ? S Mar04 0:00 python /home/server/misc/startlogin.py root 4123 0.0 0.3 1664 468 ? S Mar04 0:00 sh -c /usr/sbin/inadyn root 4124 0.0 0.5 1748 728 ? S Mar04 0:00 /usr/sbin/inadyn

Som ni ser körs fortfarande startlogin.py och tar relativt mycket minne (3.3 %). Vilket inte är optimalt (har bara 128 mb minne på servern). (vad är det som skiljer de två processerna med inadyn från varandra, förresten?)

Därför undrar jag som sagt om jag på något sätt kan starta inadyn från python-scriptet, låta inadyn fortsätta köra samtidigt som python-scriptet kör klart och avslutas...

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002

Istf att köra det som du gör kanske du kan köra raden motsvarande

$ pythonscript && inadyn

Då väntar inadyn med att köras tills det första scriptet rapporterat att det avslutats korrekt. Avslutas det inte korrekt körs inte inadyn. Genom att rapportera exit status i scriptet kan du få "&&"-operatorn att fungera korrekt, dvs antingen låta inadyn köras eller inte. Bara en tanke.

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.