Ankündigung

Einklappen
Keine Ankündigung bisher.

Docker Image für 1.10

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Docker Image für 1.10

    Hallo, ich versuche mein System zu updaten. Wollte mal Docker ausprobieren. Vorab: Sieht schon gar nicht schlecht aus. Da das ganze auf ein RPi läuft, muss es ein ARM Image sein. Das von henfri im Docker-Hub scheint nicht zu gehen. Ich hab Dockerfile von Git geladen, auf Version 1.10 gestellt und kompiliert. Damit es lief, musste ich ein paar Sachen anpassen. Damit geht es zwar jetzt bei mir, aber ich dachte, vielleicht können wir das ja zusammen so einbauen, dass auch andere etwas davon haben. Änderungen:

    1. Ich habe von hier begonnen :https://github.com/t3r/smarthome-doc...ter/Dockerfile
    2. Basispaket von 3.8-slim auf 3.10-slim upgedated
    3. Versionen (SHNG und Plugins) auf 1.10.0 gesetzt
    4. Diese Zeilen ergänzt, weil er beim hochfahren versucht dort ein File zu schreiben, was sonst nicht geht (Permission)
    Code:
    # chmod for check_cpu_speed to safe data
    chmod go+rw $PATH_SHNG/var; \
    ​5. (Hier istglaub ich ein Fehler, das ist nur ein Workaround)
    Beim Hochfahren versucht er die Logging Configuration zu laden von /usr/smarthome/etc/logging.yaml, die existiert aber da nicht.
    Daher ganz pragmatisch
    Code:
      #Bug somewhere?  
      RUN cp /usr/local/smarthome/etc/logging.yaml.default /usr/local/smarthome/etc/logging.yaml​
    Damit läuft das ganze. Könnte jemand das mal reviewen? Ich kann das in ein eigenes Repo ziehen oder wir pflegen das in das quell repo ein.

    Vollständiges File
    Code:
    ### dockerfile for smarthomNG flavor "full"
    
    ### select python base image ####################################################
    FROM python:3.10-slim As python-base
    
    ### Build Stage 1 - clone smarthome NG from Git #################################
    FROM python-base As stage1
    
    # install git
    RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
        ca-certificates git gcc python3-dev; \
      rm -rf /var/lib/apt/lists/*
    
    # prepare clone
    ARG SHNG_VER_CORE="v1.10.0" \
        SHNG_VER_PLGN="v1.10.0" \
        PLGN_DEL="gpio"
    
    # clone smarthomeNG from Git
    WORKDIR /usr/local/smarthome
    RUN set -eux; \
    # clone SmarthomeNG
      git -c advice.detachedHead=false clone --single-branch --branch $SHNG_VER_CORE \
        https://github.com/smarthomeNG/smarthome.git .; \
      git -c advice.detachedHead=false clone --single-branch --branch $SHNG_VER_PLGN \
        https://github.com/smarthomeNG/plugins.git plugins; \
    # remove git files - not usefull inside a container
      find . -name ".git*" -print -exec rm -rf {} +; \
      find . -name ".*" -type f -print -exec rm -rf {} +; \
    # remove unneccessary files - no need for doc, dev and so on inside a container
      rm -rf deprecated tests dev tools/* doc tox.ini setup.py; \
      find . -name "*.md" -print -exec rm -rf {} +; \
    # remove plugins if they are not running - for example GPIO is RasPi specific
      if [ "$PLGN_DEL" ]; then \
        for i in $PLGN_DEL; do rm -rf plugins/$i; done; \
      fi
    
    ### Build Stage 11 - determine requirements for smarthomNG #######################
    FROM stage1 As stage2
    
    ARG PLGN_CONFLICT="appletv hue2"
    
    WORKDIR /usr/local/smarthome
    RUN set -eux; \
    # remove some plugins to remove there requirements
      if [ "$PLGN_CONFLICT" ]; then \
        for i in $PLGN_CONFLICT; do rm -rf plugins/$i; done; \
      fi; \
    # necessary to run smarthome.py
    python -m pip install --no-cache-dir "ruamel.yaml<=0.16.8"; \
    # create requirement files
      python3 bin/smarthome.py --stop || true
    
    ### Build Stage 3 - build requirements for smarthomNG ###########################
    FROM python-base As stage3
    
    COPY --from=stage2 /usr/local/smarthome/requirements/all.txt /requirements.txt
    
    # install/update/build requirements
    RUN set -eux; \
      apt-get update; apt-get install -y --no-install-recommends \
        #pyjq
        automake \
        #pyjq, openzwave
        build-essential \
        #bluepy
        libglib2.0-dev \
        #rrd
        librrd-dev \
        #pyjq
        libtool \
        #openzwave
        libudev-dev \
        openzwave; \
      rm -rf /var/lib/apt/lists/*; \
    # fix python requirements
      echo "holidays<0.13" >>/requirements.txt; \
      #sed -e 's/^\(holidays.*\)/\1,<=0.12;python_version==3.8/g' lib/requirements.txt; \
    # install python requirements
      python -m pip install --no-cache-dir -r requirements.txt
    
    ### Final Stage ##################################################################
    FROM python-base
    
    # copy files into place
    COPY --from=stage1 /usr/local/smarthome /usr/local/smarthome
    COPY --from=stage3 /usr/local/lib /usr/local/lib
    
    RUN set -eux; \
    # add user smarthome:smarthome respectively 1000:1000
      adduser --disabled-password --gecos "" smarthome; \
    # install needed tools
      apt-get update; apt-get install -y --no-install-recommends \
        gosu \
        openzwave \
        procps \
        unzip; \
      rm -rf /var/lib/apt/lists/*; \
      #python -m pip install --no-cache-dir --upgrade pip; \
    # prepare volumes
      PATH_SHNG="/usr/local/smarthome"; \
      PATH_CONF="/mnt/conf"; \
      PATH_DATA="/mnt/data"; \
      PATH_HTML="/mnt/html"; \
      DIRS_CONF="etc items logics scenes functions"; \
      DIRS_DATA="backup restore cache db log"; \
      chmod go+rws $PATH_SHNG/requirements; \
    # prepare conf
      mkdir -p $PATH_CONF; \
      for i in $DIRS_CONF; do \
        cp -vlr $PATH_SHNG/$i $PATH_CONF; \
        touch $PATH_CONF/$i/.not_mounted; \
      done; \
      chmod go+rw $PATH_CONF/etc; \
    # prepare data
      mkdir -p $PATH_SHNG/var/run; \
    # chmod for check_cpu_speed to safe data
      chmod go+rw $PATH_SHNG/var; \
      chmod go+rw $PATH_SHNG/var/run; \
      for i in $DIRS_DATA; do \
        mkdir -p $PATH_DATA/$i; \
        ln -vs $PATH_DATA/$i $PATH_SHNG/var/$i; \
        touch $PATH_DATA/$i/.not_mounted; \
      done; \
      chmod go+rw $PATH_DATA/log; \
      # fix for wrong log path
      ln -vs $PATH_DATA/log $PATH_SHNG/log; \
    # prepare smartvisu
      mkdir -p $PATH_HTML /var/www; \
      ln -vsf $PATH_HTML /var/www/html; \
    # prepare legacy
      chmod go+rw $PATH_SHNG/etc; \
      touch $PATH_SHNG/etc/.not_mounted
    
    # expose ports for cli, websocket, admin interface
    EXPOSE 2323 2424 8383
    
    #Bug somewhere?
    RUN cp /usr/local/smarthome/etc/logging.yaml.default /usr/local/smarthome/etc/logging.yaml
    
    # and finalize
    #COPY ./entrypoint.sh ./shng_wrapper.sh /
    COPY * /
    ENTRYPOINT ["/entrypoint.sh"]
    CMD ["--foreground"]​

    #2
    Ich habe das Repo mal geklont und die Änderungen bis auf Punkt 4 und 5 gemacht (bei denen ich recht sicher bin)

    Ich bastel dazu an einer Github Action, so dass man den Fehler sehen kann:
    https://github.com/AAPohl/docker_sma...ob/21911810711

    Code:
    yaml_load: YAML-file '/usr/local/smarthome/etc/logging.yaml' not found
       ERROR: Invalid logging configuration in file '/usr/local/smarthome/etc/logging.yaml'

    Kommentar


      #3
      Der von Dir genannte Fehler wird doch gerade durch Punkt 5, den du nicht umgesetzt hast, vermieden.

      Kommentar


        #4
        Genau, das würde das Problem lösen, aber es scheint mir eher ein "workaround" zu sein. Ich habe das also Issue eingestellt mit einem Vorschlag, das zu fixen.

        Die GitHub Action geht mit dem workaround aber

        Kommentar


          #5
          Ich habe das also Issue eingestellt mit einem Vorschlag, das zu fixen
          wo?

          Kommentar


            #6
            Hier: https://github.com/smarthomeNG/smarthome/issues/633

            Kommentar


              #7
              Das was Punkt 5 macht (das kopieren der logging.yaml.default), macht SmartHomeNG standardmäßig und das funktioniert auch, wenn kein Docker verwendet wird. Ich vermute das Problem also in der Docker Konfiguration (und nicht in SmartHomeNG).
              Viele Grüße
              Martin

              There is no cloud. It's only someone else's computer.

              Kommentar


                #8
                Sollte das etc Verzeichnis nicht ohnehin außerhalb vom Docker Container sein.. also als rw gemountet? Mit dem Kommandozeilenargument -e kann man im aktuellen Develop übrigens alle Userdaten im etc Ordner ablegen. Das dürfte das Setup von Dockercontainern deutlich vereinfachen.

                Kommentar


                  #9
                  Onkelandy Die Option -e kommt erst mit dem nächsten Release. Im Moment ist die nur im develop
                  Viele Grüße
                  Martin

                  There is no cloud. It's only someone else's computer.

                  Kommentar


                    #10
                    Ich bemühe mich gerade, dass Dockerfile zu verstehen. Hat ja auch nen guten Lerneffekt. Ich will jetzt auch wissen, was es ist. Ich werde berichten.

                    Kommentar


                      #11
                      Ich glaube ich habe den Fehler gefunden, u. Redundanz zu vermeiden: Ich habe das ins Issue geschrieben.

                      Kommentar


                        #12
                        Hi.
                        Ich mache gerade alles neu mit dem Raspberry Pi4 und wollte mal das ganze mit Docker ausprobieren.
                        Leider finde ich nix was läuft. Ich bin zwar mit Docker noch nicht so firm, aber das Docker von Henfri startet bei mir nicht und das von "smarthomeng" scheint er aktuell nicht zu finden.

                        Gibt´s einen aktuellen docker für smarthomeng und smartvisu?

                        Edit:
                        Fehlermeldung im Portainer:"exec /entrypoint.sh: exec format error"
                        und ich sehe gerade, dass das noch V1.8.2 ist...
                        Zuletzt geändert von wolder; 24.04.2024, 11:04.

                        Kommentar


                          #13
                          Ich kenne keinen Container für ARM
                          Die Fehlermeldung deutet auf einen fehlerhafte Architektur.

                          Du könntest das Raspi Image von Onkelandy nutzen.

                          Kommentar


                            #14
                            Danke.
                            Irgendwie hab ich damit schon gerechnet. Ich hab´s jetzt nach eurer Anleitung komplett neu installiert...

                            Kommentar


                              #15
                              Ich habe jetzt ein Docker 1.10. für Intel / AMD x64 angefangen zu erstellen. Bei mir läuft das Ganze auf nem i3-6100T (ThinkCentre mIrgendwas) auf Flatcar Linux.

                              Ich berichte hier:
                              https://knx-user-forum.de/forum/supp...22#post1960622

                              Kommentar

                              Lädt...
                              X