R3s1stanc3

Ich bin root, ich darf das!

Der Raspberry Pi

Vor ein paar Tagen ist mein Raspberry Pi auch endlich angekommen. Wenn es soweit ist, merkt man erst, was alles fehlt:
Ich hatte weder ein HDMI-Kabel, noch eine normale SD Karte, die nicht kaputt war, noch eine USB Tastatur/Maus.

Ich hatte mir dann ein HDMI-Kabel von meinem Dad und eine USB Tastatur von meinem Bruder ausgeliehen und eine MicroSD in einem SD Adapter benutzt. Also Betriebssystem auf die Karte geladen und gestartet. Standard Passwort: raspberry
Bis ich drauf gekommen bin, dass das Tastaturlayout auf UK gestellt ist und “y”=”z” hatte noch mal 10 gedauert shame.
Nun gut, dann lief das Teil endlich. Hab mir dann noch ein Plastik Gehäuse und ein HDMI Kabel gekauft.
Das Debian, das auf der Raspberry Seite zum Download angeboten wird, bringt einen riesen Haufen an Software mit sich, den ich nicht brauchte, da ich schon wusste, dass ich den Raspberry als externen Zugang in mein Netzwerk und evtl als VPN benutzen werde und dafür wollte ich ein minimal Debian.
Also weiter gesucht und auch etwas gefunden:
Erst das hier getestet: http://www.linuxsystems.it/2012/06/debian-wheezy-raspberry-pi-minimal-image/
Hatte schon super funktioniert und dann noch das hier gefunden: http://www.linuxsystems.it/2012/06/raspbian-wheezy-armhf-raspberry-pi-minimal-image/
Da Raspbian auf die Raspberry Hardware angepasst ist, läuft das super und bootet noch mal um einiges schneller als das Debian minimal (und noch mal viel schneller als das Debian von der Raspberry Seite :D )
Heute hab ich mich dann hingesetzt und wollte eine Möglichkeit ausarbeiten, meinen Raspberry von draußen zu erreichen. Klar SSH und den entsprechenden Port am Router freischalten. AAABER: mein eigentliches Problem ist meine dynamische IP. Also brauchte ich eine Möglichkeit über irgendetwas statisches dem Raspberry eine Meldung zukommen zu lassen, woraufhin er mir meine IP zukommen lässt.
Hier meine Lösung: (könnte bestimmt noch um einiges schöner sein)

Upload IP (upload_ip.pl) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use Net::FTP ;

$server = "FTP Server" ;

$user = "FTP User" ;
$pass = "FTP Pass" ;

$file = "ip.txt" ;

$ftp = Net::FTP -> new ( $server, Debug => 0 ) || die "Verbinden mit $server nicht möglich \n", $ftp -> message ;
$ftp -> login ( $user, $pass ) || die "Fehler beim Einloggen\n", $ftp -> message ;
$ftp -> cwd ( "/home" ) || die "Cannot change directory\n", $ftp -> message ;

if ( $ftp -> get ( "give_ip.txt" ) )
{
  &createIP ( ) ;
  $ftp -> delete ( "give_ip.txt" ) ;
  $ftp -> put ( $file ) || die "put failed\n", $ftp -> message ;
  $ftp -> quit ( ) ;
}
else
{
  $ftp -> quit ( ) ;
}

unlink ( "give_ip.txt" ) ;
unlink ( "ip.txt" ) ;

sub createIP
{
  # create ip.txt
  system ( "wget http://cmyip.com -O ip.txt" ) ;
  open ( ip , "<", "$file" ) ;
  @ip = <ip> ;
  close ( ip ) ;
  $ip[5] =~ /<**>My IP Address Is\s+?(.*?)\s+?-/ ;
  $addr = $1 ;
  open ( ip, ">", "$file" ) ;
  print ip $addr ;
  close ( ip ) ;
  # end create
}

Ok um ehrlich zu sein ist der Code mega hässlich :P muss also noch mal überarbeitet werden. Aber so funktioniert er:

Beim Start wird eine Verbindung zu einem FTP Server hergestellt und überprüft ob die Datei “give_ip.txt” existiert. Sollte dies der Fall sein, wird die Datei gelöscht, die index Seite von cmyip.com wird heruntergeladen und die IP aus dem Header extrahiert (ich wollte eigentlich mit LWP::UserAgent arbeiten, und per “get” die Seite holen, aber irgendwie wollte das nicht so ganz). Wenn man die IP hat, steht sie in der Datei “ip.txt” und diese Datei wird auf den Server hochgeladen. Das Script wird dann per Cronjob alle 5 Minuten oder what ever ausgeführt und wenn man die IP haben will, lädt man einfach von irgendwo die “give_ip.txt” auf den FTP Server und wartet kurz.

Ich wollte die ip.txt dann noch mit GPG verschlüsseln, das hat aber auch nicht geklappt. Da werde ich wohl auf Crypt::CBC zurückgreifen.

Alles in allem ist der Raspberry aber auf jeden Fall super. Mittlerweile steckt er auch schon in seinem Gehäuse (war nicht so einfach, den da rein zu bekommen ^^)

Wenn sich wieder was neues tut, werde ich darüber berichten (und den schöneren Code dann noch einfügen)