Skrev en artikkel for ikke så lenge siden som handlet om ip'en din har blitt forandret eller ikke. Både ekstern ip og lokalt. I denne artikkelen sa jeg noe sånt som at det er bare å legge skriptet i oppstarten, eller når maskina booter. Så enkelt er det jo ikke. Jeg tenkte ikke så veldig langt for å si det sånn. Det oppstår problemer...spesiellt hvis man har tenkt å starte skriptet fra /etc/init.d/. Dette er ikke noen god ide.

 Problemet ligger i at man faktisk er avhengig av at en del prosesser er startet opp når man bruker "curl" og når man gjør kallet "ifconfig wlan0". Jeg tenkte videre at jeg kanskje skulle starte skriptet enten fra .bashrc eller .profile. Men dette er faktisk alt for tidlig i prosessen. Det er ikke sikkert at wlan0 er oppe enda. Tok meg litt tid å finne ut av dette. Problemet lå stort sett på curl. Den henger seg. Dvs den vil ikke stoppe før den får en "connection", og det får den ikke fordi helle innloggings-prosedyren stopper fullstendig opp pga av skriptet(når det blir startet fra .bashrc eller .profile.

Jeg prøvde også å starte prosessen via xterm: "xterm -e /path/to/my/bin.file". Dette var heller ikke vellykket.

Etter mye om og men, fant jeg ut på nettet at kde har en egen Autostart -folder/mappe, dvs i "~/.kde/Autostart/". Dette er plassen å start ting på. Skriptet blir da startet etter at innloggingen er ferdig og alle kde-prosesser som er nødvendig har startet.

Men Jeg vil fremdeles anbefale å starte skriptet via xterm. Da får man opp alt som har skjedd, eventuellt få fram alle feil hvis det er noen. Da er det også viktig å legge til parameteren -hold. Kommandoen blir noe sånt som dette:

> xterm -hold -e "/path/to/my/bin"

En annen tng som er veldig nyttig er å legge til parameteren -x på "She-bang"'en i selve skriptet...sånn som dette.

#!/bin/bash -x

Da vil man få en output som viser absolutt alt om hva som skjer. Så lenge man prøver å debugge/finne feil i skriptet så er dette veldig nyttig:

+ x=1                                                                                                                                                                                                                                                                          
+ LPATH=/home/edorf/bin/ipch/                                                                                                                                                                                                                                                  
+ '[' 1 -ne 0 ']'                                                                                                                                                                                                                                                              
+ date                                                                                                                                                                                                                                                                         
+ curl -m 10 ifconfig.me                                                                                                                                                                                                                                                       
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                                                                                                                                                                                
                                 Dload  Upload   Total   Spent    Left  Speed                                                                                                                                                                                                  
100    13    0    13    0     0      8      0 --:--:--  0:00:01 --:--:--    21                                                                                                                                                                                                 
+ '[' 0 == 7 ']'                                                                                                                                                                                                                                                               
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ date                                                                                                                                                                                                                                                                         
+ /sbin/ifconfig wlan0                                                                                                                                                                                                                                                         
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ cd /home/edorf/bin/ipch/                                                                                                                                                                                                                                                     
+ ./chip                                                                                                                                                                                                                                                                       
+ xip=1                                                                                                                                                                                                                                                                        
+ ip=1                                                                                                                                                                                                                                                                         
+ curl -m 10 ifconfig.me                                                                                                                                                                                                                                                       
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                                                                                                                                                                                
                                 Dload  Upload   Total   Spent    Left  Speed                                                                                                                                                                                                  
100    13    0    13    0     0      7      0 --:--:--  0:00:01 --:--:--     8                                                                                                                                                                                                 
+ '[' 0 == 7 ']'                                                                                                                                                                                                                                                               
+ diff current_ip prev_ip                                                                                                                                                                                                                                                      
+ any_difference=0                                                                                                                                                                                                                                                             
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ xip=0                                                                                                                                                                                                                                                                        
+ xternal='External ip has not changed'                                                                                                                                                                                                                                        
+ /sbin/ifconfig wlan0                                                                                                                                                                                                                                                         
+ grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*'                                                                                                                                                                                                                                  
+ grep -Eo '([0-9]*\.){3}[0-9]*'                                                                                                                                                                                                                                               
+ diff cur_wlan_ip prev_wlan_ip                                                                                                                                                                                                                                                
+ any_difference2=0                                                                                                                                                                                                                                                            
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ ip=0                                                                                                                                                                                                                                                                         
+ internal='Local ip has not changed'                                                                                                                                                                                                                                          
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ '[' 0 == 0 ']'                                                                                                                                                                                                                                                               
+ echo 'No changes been done. Exiting with exit code 0'                                                                                                                                                                                                                        
No changes been done. Exiting with exit code 0                                                                                                                                                                                                                                 
+ rm current_ip cur_wlan_ip any_difference.txt                                                                                                                                                                                                                                 
+ echo 'chip-script has been started'                                                                                                                                                                                                                                          
chip-script has been started                                                                                                                                                                                                                                                   
+ x=0                                                                                                                                                                                                                                                                          
+ '[' 0 -ne 0 ']'

En annen ting med curl er at den vil prøve å koble seg på i det uendelige. Den kan også være koplet på men at den står i kø. Ventetiden kan være lang. Derfor bestemte jeg meg for å bruke -m parameteren som sier at vi skal vente en max tid(i sekunder).

En tredje ting som jeg kom borti som var "trøblete" er bruken av "ifconfig". I min konfigurasjon så kan jeg ikke eksekvere det uten å bruke absolute-path...så jeg ble nødt til å legge til hele stien. Dette kan man også løse lett (hvis man ikke vil skrive hele stien), ved å legge til /sbin/ til PATH - environment variabelen. Kjører man skriptet som rot så er ikke dette noe problem, men jeg valgte å kjøre det som 'meg'/vanlig bruker.

Men iallefall. Hele skriptet forandret seg litt siden sist og her er det(med -x (debug)):

#!/bin/bash -x

######    The script should only report if any local ip's  or external ip's
######    have changed. First of all: check external ip. I use curl and the
######    domain ifconfig.me. The output when using curl is the ip-addresse.
######    Clean and nice.
######    Second of all: Check local ip-adresse using ifconfig on a certain
######    interface.

#we have to go here...
#cd /root/scripts/ipch/

#external ip flag for change. We're assuming there has been a change
xip=1
ip=1

### run curl in silent mode and redirect output to file
curl -m 10 ifconfig.me > current_ip
# usually there are 2 faults: 
# returns 7: failed to connect
# returns 28: connection timed out
# either way, if this is the case we might as well quit.
if [ $? -ne 0 ] ; then
	echo "Could not make a connection in time. Exiting with exit-status 1"
	exit 1
fi
### check the difference between the two files containing adresses
### and redirect anything to a file. We want to see the difference if there are any
diff current_ip prev_ip > any_difference.txt
### save the output in a variable also
any_difference=$?

if [ $any_difference == 0 ]; then
	xip=0
	xternal="External ip has not changed"
else
	#external ip has changed:
	xternal="External ip has changed"
	## if desireable change prev_ip-file with new ip
	#cat current_ip > prev_ip
fi
### get ip addresse from wlan
/sbin/ifconfig wlan0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' > cur_wlan_ip
### append any difference to the file
diff cur_wlan_ip prev_wlan_ip >> any_difference.txt

any_difference2=$?

if [ $any_difference2 == 0 ]; then
	ip=0
	internal="Local ip has not changed"
else
	internal="Local ip has changed"
	## if desireable change previous ip with current
	#cat cur_wlan_ip > prev_wlan_ip
fi

if [ $xip == 0 ] && [ $ip == 0 ]; then
	echo "No changes been done. Exiting with exit code 0"
	#remove temp-files
	rm current_ip cur_wlan_ip any_difference.txt
else
	## append all messages to mail-message
	cat ipchange_mail_message >> send_message
	echo $xternal >> send_message
	echo $internal >> send_message

	### send mail to recipient
	mutt -s "ip changed" This email address is being protected from spambots. You need JavaScript enabled to view it. -a any_difference.txt < send_message
	
	### remove all temporary files
	rm send_message current_ip cur_wlan_ip any_difference.txt
fi