microperl 5.8.8 auf der Fritz!Box

bodega

Aktives Mitglied
Mitglied seit
6 Jun 2006
Beiträge
1,980
Punkte für Reaktionen
6
Punkte
0
So...
hab mir mal nen Spass erlaubt und gestern Abend microperl für die Fritz!Box kompiliert.
Lasst euch nur nicht vom Namen täuschen! Die Binary ist 2 MB groß (+libs von 11 MB :-o )

Code:
# ./microperl --help

Usage: ./microperl [switches] [--] [programfile] [arguments]
  -0[octal]       specify record separator (\0, if no argument)
  -a              autosplit mode with -n or -p (splits $_ into @F)
  -C[number/list] enables the listed Unicode features
  -c              check syntax only (runs BEGIN and CHECK blocks)
  -d[:debugger]   run program under debugger
  -D[number/list] set debugging flags (argument is a bit mask or alphabets)
  -e program      one line of program (several -e's allowed, omit programfile)
  -f              don't do $sitelib/sitecustomize.pl at startup
  -F/pattern/     split() pattern for -a switch (//'s are optional)
  -i[extension]   edit <> files in place (makes backup if extension supplied)
  -Idirectory     specify @INC/#include directory (several -I's allowed)
  -l[octal]       enable line ending processing, specifies line terminator
  -[mM][-]module  execute "use/no module..." before executing program
  -n              assume "while (<>) { ... }" loop around program
  -p              assume loop like -n but print line also, like sed
  -P              run program through C preprocessor before compilation
  -s              enable rudimentary parsing for switches after programfile
  -S              look for programfile using PATH environment variable
  -t              enable tainting warnings
  -T              enable tainting checks
  -u              dump core after parsing program
  -U              allow unsafe operations
  -v              print version, subversion (includes VERY IMPORTANT perl info)
  -V[:variable]   print configuration summary (or a single Config.pm variable)
  -w              enable many useful warnings (RECOMMENDED)
  -W              enable all warnings
  -x[directory]   strip off text before #!perl line and perhaps cd to directory
  -X              disable all warnings

Leider schaff ich es nicht, CSPAN Module einzubinden. Es ist auch fraglich, ob's überhaupt möglich ist :confused:

Um auf die Libs zu verweisen, einfach den -I Parameter anhängen: ./microperl -Ivar/media/ftp/usb/lib app.pl

Hier ein paar Infos: http://www.foo.be/docs/tpj/issues/vol5_3/tpj0503-0003.html

ps: ich hab nur microperl kompiliert, nicht das ganze perl.
Es kann sein, das die Libs eventuell nicht richtig funzen... da hatte ich noch keine Zeit zum testen (bis auf ein paar kleinere Perl-Skripte...)
 

Anhänge

  • microperl-mipsel.tar.gz
    428.5 KB · Aufrufe: 139
  • perl-lib.tar.gz
    2.6 MB · Aufrufe: 202
Zuletzt bearbeitet:
So.. hab's gestern mal weiter getestet und es funzt prima.

In Verbindung mit dem mini_httpd ist das ein adäquater PHP-Ersatz.
Hab damit mal ein Webinterface für meinen Anrufbeantworter gebaut ;)
Läuft auch alles recht flott, trotz der 2 MB Binary...

Die Libs sind nicht zwingend notwendig.

Falls es jemand schafft, Sockets::IO einzubinden, möge er das bitte posten :p ...
 
Zuletzt bearbeitet:
eben nochmal ne neue version... bei der letzten gingen die $ENV Variablen nicht. Also kein richtiges cgi/perl ohne post/get...

hiermit gehts nun... ;)

Code:
my @param = $ENV{'QUERY_STRING'};
print  @param;
 

Anhänge

  • microperl-mipsel-v2.tar.gz
    428.8 KB · Aufrufe: 187
Ersteinmal vielen dank von mir, gute Arbeit ;)

