Installationsskript + richtige Rechte

  • Wenn das Script als normaler User ausgeführt wird, bekommen neu erstellte Dateien die Berechtigung des Users.

    Die Dateien gehören dann dem User pi, sofern das Script auch mit dem user pi ausgeführt wird.

    Code
    cd /home/pi/
    wget "Link" && tar xfz name.tar.gz
    rm name.tar.gz

    Die Installation von Paketen kann man zusammenfassen.

    Code
    sudo apt-get update && apt-get upgrade -y
    sudo apt-get install python3-flask telnet python3-pip

    So behält man auch die Übersicht und die Installation ist ein bisschen schneller, da apt-get nicht dreimal hintereinander gestartet wird, um 3 Pakete zu installieren.

    Die Ausgabe der Meldungen kann dann auch zusammengefasst werden.

    PS: Wer zur Hölle nutzt noch Telnet? Hast du ein Layer3 Switch im Keller stehen?

    Einmal editiert, zuletzt von RestlessMud46765 (9. Dezember 2020 um 11:14)

  • 18 -20 dafür braucht es kein sudo,

    18 ist ohnehin sinnlos

    19 Lade das Archiv nach /tmp, entpacke es dann am Zielpfad (tar kennt Pfadangaben)

    jm2c (*zu spät)

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • PS: Wer zur Hölle nutzt noch Telnet? Hast du ein Layer3 Switch im Keller stehen?

    Den Switch habe ich zwar, aber ich nutze Telnet, um sich mit einer Koppelsoftware für mein Smarthome zu verbinden + Daten zu senden. Anders geht es in diesem Fall leider nicht.

    Was wäre mit flask, wenn es im home/pi liegt, startet es korrekt? Das ist aktuell das einzige kleine Problem.

    18 -20 dafür braucht es kein sudo,

    18 ist ohnehin sinnlos

    19 Lade das Archiv nach /tmp, entpacke es dann am Zielpfad (tar kennt Pfadangaben)

    Danke, passe ich an. Wie müsste es bei 19 aussehen?

  • Code
    wget  -O /tmp/name.tar.gz  "Link"  &&   tar -xzf /tmp/name.tar.gz -C /home/pi/
    rm /tmp/name.tar.gz

    oder einfach ohne Zwischenspeicherung:

    wget -qO- LINK | tar xvz - -C /home/pi

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Das ist noch besser.

    19 Lade das Archiv nach /tmp, entpacke es dann am Zielpfad (tar kennt Pfadangaben)

    Für sowas am besten mktemp verwenden. tempfile ist veraltet und soll nicht mehr genutzt werden.


    Code
    URL="https://files.pythonhosted.org/packages/6a/7c/b694a1e8d0620cfd9ad1f50e64f69f6b1317f55f7583931599ba7d36d2b8/fastapi-0.62.0.tar.gz"
    ARCHIVE=`mktemp --suffix .tar.gz`
    
    wget -q $URL -O $ARCHIVE && tar -xzf $ARCHIVE -C ~
    rm $ARCHIVE

    Hier ein Artikel wie man robuste Shell-Scripts schreibt: Writing Robust Bash Shell Scripts

    • set -e
    • set -u
    • trap
    • atomic operations
  • Hallo,

    Zitat
    Code
    sudo apt-get update && apt-get upgrade -y

    Halte ich für falsch, das zu machen. Ich würde kein Installer-Skript ausführen wollen, was ungefragt mein System aktualisiert - und das auch noch, ohne rückzufragen, wenn ggf. fragen sind.

    Warum installierst du Flask aus den Paketquellen anstatt die aktuelle Version via pip zu installieren?

    Soll das Skript, also den Serverdienst, wirklich _allen_ Nutzern systemweit zur Verfügung stehen? Dann wäre /usr/local das richtige Verzeichnis.

    Was IMHO auch eleganter wäre ist, dir in Python ein Installer-Skript zu bauen und dann alles via pip zu installieren.

    Führst du das Skript mit dem Build-In Server von Flask aus? Der ist nicht für den Produktiveinsatz gedacht, steht auch wörtlich in der Doku. Du solltest die Flask App also besser mindestens über einen WSGI-Server wie Gunicorn ausführen.

    Gruß, noisefloor

  • Was wäre mit flask, wenn es im home/pi liegt, startet es korrekt? Das ist aktuell das einzige kleine Problem.

    Da du flask als Paket der Distribution (dist-package) installierst, steht es global zur Verfügung.

    Der Nachteil ist hier, dass man nicht bestimmen kann, welche Version genutzt werden soll.

    Das Paket suntime sollte sich ohne venv mit pip und ohne --user erst gar nicht installieren lassen.

    Normalerweise installiert man für Python-Programm die Abhängigkeiten in einem virtuellen environment.

    Das hat den Vorteil, dass die Pakete nicht über den Paketmanager der Distribution installiert werden müssen

    und das Betriebssystem bleibt unangetastet.


    Später muss dann mit dem User erst das venv aktiviert werden und dann kann man flask als user ganz normal nutzen.

    Code
    source ~/venv/bin/activate
    cd deine_app
    export FLASK_APP=app.py
    export FLASK_ENV=development  # Aktiviert den Entwicklermodus und das automatische Nachladen
    flask run

    Sobald die APP fertig ist, muss das development wieder entfernt werden.

    Aber wahrscheinlich wirst du sowas wie uwsgi verwenden.

    Der SECRET_KEY sollte auch gesetzt werden, falls das nicht schon passiert ist.

  • Hallo,

    Zitat

    Das Paket suntime sollte sich ohne venv mit pip und ohne --user erst gar nicht installieren lassen.

    @DeaD_EyE : Den Zusammenhang zu venv verstehe ich nicht...

    Bzgl. pip: AFAIK ist es so, dass `pip install IRGENDWAS`implizit `--user` setzt. Das war früher mal anders, ist aber vor nicht allzu langer Zeit mal geändert worden.

    Gruß, noisefloor

  • Das war früher mal anders, ist aber vor nicht allzu langer Zeit mal geändert worden.

    Das ist an mir vorübergegangen. Falls ich mich mal außerhalb einer pyenv-Installation oder eines venvs bewege und Pakete als normaler User installiere (kommt nie vor) sollte, habe ich --user immer explizit angegeben.

    Dass die das geändert haben, ist Bockmist.

    Deswegen Mist, weil implizit beim lokalen User etwas installiert wird.

    Das ist vor allem dann blöd, wenn man ein venv hat, aber vergaß dieses zu aktivieren.

    Wenn man dann wie gewohnt pip verwendet, wird das Paket für den lokalen User installiert und nicht im venv.

    Vorher war es so, dass man eine fette rote Fehlermeldung bekam, dass die Dateiberechtigungen nicht ausreichen, um das Paket nach /usr/lib/python3/ zu installieren.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!