Apache2 Home-Verzeichnis auf USB-Stick

  • Hallo Zusammen,
    Bin hier mal wieder am verzweifeln. Irgendwie mag mich der Raspy nicht.


    Mein Strommonitor erzeugt mir u. A. Alle 5 Minuten Bilder, die mir der Apache den im lokalen Netzwerk über eine html-Seite anzeigt.
    Momentan liegt alles (html und Bilder) im /var/www des Apache und funktioniert auch prima.


    Jetzt wollte ich das Ganze aber auf den USB-Stick machen, damit die SD-Karte nicht alle 5 Minuten wegen den Bildern beschrieben ist.


    Die Config-Dateien des Apache kann ich schon auf das USB-Verzeichnis ändern, aber dann wird die Seite nicht mehr angezeigt.


    Der Ordner /var/www/html ist pi:root und auch die Dateien darin.
    Der Ordner /media/pi/DATA/html auf dem Stick ist aber nur pi:pi


    Versuche ich die Gruppe oder den Besitzer auf dem Stick zu ändern, kommt immer "Operation ist nicht erlaubt".
    Egal ob sudo oder nicht.


    Was könnt ich denn noch machen?

  • Ja - der ist FAT.
    Ich hab ihn zum Test mal nach Home/pi/piusb gemonted.
    War aber dann das Gleiche.


    Soll ich ihn wohl anders formatieren?

  • Linux Dateirechte funktionieren nur mit Linux-Dateisysteme. Formatier deinen Stick also mit ext3 oder ext4 und dein Problem sollte erledigt sein.


    Alternativ, da ein USB-Stick ebenso wie eine SD Karte aus NAND-Flash besteht und daher das selbe Problemen zur Haltbarkeit hat, lässt du die Bilddatei einfach in den RAM schreiben - so wie fred0815 bereits vorgeschlagen hat. Dazu bietet sich /dev/shm/ an. Hauptsache die Datei wird überschrieben da dir sonst der RAM ausgeht ;)
    /dev/shm/ wird standardmäßig erzeugt und ist ein Verzeichnis 50% der Größe des RAMs.

  • Das ist sehr interessant. Die Bilder sind eh nur temporär und brauchen auch nicht dauerhaft gespeichert werden.
    Mein python-script überschreibt die Bilder eh nur, was ja dann auch passt.


    Aber es geht wieder nicht.
    Habe jetzt die index.html ganz normal im /var/www/html-Verzeichnis gelassen.
    In der Index habe ich testweise ein Bild gändert auf:
    <img src="/dev/shm/verbrauchjahr.png">
    Nun wird aber nur ein Platzhalterzeichen für das Bild in der INternetseite angezeigt.


    Die Bilder in dev/shm sind alle wieder pi:pi
    Den Benutzer www-data habe ich extra der Gruppe pi zugefügt. Wobei ich aber auch nicht glaube, dass es am Benutzer bzw. Recht liegt.

  • Hast du einen Eintrag in der apache2.conf gemacht, oder einen vhost ?
    Standardmäßig darf sonst kein Inhalt vom root-Verzeichnis angezeigt werden.

    Code
    <Directory /dev/shm>
       AllowOverride None
       Require all granted
    </Directory>
  • Stimmt, das hab ich vergessen zu erwähnen...
    Da die DocumentRoot Einstellung des apache2 auf /var/www/ zeigt ist dass das 'niedrigste' Wurzelverzeichnis was angesprochen werden kann. Denn die Anfrage stellt der Client sobald er die HTML Seite abruft und der Browser dies verarbeitet.


    <img src="/verbrauchjahr.png">


    Würde also aus Konsolen-Sicht, wenn du dich über SSH anmeldest oder ein Terminal öffnest /var/www/html/verbrauchjahr.png sein, nicht /verbrauchjahr.png


    <img src="/dev/shm/verbrauchjahr.png">


    Damit würde der Client also versuchen /var/www/html/dev/shm/verbrauchjahr.png zu öffnen.


    Abhilfe schafft man indem man apache2 erlaubt auch auf ein anderes Verzeichnis zuzugreifen.



    Eine weitere Möglichkeit wäre einfach ein Symlink zu erzeugen:

    Code
    ln -s <target> <linkname>


    Also zum Beispiel:

    Code
    sudo ln -s /dev/shm/ /var/www/html/bilder


    Dann hast du im Verzeichnis /var/www/html/ eine Verknüpfung "bilder" nach /dev/shm/ und wenn in deinem HTML Code dann folgendes nutzt sollte es ebenso funktionieren, ohne die apache2 Konfiguration zu verändern:


    [code=php]
    <img src="/bilder/verbrauchjahr.png">
    [/php]

  • Ja also das mit dem Symlink wäre ja die Beste Variante.
    Weil dann könnte ich Bilder in var/www/html liegen lassen, die nicht verändert werden und auch nicht gelöscht werden dürfen


    Aber es geht lieder auch nicht.
    Habe die index wie beschrieben verändert und den symlink erstellt.
    Der ist jetzt auch vorhanden.
    Aber beim Zugriff auf index.html wird das testweise verlagerte Bild durch ein Platzhalterzeichen ersetzt.


    Den Apache habe ich mit sudo /etc/init.d/apache2 restart natürlich neu gestartet


    Der symlink ist root:root
    Die Bilder in /dev/shm sind wieder pi:pi


    www-data ist habe ich als user der gruppe pi hinzugefügt.

  • Bei mir hat das funktioniert - ich hab das extra getestet. Du musst die Datei aber natürlich schon in /dev/shm/ ablegen, "bilder/" ist nur eine Verknüpfung, die Datei liegt dann nicht in /var/www/html/ sondern natürlich in /dev/shm/
    Neustarten brauchst du den apache2 deshalb nicht.


    => http://raspberrypi.roxxs.org/apache2_symlink.mp4

  • Sakra - jetzt gehts - Sch... jetzt geht´s.
    DANKEEEE.


    Es lag am Bildpfad in der index.html
    Ich darf nicht:
    <img src="/bilder/verbrauchjahr.png">
    sondern muss:
    <img src="/bilder/dev/verbrauchjahr.png">


    Bin drauf gekommen, als ich mit dem Dateimanager im Verzeichniss /var/www/html/auf den Ordner bilder geklickt habe und dann in der Adressleiste auch /...bilder/dev/.... stand.


    Also das ist jetzt denke ich genau das was ich brauche.
    Ich dank Euch vielmals.
    (Das muss ich mir jetzt gleich alles wieder aufschreiben, sonst kackt mir das System mal wieder ab und ich weis nix mehr)
    Danke nochmal.


    Tschüssn


  • Dann hast Du die Dateien nicht direkt in /dev/shm/ liegen sondern dort einen Unterordner erstellt, den du dann natürlich auch in den Pfad mit aufnehmen musst: /dev/shm/dev/


    Wenn du deine Bilddatei direkt in /dev/shm/ ablegen würdest - so wie beschrieben, ohne Unterverzeichnis, dann ist "src" auch einfach nur /bilder/xyz.png


    Erstellst du aber in /dev/shm/ ein weiteres Verzeichnis "dev" dann muss "src" natürlich auch /bilder/dev/xyz.png lauten...


    Alternativ setzt du den Symlink anders, so dass er nicht auf /dev/shm/ zeigt sondern auf /dev/shm/dev/ und kannst dann "src" wieder auf /bilder/xyz.png setzen


    Code
    ln -s /dev/shm/ /var/www/html/bilder


    /var/www/html/bilder ist dann eine Verknüpfung auf /dev/shm/


    Code
    ln -s /dev/shm/dev/ /var/www/html/bilder


    /var/www/html/bilder ist dann eine Verknüpfung auf /dev/shm/dev/



    Sollte eigentlich logisch sein? :-/

  • Nönönönönö,
    es gibt bei mir DEFINITIV nur /dev/shm - Der hat keine weiteren Unterordner mehr.
    Ich habe die Verknüpfung genau nach Deinen Vorgaben erzeugt.
    Nur wenn ich über die Verknüpfung die Bilder anschaue zeigt die Adressleiste:
    /var/www/html/bilder/shm


    Hab mich aber vertippt:
    Ich muss bei src eingeben:
    <img src="/bilder/shm/verbrauchjahr.png">

  • Ich glaub ich habs.
    Ich hab erst mal nen Ordner "Bilder" in /var/www/html erstellt, bin dann in den Ordner gegangen und habe den symlink erstellt.
    Deshalb hab ich jetzt im Ordner Bilder auch nen Unterordner ...../shm
    Irgendwie so wirds gewesen sein.


    Habe den link und den Ordner gelöscht und nochmal neu erstellt wie in Deinem Video.
    Das mit dem Leerzeichen von "bilder" ist aber auch tricky. Habs erst übersehen und musste dann nochmal löschen.


    Jetzt funzts aber.


    Sakrischen Dank.


    Jetzt gehts dann endlich mal ans Tkintern, weil alles andere Läuft.

    Edited once, last by Tecci ().

  • Hallöchen,
    jetzt hätt ich doch noch ne Frage:
    In der html-Datei habe ich jetzt ein php-script, fas mir den Inhalt einer csv-Datei ausgiebt.
    Das geht aber nur solange die csv auch im ordner /var/www/html liegt.
    Wenn ich den richtigen Pfad /media/pi/DATA angebe, funktioniert es nicht.
    Auch mit einem Symlink "usb" der auf das Verzwichnis verweist, geht es nicht.


    Ist das lösbar?

  • Wieso sowas nicht geht wurde doch schon erklärt.


    Mit einem Symlink wäre es definitiv lösbar - und auch mit der von fred0815 beschrieben Möglichkeit.


    Bitte genau beschreiben was du wie eingegeben hast und gehe dann auch wie in meinem Video zu sehen vor und poste die Ausgaben der Befehle, bitte in CODE FAQ => Nützliche Links / Linksammlung => HowTo: CODE / PHP Code im Forum posten

  • Bin grad nur am Ipad, aber soviel dazu:
    Mit nen Symlink zum Usb-Stick gehts devinitiv nicht.
    Mit nem Ordner-Pfad zu /dev/shm gehts auch ohne symlink.


    Ich denke es liegt mal wieder an der Formatierung des USB-Stick. Wurde hier ja auch schon mal als Tipp genannt.
    Ich muss jetzt doch mal einen mit dem pi formatieren. > Kann ich den dann eigentlich im Notfall mit Windows lesen?
    Kopiere jetzt als Zwischenlösung die csv per cronjob vom Stick nach /dev/war und greife darauf mit php zu.
    Es funzt eigentlich jeder Ordner ausser der Stick.