ubuntuusers.de

Apache2 führt perlscript nicht aus.

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Dippel

Avatar von Dippel

Anmeldungsdatum:
29. September 2013

Beiträge: 24

Wohnort: Schleswig-Holstein

Hallo Leute,

ich möchte Perlscripte auf meinem Rechner (Ubuntu 12.04LTS) ausführen.

Die Testdateien test.pl und test.cgi liegen bei mir unter /var/www. Die Testdateien ließen sich anfangs nicht auf der Konsole starten, also haben ich perl nachinstalliert. Es läuft lt. perl -h die Version Perl 5 / version 14 / (v5.14.2). Jetzt kann ich die testscripte starten, auch wenn sie inhaltlich noch nicht wirklich funktionieren.

Den Webserver Apache2 habe ich inzwischen auch installiert, er läuft: apache2 -v ergibt: Apache/2.2.22. Wenn ich in meinem Browser http://localhost aufrufe erhalte ich auch das typische "It works!". Als nächstes habe ich in diese index.html-datei links zu den testscripten eingebaut. Wenn ich diese jetzt anklicke, dann erhalte ich "Forbidden You don't have permission to access /test.cgi on this server."

Dem Verzeichnis /var/www habe ich inzwischen die Berechtigung rwxrwxrwx zugeteilt. Ebenso den den Dateien test.pl und test.cgi.

Also habe ich die Testdateien kopiert und in den Pfad /usr/lib/cgi-bin kopiert. Zusätzlich in meine index.html zwei weitere Links darauf gesetzt. Wenn ich diese jetzt aufrufe erhlte ich die Meldung: "Not found The requested URL /usr/lib/cgi-bin/test.pl was not found on this server"

Inzwischen habe ich in die ehemals leere Datei /etc/apache2/httpd.conf folgendes eingefügt:

<Directory /var/www>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>

Und das gleiche nochmal für das Verzeichnis /usr/lib/cgi-bin

Keine Änderung. Da ich sowhl ein Rechteproblem wie auch ein "Finde die Datei nicht"-Problem habe tippte ich auf eine unvollständige/fehlerhafte Konfiguration in /etc/apahce2/apache2.conf? Ich finde dort für mich keinen Ansatzpunkt der zu meinem Problem passt. Habt ihr einen Tipp in welche Richtung ich suchen muss?

Viele Grüße Siegfried

Dippel

(Themenstarter)
Avatar von Dippel

Anmeldungsdatum:
29. September 2013

Beiträge: 24

Wohnort: Schleswig-Holstein

Hallo Leute,

habe nach dem lesen zu einem ähnlichen Thema einem testscript mal dem user www-data und die entsprechende Gruppe (www-data) zugeordnet. Die Rechte habe ich bei rwxrwxrwx belassen. Das gibt aber auch keine Verbesserung. ☹

Gruß Siegfried

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Hallo, naja wenn keiner was schreibt, versuch's ich mal.

Ich kenne die Konfiguration des Apache-Webservers bei Installation aus den Packetquellen nicht so genau. Mir kommt es aber spanisch vor, dass Deine httpd.conf leer war. Vielleicht sollte man da mal bewusst einen Fehler einbauen und Apache neu starten, um zu sehen, ob diese httpd.conf verarbeitet wird. In der Date access_log oder error_log sollte ein Fehler erscheinen.

Ansonsten empfehle ich, innerhalb des Heimatordners (/var/www) einen Unterordner (vielleicht namens scripte) zu erstellen, wo Du Deine Scripte rein legst.

Wichtig ist, dass Deine Scripte als ausführbar markiert sind, wie das bei Dir ja der Fall ist, ich vergesse das manchmal.

In der httpd.conf sollte dann folgender Code stehen:

<IfModule alias_module>
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "/var/www/scripte/"

</IfModule>

<Directory "/var/www/scripte">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Ansonsten in den 2 Log-Dateien nachschauen, was Apache zu meckern hat.

Achso: Wichtig ist der Shebang in den Scripten, also die erste Zeile: #!/usr/bin/perl -w

Sonst weiß das System nicht, welcher Interpreter benutzt werden soll.

Ich hoffe, ich konnte ein wenig helfen.

Schönes Script-Wochenende. Ulf.

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Ich habe da noch was vergessen:

Wichtig ist, dass Du die Seite, die die Links zu den Scripten beinhaltet, über das http-Protokoll öffnest, z.Bsp. http://localhost

Wenn Du diese Seite mit "Datei öffnen" aufrufst, ist Apache gar nicht mit im Spiel dabei.

Ulf

Dippel

(Themenstarter)
Avatar von Dippel

Anmeldungsdatum:
29. September 2013

Beiträge: 24

Wohnort: Schleswig-Holstein

Hallo Ulf,

sorry für die kurze Unterbrechung - das Real Life hat mich benötigt 😉

Wennn ich die Vorgaben aus dem Apache Tutorial in meine httpd.conf aufnehme, also Eintragen von LoadModule cgi_module modules/mod_cgi.so dann 'meckert' Apache nach einem reload "[warn] module cgimodule is already loaded, skipping" Also hatte ich das bereits wieder in der httpd.conf auskommentiert - aber es zeigt ja das die Datei auf verarbeitet wird. Übrigens gibt es in meinem Verzeichnis /etc/apace2/ eine Konfigurationsdatei mit dem Namen apache2.conf. Diese wiederrm ruft die httpd.conf (mit den user configurations) auf. Offensichtlich ist die apache2.conf die übergeordnete und die httpd.conf die für die Usereinstellungen?

