httpd mit FastCGI: Ein Programm geht, eins geht nicht...?

C

CrimsonKing

Guest
Ich habe mal wieder eins dieser Probleme...

Setup:

  • OpenBSD-5.9-Server mit eigener Domain.
  • Hinter dieser Domain liegt ein httpd, der standardmäßig ein kleines C-Programm aufruft, das im Wesentlichen ein bisschen HTML zusammenbaut. Klappt auch ganz gut.

Code:
server "meinedoma.in" {
  alias "www.meinedoma.in"
  listen on $ext_addr port 80

  location "/favicon.ico" {
    # Favicon direkt aus dem docroot abrufen
    root "/htdocs/meinedoma.in"
    no fastcgi
  }

  # Standardaufruf startet CGI-Script namens "web":
  root "/htdocs/meinedoma.in/web"
  fastcgi socket "/run/slowcgi.sock"
}

Code:
# /var/www/htdocs/meinedoma.in/web
<!doctype html>
<html>
    <head>
...
-- snip --

Jetzt wollte ich diese Datei aber durch ein anderes Programm ersetzen, das etwas Ähnliches tut:

Code:
# /var/www/htdocs/meinedoma.in/webneu
<!doctype html>
<html>
  <head>
...
-- snip --

# doas mv /var/www/htdocs/meinedoma.in/web /var/www/htdocs/meinedoma.in/webalt
# doas mv /var/www/htdocs/meinedoma.in/webneu /var/www/htdocs/meinedoma.in/web

Kriege mit dem zweiten Programm aber nur einen Fehler 500 und ich versteh' das nicht. Unter welchen Umständen kann das passieren?

Ich bin irritiert.
 
Hm, das alte C-Programm ist statisch gelinkt, das neue nicht. (Andere Sprache, da müsste ich erst mal gucken, ob das überhaupt geht.) Ist das hier denn überhaupt notwendig?
 
Es muss selbständig im Chroot laufen, d.h. alle nötigen Externals müssen im Chroot sein. Dabei aber aufpassen, dass diese anderen Sachen nicht direkt auf- und abrufbar sind per HTTP.
 
Hm, explizit statisch zu linken ändert nichts, nicht mal an der Dateigröße. Jetzt bin ich irritiert.

Woran seh ich, welche Bibliotheken ggf. benötigt werden, und wie kriege ich die in httpds chroot rein? :confused:
 
Hm, sind schon ein paar Bibliotheken. Dann scheint die alte Compilerversion noch kein -static zu können. Mist.

Nein, da kriege ich "No such file or directory: webneu". Obwohl das Programm im aktuellen Ordner liegt. Hm.
 
aktuell waere in dem Moment nur '/var/www', von daher:
Code:
chroot     /var/www    htdocs/meinedoma.in/webneu
(paar spaces extra drin, ist kein tippfehler ;) )
 
Arrrrgh. Jetzt ja. :o Manchmal sind es die kleinen Dinge...
Und: Es funktioniert!

Jetzt muss ich nur noch jedes verdammte Mal nach einem Systemupdate die neuen Bibliotheken rüberschieben und dann ist alles in bester Ordnung... :rolleyes:
(Automatisieren lässt sich das nicht, nehme ich an?)
 
Ich dachte eher an so was wie "wenn dir was fehlt, zieh es dir automatisch ins chroot".
 
Mir nicht. Müsste nur irgendwie abgesichert sein... :confused:

... oder ich geh' dem Maintainer des Compilers einfach so lange auf die Nerven, bis er die neue Version mit -static zur Verfügung stellt. :D
 
Mal am Rande: Sollte das Programm nicht zuerst eine Leerzeile ausgeben? HTTP-Header und HTML sind doch durch Leerzeile zu trennen.
 
Ursprünglich hatte ich HTTP-Header ("Status: 200 OK" und "Content-Type: text/html") oben drüber stehen.
Offensichtlich ist der httpd aber klug genug, dass es auch ohne dessen explizite Deklaration funktioniert.

Vielleicht ist das ja ein versehentliches Feature ("Bug")... ;)
 
Die Header kann der Server ja machen, aber man könnte ja noch eigene anhängen. Ich würde mich an den Standard halten bzw. mal testen, ob die erste ausgegebene Zeile überhaupt im Browser ankommt. :)
 
Oh, hm. Das ist jetzt dumm.
(Nein, kommt sie nicht.)

Aber warum sollte ich da noch Header anhängen wollen? Von mir aus kann da gecachet, indiziert, gekekst und wasweißich werden. :D
 
Nö, muss man anscheinend nicht. Werd' ich nachher aber trotzdem mal machen, ein fehlendes doctype ist ja zumindest nicht in meinem Sinne.
 
Das war auch nicht konkret auf dein Programm bezogen. Der Standard sieht aber vor, dass man das prinzipiell kann, also muss es dafür ja Vorkehrungen geben.
 
Zurück
Oben