Aber nun meine Frage, wie bringe ich das Programm zum laufen? :D
Mini HTTPD läuft problemlos, aber Perl geht immer wieder aus nachdem ich per telnet das Kommando:
Code:
./microperl
eingebe.

Wie kriege ich das richtig zum laufen? Bitte um Hilfe :)
 
Zuletzt bearbeitet:
hm. Dann könnte man auch vom CTorrent das Webinterface nutzen, wenn das gescheit läuft... zusammen mit nem Swapfile könnte man dann so endlich den Webtransmission loswerden. Wenn jemandem langweilig ist dann kanns ja mal jemand testen, ansonsten mach ich das dann, wenn ich die Zeit finde, meine ext3-Platte unter dem 2.6er-Kernel läuft und das jemand auch dafür kompiliert :D
 
Zuletzt bearbeitet:
mini_httpd starte ich mit '-c **.cgi'.

Die .cgi Datei könnte dann z.B. so aussehen:
Code:
#!../../microperl/microperl -I../../microperl/microperl/lib 

#use strict;
#use warnings;
#use Carp;
warn();

my $test = "Hallo";
my $my_param;

# HTML Header
show_html_head("Hallo");

# Parameter auslesen
$my_param = strip_params("parameter=");

print "Parameter: $my_param";

# HTML footer
show_html_foot();


# --------------------------------------------------------------------------------------------------------
# - Functions ---------------------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------


sub show_html_head
{
	print "Content-type: text/html\n\n";
	print "<html><head><title>@_[0]</title>\n";
	print "<meta name='author' content='maz'>\n";
	print "<meta name='copyright' content='maz'>\n";
	print "<meta name='Content-Type' content='text/html; charset=iso-8859-1'>\n";
	print "<link id='cssindex' href='style.css' type='text/css' rel='stylesheet'>\n";
	print "</head><body>\n";
}

sub show_html_foot
{
	print "<hr>\n";
	print "<a href=\"index.html\"><b><<< zurück</b></a>\n";
	print "</font></body>\n";
}


# --------------------------------------------------------------------------------------------------------
# Environment Parameter strippen ($ENV{'QUERY_STRING'})
#
# Parameter: Key (z.B. controller= bei ..?controller=3&...)
# Rückgabe: Wert
# --------------------------------------------------------------------------------------------------------
sub strip_params($)
{
	my $prefix = "&";
	my $param = "&";	
	my $value = @_[0];
	my $ret = "";

	# Get params...
	$param .= $ENV{'QUERY_STRING'};

	# URL decode (%2F,...)
	$param =~ s/\%([A-Fa-f0-9]{2})/pack('C', hex($1))/seg;
	# + durch ' ' ersetzen
	$param =~ s/\+/" "/seg; 

	# URL encode
	#$param =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;

	# Präfixe durchlaufen (? oder &)
	if(index($param, "@prefixes[$i]$value") >= 0)
	{
		my $idx1 = -1;
		my $idx2 = -1;

		$idx1 = index($param, "$prefix$value");
		$idx2 = index($param, "$prefix", $idx1+1);

		if($idx2<0)
		{
			$idx2 = length($param); # - $idx1 + length($value);
		} 

		
		$ret = (substr($param, $idx1+length($value)+1, $idx2-$idx1-length($value)-1));
	}

	if(!(($ret) eq ""))
	{
		# Falls gefunden, abbrechen...
		return $ret;
	} else {
		#print "- @prefixes[$i] -";
	}
}

Hab das jetzt mal so aus einem alten Projekt ausgeschnitten. Das mit dem strippen der Environments kriegt man bestimmt besser hin ;). Die Libs (-I../../microperl/microperl/lib) müssen nicht unbedingt angegeben werden.
Microperl ist auch kein richtiges Perl. Der Vorteil sind ganz klar die Standard-C Routinen (string.h, stdio.h,..) die damit verwendet werden können.
 