Ich habe nochmal etwas anders probiert: Wenn ich in das Verzeichnis /var/www/ (in der auch die Scripte test.pl und test.cgi liegen, eine einfache Datei test.txt lege, wird diese anstandslos aufgerufen und im Browser angezeigt. Das heißt doch, daß die Anforderung des Browser auf die Datei erlaubt wird - ihm also die entsprechenden Rechte zugesprochen sind.

Der Versuch ein Script aufzurufen endet mit "Forbidden ... You don't have permission to access /test.pl on this server." Ich muss also die Frage klären:

Warum habe ich nicht das Recht auf die test.pl zuzugreifen oder Habe ich nicht das Recht die Ausführung des Scriptes test.pl anzufordern oder darf der Interpreter perl nicht auf die Datei test.pl zugreifen.

Ich finde das Prinzip mit der Rechtevergabe in Linux eigentlich okay, aber so langsam... steigt mein Blutdruck an ... 😕

Werde jetzt nochmal die Infos aus deinem Codeblock bei mir einbauen und schauen was passiert...

Viele Grüße Siegfried

Ulf24

Anmeldungsdatum:
30. September 2014

Beiträge: 114

Wohnort: Thüringen

Hallo Siegfried,

Aller Anfang ist schwer, aber das mit dem Bluthochdruck muss doch nicht sein, das ist keine Sache wert. Klar ärgert man sich, wenn was nicht funktioniert. Immer eine Sache nach der anderen probieren, und wenn man keine Lust mehr hat, einfach mal eine Nacht drüber schlafen, das wirkt Wunder.

Anhand Deiner Fehlermeldung, gehe ich davon aus, dass Du das Script test.pl im Rootverzeichnis des Servers liegen hast (also /var/www). Ich bin nun auch nicht der Vollprofi, aber soweit ich weiß, muss ein extra Ordner angelegt sein, auf dem ein Alias /cgi-bin/ gelinkt sein muss, so wie ich es oben in dem Quelltext eingetragen habe. Wichtig ist, dass der Ordner unterhalb des Server-Root-Verzeichnisses (bei Dir /var/www) liegt. Auf allen anderen Ordnern (z.Bsp. /usr) hat Apache keinen Zugriff. Bei mir heißt der Ordner auch cgi-bin, ich weiß aber nicht, ob der so heißen muss. Hier laufen nicht nur Perl-Skripte, sondern sogar kleine C-Programme, ohne das ich weitere Einstellungen vornehmen musste.

Zum Ausprobieren würde ich erst mal den Skripten und dem Ordner alle Zugriffsrechte gewähren (chmod 777 *). Wenn die dann irgendwann funktionieren, kann man die Berechtigung auf die entsprechende Benutzergruppe ändern, das ist aber eine spätere Baustelle.

Ulf

Xubuntuuser

Avatar von Xubuntuuser

Anmeldungsdatum:
6. November 2007

Beiträge: 147

Wohnort: Mainz

Unter Apache2 hat sich die ganze Konfigurationsgeschichte geändert.

Module sind unter dem Verzeichnis /etc/apache2/mods-available und werden mit sudo a2enmod [modulname] aktiviert (symbolischer Link in ./mods-enabled wird angelegt). Genau so funktioniert das auch mit den "sites". Du legst in /etc/apache2/sites-available/ eine Konfigurationsdatei mit beliebigen Namen an und aktivierst diese mit sudo a2ensite [name] (danach Apache neu starten)

Um ein CGI Perl Skript zu starten gibt es mehrere Möglichkeiten, die einfachste wäre die default Konfiguration dermassen erweitern:

1
2
3
	<Directory />
        	AddHandler cgi-script .pl
	</Directory >

Du musst das Perlskript aber auch ausführbar machen (chmode +x)

Besser wäre es ein Verzeichnis in deinem home Verzeichnis anzulegen, mit diesem Verzeichnis eine "site" (Virtualhost) anzulegen und dann dort mit den Experimenten anzufangen.

Wenn du aber nur ein Perlskript starten wilst btauchst du keinen Server, das kannst du im Terminal einfach mit perl ./name_des_skript machen.

Dippel

(Themenstarter)
Avatar von Dippel

Anmeldungsdatum:
29. September 2013

Beiträge: 24

Wohnort: Schleswig-Holstein

Hallo,

vielen Dank für die letzten Tipps. Inzwischen bin ich (mit viel rumgesuche im Netz) auf diese Geschichte mit den "sites" und den "Virtuellen Hosts" gestossen - gut das ihr mir das quasi hier bestätigt. Ich bin also auf der richtigen Fährte und muss mich da jetzt erstmal reinlesen (damit ich verstehe worum es eigentlich geht...).

Und komme dann wahrscheinlich mit weiteren Fragen... ☺

PS.: Eigentlich wollte ich nur Wetterdaten über den Server verfügbar machen, jetzt werde ich noch zum Konsolenfreak....

Windige Grüße Siegfried

Antworten |