Hm, wenn ich das Perl Script über den ./microperl kommentar.pl laufen lasse, zeigt er die richtige Ausgabe an. Aber wenn ich es über den Browser aufrufe, zeigt er mir den kompletten Quelltext der Perl Datei =(

Kann mir wer helfen? Das Script ist im gleichen Verzeichnis wie Microperl, dementsprechend lautet die erste Zeile
Code:
#!microperl

Was mache ich falsch?
 
@ 3ffect0R:
Hast du mini_httpd auch so gestartet wie in #6 ?

@ bodega:
Der Vorteil sind ganz klar die Standard-C Routinen (string.h, stdio.h,..) die damit verwendet werden können.
Hast du dafür vielleicht mal ein Beispiel-Script ? Wäre nett ...
 
@u.g
ups.. das mit den Standard-C Routinen war etwas anders gemeint:
equivalent sind natürlich die Funktionen aber nicht die Funktionsnamen.
Z.B. Stringmanipulation oder Datei Lese-/Schreibroutinen. Das waren so ein paar Dinge, die mir an Bourne Shell gefehlt haben, bzw. schwer zu realisieren waren. Header Dateien kann man leider nicht einbinden. Ich dachte zwar, man könnte stdlib.h einbinden, aber das muss ich revidieren! Zuviel C tut W ;) - Ich hab deswegen auch mal #2 geändert.
Nichts desto trotz, man könnte microperl um Funktionen erweitern. Mit CPAN Modulen wäre es natürlich noch besser.

Hier die Sprachelemente:
http://btfmx1.fs.uni-bayreuth.de/html/selfhtml/tgc.htm

@3ffect0R
Wenn du nur nur Quelltext siehst, probiere es mal mit folgender Zeile:
Code:
#!/var/x/miniperl
printf "Content-type: text/html\n\n";
printf "<html>....";

Der Content-Type ist hierbei nötig.
 
Zuletzt bearbeitet:
Sicher, dass der Pfad zum microperl stimmt?
 
3ffect0R schrieb:
Er will trotzalledem net....
Entweder benennst du die pl-Datei in .cgi um, oder verschiebst alle CGIs (+micro_perl?) nach cgi-bin und startest mini_httpd mit '-c "cgi-bin/*"'
 
Mhh.. sieht so aus, als ob du microperl im root hast (#!/microperl).
Nimm einfach die volle Pfadangabe und benenn das Skript in .cgi um.
Ach ja, ausführbar machen mit 'chmod +x script.cgi' könnte auch noch helfen.
 
als erstes würde ich mal Rechte vergeben, wie bodega schon sagt.
Beispielsweise chmod 755 kommentar.pl
 
Hallo bodega,
ich suche für meine 7170 auch eine Anrufbeantworter Lösung, allerdings nicht für SIP Accounts, sondern für meine ISDN MSNs.
Verfolge im Augenblick die geposteten Threads zum Thema Asterisk. Insbesondere das die USB Stick Variante von SPB.
Habe aber noch nichts installiert...

Frage: Könntest du dein Web-Interface einmal näher beschreiben?

Viele Grüße,
Michael
 
bodega schrieb:
Falls es jemand schafft, Sockets::IO einzubinden, möge er das bitte posten :p ...
ebenso Hostname und Fcntl... :D Wäre dankbar für Hinweise^^
 
kann des mal jemand erklären. ich hab des microperl auf einem usb stick und den mini http, der minihttpd läuft. so wie kann ich des perl nun starten und'/oder installiern. bitte um kleines how to. muss ich dann den webserver anders starten wenn ja wie?
 
So, wie ab Beitrag 6 beschrieben.
 
Edit Ghostwalker: 2 Beiträge zusammengefasst.

geht des auch bissl genauer schritt für schritt, bin immernoch newbie

wo muss des pearl liegen?
wie starte ich es?
wie kann ich es mitdem webserver verbinden?

2. Beitrag:
wo muss diese cgi datei liegen die in #6 erwähnt ist.

Wäre schön wenn antworten kämen
 
wie kann ich das microperl in Verbinung mit dem Apachen Web Server starten (wurde hier im Forum beahndelt)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.