Kategorie: Unix

  • Wechsel von ioBroker zu Home Assistant

    Meine positiven Erfahrungen beim Wechsel von ioBroker zu Home Assistant

    Nach vier Jahren intensiver Nutzung von ioBroker habe ich mich entschieden, auf Home Assistant umzusteigen. Diese Entscheidung war nicht leicht, da ioBroker mir über die Jahre hinweg gute Dienste geleistet hat. Dennoch habe ich schnell gemerkt, dass der Wechsel zu Home Assistant viele Vorteile mit sich bringt, die meine Erwartungen übertroffen haben.

    Einfache Integration und Benutzerfreundlichkeit

    Einer der ersten positiven Aspekte, die mir bei Home Assistant aufgefallen sind, ist die einfache Integration und Benutzerfreundlichkeit. Während ioBroker eine gewisse Einarbeitungszeit erforderte, um alle Funktionen und Möglichkeiten zu verstehen, bietet Home Assistant eine intuitivere Benutzeroberfläche. Die Einrichtung neuer Geräte und Automatisierungen geht schnell von der Hand, und die umfangreiche Dokumentation sowie die aktive Community bieten jederzeit Unterstützung. Besonders die visuelle Darstellung der Automatisierungen und die Möglichkeit, diese per Drag-and-Drop zu erstellen, haben mir den Einstieg erleichtert.

    Leistungsstarke Add-ons

    Ein herausragendes Merkmal von Home Assistant, das mich besonders begeistert, ist die Add-on-Funktionalität. Hier sticht insbesondere das Add-on Cloudflared hervor. Mit Cloudflared kann ich meine Home Assistant-Instanz sicher und einfach über das Internet zugänglich machen, ohne komplizierte Portweiterleitungen oder VPNs einrichten zu müssen. Diese Funktionalität hat meine Smart-Home-Erfahrung erheblich verbessert und bietet mir die Flexibilität, von überall auf meine Geräte zuzugreifen. Darüber hinaus gibt es eine Vielzahl weiterer nützlicher Add-ons, wie den File Editor, der das Bearbeiten von Konfigurationsdateien direkt im Browser ermöglicht, oder Node-RED, das eine visuelle Programmierumgebung für komplexe Automatisierungen bietet.

    Regelmäßige Updates und Verbesserungen

    Ein weiterer großer Vorteil von Home Assistant sind die regelmäßigen Updates und Verbesserungen. Das Entwicklerteam hinter Home Assistant ist äußerst aktiv und bringt kontinuierlich neue Funktionen und Sicherheitsupdates heraus. Dies sorgt nicht nur für eine stetige Weiterentwicklung der Plattform, sondern auch für ein hohes Maß an Sicherheit und Stabilität. Im Vergleich zu ioBroker, wo Updates manchmal unregelmäßig erschienen, fühle ich mich bei Home Assistant stets auf dem neuesten Stand der Technik. Die detaillierten Release Notes und die Möglichkeit, Updates mit einem Klick zu installieren, machen den Prozess zudem sehr benutzerfreundlich.

    Vielfältige Integrationen

    Home Assistant bietet eine beeindruckende Anzahl an Integrationen für verschiedenste Geräte und Dienste. Egal ob es sich um Smart-Home-Geräte, Wetterdienste oder Sprachassistenten handelt – die Integration ist meist unkompliziert und erweitert die Möglichkeiten meines Smart Homes erheblich. Im Vergleich zu ioBroker habe ich festgestellt, dass Home Assistant eine breitere Unterstützung und einfachere Konfigurationsmöglichkeiten bietet. Besonders die nahtlose Integration von Diensten wie Google Assistant und Amazon Alexa hat mich überzeugt, da ich nun meine Geräte bequem per Sprachbefehl steuern kann.

    Flexibilität und Anpassbarkeit

    Die Flexibilität und Anpassbarkeit von Home Assistant sind ebenfalls bemerkenswert. Mit YAML-Konfigurationen und der Möglichkeit, eigene Skripte und Automatisierungen zu erstellen, kann ich mein Smart Home genau nach meinen Vorstellungen gestalten. Diese Anpassungsfähigkeit war einer der Hauptgründe, warum ich mich für Home Assistant entschieden habe, und sie hat mich nicht enttäuscht. Die Möglichkeit, benutzerdefinierte Dashboards zu erstellen und die Oberfläche nach meinen Wünschen anzupassen, bietet mir ein hohes Maß an Individualität. Zudem ermöglicht die Integration von HACS (Home Assistant Community Store) den einfachen Zugriff auf benutzerdefinierte Komponenten und Themes, die von der Community entwickelt wurden.

    Virtualisierung mit Proxmox

    Ein weiterer bedeutender Schritt in meiner Smart-Home-Reise war der Wechsel von einem Raspberry Pi zu einer Virtualisierungslösung mit Proxmox. Diese Entscheidung hat meine Home Assistant-Instanz noch leistungsfähiger und stabiler gemacht. Proxmox bietet eine robuste Plattform für die Virtualisierung, die es mir ermöglicht, mehrere virtuelle Maschinen und Container auf einem einzigen Host zu betreiben. Dies hat nicht nur die Performance verbessert, sondern auch die Verwaltung und Skalierbarkeit meines Smart-Home-Systems vereinfacht. Die Möglichkeit, Snapshots zu erstellen und Backups zu automatisieren, gibt mir zusätzliche Sicherheit und Flexibilität.

    Community und Support

    Ein weiterer Aspekt, der mich bei Home Assistant beeindruckt hat, ist die starke und hilfsbereite Community. In den Foren und auf Plattformen wie GitHub und Discord finde ich stets Unterstützung und kann mich mit anderen Nutzern austauschen. Die Vielzahl an Tutorials, Videos und Blogbeiträgen, die von der Community erstellt werden, haben mir den Umstieg erheblich erleichtert. Bei ioBroker war die Community zwar auch aktiv, aber bei Home Assistant habe ich das Gefühl, dass die Unterstützung noch umfassender und zugänglicher ist.

    Nützliche Links

    Hier sind einige Links, die mir bei der Umstellung und Nutzung von Home Assistant besonders geholfen haben:

  • jdownloader on qnap

    jdownloader auf qnap

    Um jdownloader auf einem qnap zu installieren und über das Webinterface zu verwenden, müssen Sie die folgenden Schritte ausführen

    Zuerst müssen Sie installieren „Entware“ mit diesem Skript https://raw.githubusercontent.com/Entware/installer.sh/master/generic.sh

    Dann müssen Sie JRE über den QNAP Store installieren

    Registrieren Sie ein Konto auf https://my.jdownloader.org

    Jetzt müssen Sie diesen Code ausführen

    #!/bin/bash
    
    clear
    
    /bin/echo ""
    /bin/echo "============================================================="
    /bin/echo "            JDownloader2 QPKG Installer script"
    /bin/echo "============================================================="
    /bin/echo ""
    
    JAVA_HOME_TEST=$(/bin/cat /etc/profile | awk '/JAVA_HOME=/ { print $2 }' | tail -c +11)
    CONF=/etc/config/qpkg.conf
    QPKG_NAME="JDownloader2"
    QPKG_DIR=$(/sbin/getcfg $QPKG_NAME Install_Path -f $CONF)
    JD2_UPDATE_FILE="jd2_update"
    JD2_UPDATE_LINK="https://www.dropbox.com/s/gmp6wu95b3wyecm/$JD2_UPDATE_FILE"
    JD2_JAR_FILE="http://installer.jdownloader.org/JDownloader.jar"
    JAR_FILENAME=`/bin/echo $JD2_JAR_FILE | cut -d'/' -f 4`
    
    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    
    if [ ! -z $QPKG_DIR ] ; then
      /bin/echo "===================================================================================="
      /bin/echo "JDownloader2 is already installed, please remove it if you want to install it again!"
      /bin/echo "===================================================================================="
      /sbin/write_log "JDownloader2 is already installed, please remove it if you want to install it again!" 1
      exit
    fi
    
    QPKG_DIR=
    
    # Determine BASE installation location according to smb.conf
    BASE=
    publicdir=`/sbin/getcfg Public path -f /etc/config/smb.conf`
    if [ ! -z $publicdir ] && [ -d $publicdir ];then
      publicdirp1=`/bin/echo $publicdir | /bin/cut -d "/" -f 2`
      publicdirp2=`/bin/echo $publicdir | /bin/cut -d "/" -f 3`
      publicdirp3=`/bin/echo $publicdir | /bin/cut -d "/" -f 4`
      if [ ! -z $publicdirp1 ] && [ ! -z $publicdirp2 ] && [ ! -z $publicdirp3 ]; then
        [ -d "/${publicdirp1}/${publicdirp2}/Public" ] && BASE="/${publicdirp1}/${publicdirp2}"
      fi
    fi
    
    # Determine BASE installation location by checking where the Public folder is.
    if [ -z $BASE ]; then
      for datadirtest in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/MD0_DATA; do
        [ -d $datadirtest/Public ] && BASE="$datadirtest"
      done
    fi
    if [ -z $BASE ] ; then
      /bin/echo "The Public share not found."
      exit
    fi
    
    #JD2_TMP_DIR="$publicdir/$JD2_DIR"
    
    CheckForOpt(){ #Does /opt exist? if not check if it's optware that's installed or opkg, and start the package 
      /bin/echo -n " Checking for /opt..."
      if [ ! -d /opt/bin ]; then
        if [ -x /etc/init.d/Optware.sh ]; then #if optware ,start optware
          /bin/echo "  Starting Optware..."
          /etc/init.d/Optware.sh start
          sleep 2
        elif [ -x /etc/init.d/opkg.sh ]; then #if opkg, start opkg  
          /bin/echo "  Starting Opkg..."    
          /etc/init.d/opkg.sh start
          sleep 2
        elif [ -x /etc/init.d/Entware-ng.sh ]; then #if Entware-ng, start Entware-ng  
          /bin/echo "  Starting Entware-ng..."    
          /etc/init.d/Entware-ng.sh start
          sleep 2
        else #catch all
          /bin/echo "  No Optware or Opkg or Entware-ng found, please install one of them"    
          /sbin/write_log "Failed to start $QPKG_NAME, no Optware or Opkg or Entware-ng found. Please re-install one of those packages" 1 
          exit 1
        fi
      else
        /bin/echo "  Found!"
      fi
      }
    
    pid_check() {
      # Check if process is already running
      PROCESS_PID=0
      for pid in $(/bin/pidof java); do
        # Try to find if the process is JDownloader
        /bin/grep -q "JDownloader" /proc/$pid/cmdline
        if [ $? -eq 0 ]; then
        # Process found, save PID and exit loop
        PROCESS_PID=$pid
        break
        fi
      done
      # Print result
      #/bin/echo "Pid of process = $PROCESS_PID"
      }
    
    Shutdown_jd2() { #kills a proces based on a PID in a given PID file
      pid_check
      /bin/echo -n "Checking if $QPKG_NAME is running... "
      if [[ $PROCESS_PID -eq 0 ]]; then
        /bin/echo "$QPKG_NAME is not running!"
      else
        /bin/echo "Shutting down $QPKG_NAME... "
        i=0
        /bin/kill $PROCESS_PID
        /bin/echo -n "Waiting for $QPKG_NAME to shut down: "
        while [ -d /proc/$PROCESS_PID ]; do
          /bin/sleep 1
          let i+=1
          /bin/echo -n "$i, "
          if [ $i = 45 ]; then
            /bin/echo "   Tired of waiting, killing $QPKG_NAME now"
            /bin/kill -9 $PROCESS_PID
            exit 1
          fi
        done
        /bin/echo "Done"
      fi
      }
    
    java_check() {
      /bin/echo -n "Checking for Java... "
      if [ -z "$JAVA_HOME_TEST" ]; then
        /bin/echo "Java PATH not found. Please install JRE QPKG from http://goo.gl/ayMIbE or via the Qnap App Center"
        /bin/echo "NOTE: If you have just installed Java, close and reopen your session to update (putty)."
        exit 1
      else
        /bin/echo "Found... exporting variables"
        export JAVA_HOME=$JAVA_HOME_TEST
      fi
    
      # Store JAVA binary path
      JAVA_BIN=${JAVA_HOME_TEST}/bin/java
      
      # Check if Java runs correctly
      /bin/echo -n "Checking for Java executable... "
      if ! $JAVA_BIN -version 2>&1 | /bin/grep -q "Java(TM)"; then
        /bin/echo "Java does not run correctly. Please test the Java environment and try again."
        exit 2
      fi
        /bin/echo "All OK!"
      }
    
    countdown() {
      local OLD_IFS="${IFS}"
      IFS=":"
      local ARR=( $1 ) ; shift
      IFS="${OLD_IFS}"
      local PREFIX="$*" ; [ -n "${PREFIX}" ] && PREFIX="${PREFIX} > "
      local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
      local START=$(date +%s)
      local END=$((START + SECONDS))
      local CUR=$START
     
      while [[ $CUR -lt $END ]]
      do
              CUR=$(date +%s)
              LEFT=$((END-CUR))
    
              printf "\r${PREFIX}%02d:%02d:%02d" \
                      $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))
    
              /bin/sleep 1
      done
      printf "\nOk, now I resume the installation\n"
      }
    
    jar_download() {
      if [[ ! -d $JD2_DEST_DIR ]]; then
        /bin/mkdir -p $JD2_DEST_DIR
      fi
      /bin/echo -n "Info: Downloading $QPKG_NAME Jar file... "
      if /usr/bin/wget --no-check-certificate $JD2_JAR_FILE --directory-prefix=$JD2_DEST_DIR 1>/dev/null 2>&1 ; then
        /bin/echo "Done"
        /bin/sleep 2
      else
        /bin/echo "Error!"
        /bin/echo "Couldn't download $QPKG_NAME Jar file. Please check your internet connection and try again."
        exit 0
      fi
      }
    
    cleanup() {
    if [[ -f "$publicdir/$JD2_UPDATE_FILE" ]]; then
      rm -rf "$publicdir/$JD2_UPDATE_FILE"
    fi
    if [[ -f "$publicdir/$QPKG_FILE" ]]; then
      rm -rf "$publicdir/$QPKG_FILE"
    fi
      }
    
    set_variables() {
    QPKG_DIR=$(/sbin/getcfg $QPKG_NAME Install_Path -f $CONF)
    JD2_DEST_DIR="$QPKG_DIR/jd2"
      }
    
    qpkg_download_and_install() {
      echo -n "Info: Downloading update file ... "
      if /usr/bin/wget --no-check-certificate $JD2_UPDATE_LINK --directory-prefix=$publicdir 1>/dev/null 2>&1 ; then
        echo "Done."
      else
        echo "Failed."
        /bin/echo "Oops, couldn't download JDownloader2 update file. Please check your internet connection."
        exit 0
      fi
      
      export DLINK=`/sbin/getcfg JDownloader2 dl_link -f $publicdir/$JD2_UPDATE_FILE`
      QPKG_FILE=`echo $DLINK | cut -d'/' -f 6`
    
      echo "Info: Starting download QPKG ... "
      
      if [[ -f "$publicdir/$JD2_UPDATE_FILE" ]]; then
        rm -rf "$publicdir/$JD2_UPDATE_FILE"
      fi
    
      if /usr/bin/wget --no-check-certificate -O $publicdir/$QPKG_FILE $DLINK 1>/dev/null 2>&1 ; then
        echo "Info: Download completed succesfully"
      else
        echo "Failed."
        /bin/echo "Oops, couldn't download JDownloader2 QPKG file."
        exit 0
      fi
          echo "Info: Installing the QPKG ..."
          /bin/sh $publicdir/$QPKG_FILE
          if [ "$?" != "0" ]; then
            echo "Info: Installation succesfully completed."
            /sbin/write_log "JDownloader2 QPKG succesfully installed." 4
          else 
            echo "Error occured during JDownloader2 QPKG installation."
            /sbin/write_log "Error occured during JDownloader2 QPKG installation!" 1
            rm -rf "$publicdir/$QPKG_FILE"
            exit 0
          fi
        }
    
    umask 000
    CheckForOpt
    java_check
    qpkg_download_and_install
    set_variables
    jar_download
    cd $JD2_DEST_DIR && $JAVA_BIN -Djava.awt.headless=true -jar $JD2_DEST_DIR/$JAR_FILENAME
    countdown "00:00:10" "Please Wait ..."
    Shutdown_jd2
    cd $JD2_DEST_DIR && $JAVA_BIN -Djava.awt.headless=true -jar $JD2_DEST_DIR/$JAR_FILENAME
    Shutdown_jd2
    cleanup
    /bin/echo "=========================================================================================="
    /bin/echo "All done!!! Remember to log-in to https://my.jdownloader.org/login.html and configure JD2!"
    /bin/echo "=========================================================================================="
    /bin/echo ""
    read -s -n 1 -p "Ok, now press any key to continue, then you can terminate this ssh session. Have a Good Download!!!"
    /etc/init.d/JDownloader2.sh start &
    exit

    Während des Setups müssen Sie Ihr Konto registrieren

    Jetzt können Sie Ihren Download über das Webinterdace auf myjdownloader verwalten

  • qnap Check Razzia

    Um zu überprüfen, die RAID Lauf

    cat / proc / mdstat

    Um manuel setzen Sie die Geschwindigkeit

    Echo 100000 > /proc / sys / dev / Raid / speed_limit_max

    Um manuel den RAID zu überprüfen

    Echoprüfung > /sys / block / MD0 / md / sync_action

     

  • Raspberry Pi: VNC Server installieren

    Wer seinen Raspberry Pi weder an einem eigenen Display, noch ausschließlich über eine Konsole bedienen möchte, für den ist der VNC Server das richtige. VNC überträgt das Bild der grafischen Oberfläche über das Netzwerk, oder bei Portfreigabe auch über das Internet. Alternativ lässt sich Remote Desktop installieren, wobei ich auf die Vor- und Nachteile der beiden Protokolle an dieser Stelle nicht eingehen möchte, da diese an anderer Stelle im Netzausführlich erläutert werden. Im Folgenden beschreibe ich wie man einen VNC-Server auf seinem Raspberry Pi zum Laufen bekommt.
    Voraussetzung: Raspbian oder vergleichbare Distribution installiert

    Step 1
    Als VNC-Server für den Raspberry Pi empfiehlt sich das Tight VNC Package, welches man mittels des Paketmanagers APT installieren kann.

    sudo apt-get install tightvncserver
    

    Step 2

    Nun installieren wir noch preload, ein kleines Tool, welches vorhersagt, welche Programme und Abhängigkeiten als nächstes geöffnet werden und diese bereits zuvor in den RAM lädt. Dies hat den Vorteil, dass die grafische Oberfläche wesentlich schneller läuft. Für den Betrieb des Raspberry Pis als reinen Server ist preload nicht zu empfehlen.

    sudo apt-get install preload

    Step 3

    Darauffolgend passen wir eine Konfiguration von preload an, damit die Nutzung des RAMs effektiver gehandhabt wird.

    sudo sed -i 's/sortstrategy = 3/sortstrategy = 0/g' /etc/preload.conf

    Step 4

    Jetzt starten wir den VNC-Server zum ersten mal. Dabei werden wir nach einem Passwort zum Einloggen gefragt. Daraufhin kann man festlegen, ob man ein View Only Passwort festlegen möchte, um Dritten ohne Herausgabe oder Änderung des eigenen Passwortes erlauben zu können, den Desktop des Raspberry Pis zu betrachten.

    tightvncserver

    Step 5

    Nun stoppen wir den VNC-Server wieder, um weitere Einrichtungen vorzunehmen.

    vncserver -kill :1

    Step 6

    Wir legen nun ein Startscript für den VNC-Server mit dem Namen vnc.sh an, in welches wir die unten stehenden Befehle eintragen. Dabei kann man 1280×720 durch die gewünschte Auflösung ersetzen. Ich empfehle jedoch ohne Overclocking/Übertakten nicht über 1280×720 hinaus zu gehen, da dies deutlich auf die Performance geht.

    nano vnc.sh

     

    #!/bin/sh
    vncserver :1 -geometry 1280x720 -depth 24

    Step 7
    Jetzt geben wir der eben angelegten Datei Rechte ausgeführt zu werden.

    chmod +x vnc.sh

    Möchte man VNC automatisch mit dem Booten des Raspberry Pis starten lassen so müssen wir folgende Schritte beachten.

    Step 8 (optional)
    Wir erstellen ein Start-/Stop-Script im Verzeichnis /etc/init.d mit dem Namen vncboot und fügen das folgende Startscript in dieses ein. Wie in Step 6 kann die Auflösung wieder angepasst werden.

    sudo nano /etc/init.d/vncboot
    
    ### BEGIN INIT INFO
    # Provides: vncserver
    # Required-Start: networking
    # Required-Stop:
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Starts VNC
    # Description:
    ### END INIT INFO
    
    export USER='pi'
    
    eval cd ~$USER
    
    # Check state
    case "$1" in
    start)
    su $USER -c '/usr/bin/vncserver :1 -geometry 1280x720 -depth 24'
    echo "Starting vncserver for $USER"
    ;;
    stop)
    pkill Xtightvnc
    echo "vncserver stopped"
    ;;
    *)
    echo "Usage: /etc/init.d/vncboot {start|stop}"
    exit 1
    ;;
    esac
    
    exit 0

     

    Step 9 (optional)
    Nun müssen wir der erstellten Datei wieder weitere Rechte einräumen.

    sudo chmod 755 /etc/init.d/vncboot

    Step 10 (optional)

    Abschließend müssen wir das Script in den Autostart einbinden.

    sudo update-rc.d vncboot defaults

    Endgültig fertig! Beim Starten des Raspberry Pis wird nun automatisch der VNC-Server gestartet. Wenn ihr den Raspberry Pi in dieser Form betreiben möchtet, kann ich euch empfehlen diesen zu übertakten, da die grafische Oberfläche dann wesentlich flüssiger läuft. Wie dies geht erklärte ich in dem Artikel Overclocking/Übertakten ohne Garantieverlust. Verbinden kann man sich nun im VNC Client über den Port 5901. Als Client kann ich für Windows TightVNC Viewer, für Mac OS X RealVNC und für Linux das Paket tightvnc-java empfehlen.

  • proxy multicast stream over apache proxy with authentication

    Proxy-Multicast-Stream über Apache-Proxy mit Authentifizierung

    Ich konfigurierte einen Proxy für Multicast zu http

    Dazu benötigen Sie beispielsweise für Proxying Verkehr Form Telekom Home Entertainment

    wget https://freefr.dl.sourceforge.net/project/udpxy/udpxy/Chipmunk-1.0/udpxy.1.0.23-0-prod.tar.gz
    tar -xzvf udpxy.1.0.23-0-prod.tar.gz
    machen
    make install

    in den crontab

    1 1 * * * root udpxy -p 4022

    Neuanlegen für die Authentifizierung

    htpasswd -c /etc/apache2/.htpasswd sammy

    fügen Sie ein addtional Benutzer

    htpasswd /etc/apache2/.htpasswd sammy2

    in den VHOST

            <Lage / udp>
                    http Proxypass://localhost:4022/udp
                    http Proxypassreverse://localhost:4022/udp
                    AuthType Basic
                    AuthName "Passwort erforderlich"
                    AuthUserFile /etc/apache2/.htpasswd
                    Require valid-user
                    bestellen Sie verweigern,ermöglichen
                    Lassen Sie von allen
            </Ort>

    ermöglichen auf Apache Mod falls noch nicht geschehen

    a2enmod Proxy proxy_http

    Ändern Sie die Kanalliste wie für telekom

    #EXTM3U
    #EXTINF:-1,(05) RTL
    https://Benutzer:password@server/udp/239.35.20.10:10000
    
    #EXTINF:-1,(06) RTL2
    https://Benutzer:password@server/udp/239.35.20.22:10000
    
    #EXTINF:-1,(07) RTLplus
    https://Benutzer:password@server/udp/239.35.20.57:10000
    
    #EXTINF:-1,(08) Pro7
    https://Benutzer:password@server/udp/239.35.20.21:10000
    
    #EXTINF:-1,(09) Kabel1
    https://Benutzer:password@server/udp/239.35.20.38:10000
    
    #EXTINF:-1,(10) Vox
    https://Benutzer:password@server/udp/239.35.20.11:10000
    
    #EXTINF:-1,(11) Super RTL
    https://Benutzer:password@server/udp/239.35.20.39:10000
    
    #EXTINF:-1,(12) ntv
    https://Benutzer:password@server/udp/239.35.20.47:10000
    
    #EXTINF:-1,(13) sixx
    https://Benutzer:password@server/udp/239.35.20.9:10000
    
    #EXTINF:-1,(14) Pro7maxx
    https://Benutzer:password@server/udp/239.35.20.33:10000
    
    #EXTINF:-1,(15) RTLNITRO
    https://Benutzer:password@server/udp/239.35.20.59:10000
    
    #EXTINF:-1,(16) Kunst
    https://Benutzer:password@server/udp/239.35.10.20:10000
    
    #EXTINF:-1,(17) Phönix
    https://Benutzer:password@server/udp/239.35.10.22:10000
    
    #EXTINF:-1,(18) 3sat
    https://Benutzer:password@server/udp/239.35.10.6:10000
    
    #EXTINF:-1,(19) Kikka
    https://Benutzer:password@server/udp/239.35.10.19:10000
    
    #EXTINF:-1,(20) tagesschau24
    https://Benutzer:password@server/udp/239.35.10.25:10000
    
    #EXTINF:-1,(21) Einsfestival
    https://Benutzer:password@server/udp/239.35.10.21:10000
    
    #EXTINF:-1,(22) EinsPlus
    https://Benutzer:password@server/udp/239.35.10.26:10000
    
    #EXTINF:-1,(23) ARD-alpha
    https://Benutzer:password@server/udp/239.35.10.24:10000
    
    #EXTINF:-1,(24) ZDF Kultur
    https://Benutzer:password@server/udp/239.35.10.23:10000
    
    #EXTINF:-1,(25) ZDF Infokanal
    https://Benutzer:password@server/udp/239.35.10.28:10000
    
    #EXTINF:-1,(26) ZDF neo
    https://Benutzer:password@server/udp/239.35.10.27:10000
    
    #EXTINF:-1,(27) Deutsche Welle
    https://Benutzer:password@server/udp/239.35.20.44:10000
    
    #EXTINF:-1,(28) BR Nord
    https://Benutzer:password@server/udp/239.35.10.13:10000
    
    #EXTINF:-1,(29) hr-Fernsehen
    https://Benutzer:password@server/udp/239.35.10.8:10000
    
    #EXTINF:-1,(30) MDR Sachsen
    https://Benutzer:password@server/udp/239.35.10.9:10000
    
    #EXTINF:-1,(31) NDR
    https://Benutzer:password@server/udp/239.35.10.10:10000
    
    #EXTINF:-1,(32) Radio Bremen TV
    https://Benutzer:password@server/udp/239.35.10.12:10000
    
    #EXTINF:-1,(33) rbb Berlin
    https://Benutzer:password@server/udp/239.35.10.14:10000
    
    #EXTINF:-1,(34) SR Fernsehen
    https://Benutzer:password@server/udp/239.35.10.15:10000
    
    #EXTINF:-1,(35) SWR Fernsehen BW
    https://Benutzer:password@server/udp/239.35.10.16:10000
    
    #EXTINF:-1,(36) WDR
    https://Benutzer:password@server/udp/239.35.10.18:10000
    
    #EXTINF:-1,(37) Das Erste HD
    https://Benutzer:password@server/udp/239.35.10.1:10000
    
    #EXTINF:-1,(38) ZDF HD
    https://Benutzer:password@server/udp/239.35.10.2:10000
    
    #EXTINF:-1,(39) ARTE HD
    https://Benutzer:password@server/udp/239.35.10.3:10000
    
    #EXTINF:-1,(40) Phoenix HD
    https://Benutzer:password@server/udp/239.35.10.48:10000
    
    #EXTINF:-1,(41) KiKA HD
    https://Benutzer:password@server/udp/239.35.10.11:10000
    
    #EXTINF:-1,(42) 3sat HD
    https://Benutzer:password@server/udp/239.35.10.47:10000
    
    #EXTINF:-1,(43) Tagesschau 24 HD
    https://Benutzer:password@server/udp/239.35.10.63:10000
    
    #EXTINF:-1,(44) Einsfestival HD
    https://Benutzer:password@server/udp/239.35.10.58:10000
    
    #EXTINF:-1,(45) EinsPlus HD
    https://Benutzer:password@server/udp/239.35.10.59:10000
    
    #EXTINF:-1,(46) ZDF Kultur HD
    https://Benutzer:password@server/udp/239.35.10.54:10000
    
    #EXTINF:-1,(47) ZDF neo HD
    https://Benutzer:password@server/udp/239.35.10.55:10000
    
    #EXTINF:-1,(48) ZDF Infokanal HD
    https://Benutzer:password@server/udp/239.35.10.56:10000
    
    #EXTINF:-1,(49) Bayern Süd HD
    https://Benutzer:password@server/udp/239.35.10.49:10000
    
    #EXTINF:-1,(50) HR HD
    https://Benutzer:password@server/udp/239.35.10.60:10000
    
    #EXTINF:-1,(51) MDR HD
    https://Benutzer:password@server/udp/239.35.10.61:10000
    
    #EXTINF:-1,(52) NDR HD
    https://Benutzer:password@server/udp/239.35.10.50:10000
    
    #EXTINF:-1,(53) RBB HD
    https://Benutzer:password@server/udp/239.35.10.62:10000
    
    #EXTINF:-1,(54) SWR BW HD
    https://Benutzer:password@server/udp/239.35.10.51:10000
    
    #EXTINF:-1,(55) WDR HD
    https://Benutzer:password@server/udp/239.35.10.53:10000
    
    #EXTINF:-1,(56) SR HD
    https://Benutzer:password@server/udp/239.35.10.64:10000
    
    #EXTINF:-1,(01) Das Erste
    https://Benutzer:password@server/udp/239.35.10.4:10000
    
    #EXTINF:-1,(02) ZDF
    https://Benutzer:password@server/udp/239.35.10.5:10000
    
    #EXTINF:-1,(03) Sa 1
    https://Benutzer:password@server/udp/239.35.20.20:10000
    
    #EXTINF:-1,(04) SAT1 Gold-
    https://Benutzer:password@server/udp/239.35.20.24:10000

     

  • WordPress autoupdater

    Wordpress autoupdater

    wp-cli installieren -> http://wp-cli.org/

    Verwenden Sie dieses Skript

    #!/bin / bash
    
    Updater(){
            wp Core Update --allow-root
            wp Core-Update-db --allow-root
            wp-Plugin Update --all --allow-root
            wp Thema Update --all --allow-root
            wp Kernsprache Update --allow-root
            CGroup = $(stat -c '% G' wp-cron.php)
            CUser = $(stat -c '% U' wp-cron.php)
            chown $ cUser:$cGroup ./* -rf
    }
    
    für i in $(find / var / www / vhosts -name wp-cron.php); machen
            wpdir = $(i echo $ | sed -r 's / wp-cron.php // g')
            echo $ wpdir
            cd $ wpdir
            Updater
    erledigt
  • Funksteckdosen via Raspberry Pi über das Terminal, Webinterface oder Siri steuern – 433 mHz

    Belegung

    rpi2-pins

    RaspberryPi Transmitter Receiver
    Pin 2 / 4 (5V) VCC VCC
    Pin 6 / 9 (GND) GND GND
    Pin 11 (GPIO17) – RPi Nr.1 ATAD
    Pin 13 (GPIO27) – RPi Nr.2 DATA (to the left of GND)

    Software

    Kommen wir nun zur Software. Hierzu müsst ihr erstmal euren Raspberry Pi starten, an dem alles wie oben beschrieben montiert wurde. Anschließen solltet ihr erst mal

    sudo apt-get update

    ausführen. Dadurch werden eure Paketquellen aktualisiert. Dann muss git-core installiert werden (falls nicht sowieso schon geschehen):

    sudo apt-get install git-core

    Um die Ansteuerung des Transmitters zu realisieren gibt es ein Projekt namensWiringPi. Dieses installiert ihr euch auf eurem Raspberry Pi wie folgt:

    cd
    git clone git://git.drogon.net/wiringPi
    cd wiringPi
    ./build

    Auch für unseren Zweck, die Steckdosen zu steuern gibt es bereits ein Projekt. Dieses stammt von xkonni und nennt sich Raspberry-Remote. Ihr installiert es euch so:

    cd
    git clone git://github.com/xkonni/raspberry-remote.git
    cd raspberry-remote

    Damit es läuft, müsst ihr euch noch die send.cpp kompilieren, also folgendes eintippen:

    make send
    make demon

    installieren eines sniffers

    cd
    git clone https://github.com/ninjablocks/433Utils.git
    cd 433Utils/RPi_utils
    make all
    

    Für die Pin Belegung

    gpio readall

    test des sniffers

    ./RFSniffer
    ./codesend 1234

    Webinterface

    Natürlich ist es etwas umständlich und unkomfortabel, das Ganze immer über das Terminal/eine SSH-Verbindung machen zu müssen. Aber kein Problem! Raspberry-Remote liefert auch gleich ein passendes Webinterface mit. Damit ihr das nutzen könnt, solltet ihr erst mal Apache und PHP installieren auf eurem Raspberry:

    sudo apt-get install apache2 php5
    

    Jetzt gehts zum Webinterface, was xkonni direkt mitliefert. Dazu habe ich im Ordner

    mkdir /var/www/html/remote

    einen Unterordner remote erstellt. Anschließend den Inhalt von ~/raspberry-remote/webinterface dorthin verschoben:

    cp -Rf ~/raspberry-remote/webinterface/* /var/www/html/remote

    Jetzt muss noch in der

    vi /var/www/html/remote/config.php

    Datei die IP Adresse des Raspberry Pis angepasst werden: dazu einfach nano verwenden.

    Deamon

    Nun fehlt noch der Daemon, auf den das PHP-Script des Webinterfaces zugreift. Dazu gehen wir in das Raspberry-Remote Verzeichnis zurück: cd ~/raspberryremote und kompilieren den daemon: make daemon
    Nun können wir diesen Starten:

    sudo ./daemon &

    Das & bewirkt, dass der Prozess im Hintergrund läuft.

    Jetzt können wir unser Glück mit dem Webinterface probieren: Dazu rufen wir von einem anderen Rechner/Handy das Webinterface per http://192.168.11.44/remote/ (Eure IP einsetzen) auf. Wenn das geht und dort die verschiedenen Steckdosen sichtbar sind, dann muss man jetzt nur noch in der config.php die Steckdosen mit Namen versehen und evtl. die Codes, etc. anpassen. Die Konfiguration sollte selbsterklärend sein.screenshot_webinterface

    Falls ihr eine Fehlermeldung wie „Switch out of range: GET /:XY“ bekommt, keine Sorge! In der daemon.cpp sind standardmäßig nur die Hauscodes 00000 & 00001 & 00010 abgedeckt. Das lässt sich aber einfach ändern. Geht dazu wieder ins Verzeichnis von Raspberry Remote (bei mir /home/pi/raspberry-remote/, also via

    cd /home/pi/raspberry-remote/

    und öffnet die daemon.cpp mit nano. Darin befindet sich der Eintrag „nPlugs=10;“, welche ihr einfach durch „nPlugs= 1110;“. Anschließend übersudo make daemon neu kompilieren und über sudo ./daemon & wieder starten. Jetzt sollte auch bei euch das Webinterface funktionieren.

     

    Quellen:

    Let Raspberry Pi’s communicate with each other per 433MHz wireless signals

    https://alexbloggt.com/funksteckdosen-raspberry-pi-teil1/

    https://alexbloggt.com/funksteckdosen-raspberry-pi-teil2/

     

    Des weiteren habe noch einige anderen tolle Projekte gefunden

    OK Google, Schalte Liste an -> https://blog.medienman.de/blog/2017/08/20/google-home-steuert-433-mhz-funksteckdosen/

  • Working Effectively With iTerm2

    Effektiv arbeiten mit iTerm2

    Fein-Tune-Einstellungen

    Starten Sie iTerm, öffnen iTerm > Voreinstellungen oder einfach

    cmd + ,

    Öffnen Sie den Tab / Bereich mit aktuellen Arbeitsverzeichnis

    Unter Profile Tab, gehe zu General Subreiter, Set Arbeitsverzeichnis nach "Wiederverwendung von früheren Sitzung des Verzeichnisses".

    Aktivieren Meta Schlüssel

    So aktivieren Sie Meta-Taste für Bash Readline- Bearbeitung z.B..

    Alt + b

    zur vorherigen Wort zu bewegen, unterProfile Tab, gehe zu Keys Subreiter, Set Linke Option-Taste funktioniert wie: nach "+ Esc".

    Hotkey iTerm2 umschalten

    Unter Keys Tab, im Hotkey Abschnitt, aktivieren "Anzeigen / ausblenden iTerm2 mit einer systemweiten Hotkey" und geben Sie Ihre Tastenkombination, z.B.. ich verwende

    Ctrl + Verschiebung + L

    Schalterfenster mit der Maus-Cursor

    Unter Zeiger, im Verschiedene Einstellungen Abschnitt, aktivieren "Focus folgt Maus".

    Handlicher Schnelltasten

    Hier ist eine Reihe von Shortcut-Tasten ich häufig verwenden. Sie können für andere Tastenkombinationen im iTerm Menü immer aussehen.

    Tab-Navigation

    • Neue Registerkarte öffnen
      cmd + t
    • nächste Registerkarte
      cmd + Verschiebung + ]
    • vorherige Registerkarte
      cmd + Verschiebung + [

    Pane Navigation

    • Split-Scheibe links-rechts
      cmd + d
    • Split-Scheibe von oben nach unten
      cmd + Verschiebung + d
    • nächste Scheibe
      cmd + ]
    • vorherige Scheibe
       cmd + [

    Suche

    • offene Suchleiste
      cmd + f
    • nächstes finden
      cmd + G

    Eingang für alle Scheiben

    • Eingang für alle in der aktuellen Registerkarte Scheiben
      cmd + Alt + ich

    Bildschirm löschen

    • klare Puffer
      cmd + k
    • klare Linien (Bash-Befehl)
      Ctrl + l

    Zooming / Schriftgröße ändern

    • Toggle-Fenster zu maximieren
       cmd + Alt + =
    • Umschalten Vollbild
      cmd + Eingeben
    • machen Schrift größer
      cmd + +
    • machen Schrift kleiner
      cmd + -

    iTerm Liebhaber, habe ich verpasst, etwas aus?

  • letsencrypt on apache and linux

    letsencrypt auf Apache und Linux

    dies ist ein kleiner Leitfaden, wie man Setup letsencrypt auf Apache und auf Linux

    Zuerst müssen wir ein letsencrypt Tool zum Download und die Beispielconfig in die richtige Position bewegen

    cd /opt
    git clone https://github.com/lukas2511/letsencrypt.sh
    mkdir -p /etc/letsencrypt.sh
    mkdir -p /var/www/letsencrypt.sh/
    chown www-data:www-data /var/www/letsencrypt.sh
    cp /opt/letsencrypt.sh/docs/examples/config /opt/letsencrypt.sh/config
    cp /opt/letsencrypt.sh/docs/examples/domains.txt /opt/letsencrypt.sh/domains.txt

    Konfigurieren Sie die letsencrypt Konfigurationsdatei

    /opt / letsencrypt.sh / config.sh

    BASEDIR ="/etc / letsencrypt.sh /"
    bekannte ="/var / www / letsencrypt.sh /"
    private_key ="${BASEDIR}/private_key.pem"
    HOOK ="${BASEDIR}/hook.sh"
    CONTACT_EMAIL ="[email protected]"

     

    theletsencrypt alias für Apache konfigurieren

    /etc / apache2 / conf.d / letsencrypt

    Alias /.well-known/acme-challenge /var/www/letsencrypt.sh/
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all

    die hook.sh Datei konfigurieren zum Nachladen des Apache

    /etc / letsencrypt.sh / hook.sh

    #!/bin/bash
    
    if [ ${1} == "deploy_cert" ]; then
    echo " + Haken: Ein Neustart Apache ..."
    /etc/init.d/apache2 reload
    else
    echo " + Haken: Nichts zu tun..."
    fi

    Ändern Sie den mod dieser Datei

    chmod + x /opt/letsencrypt.sh/hook.sh

    Konfigurieren Sie die Domain-Datei

    /opt / letsencrypt.sh / domains

    www.mosandl.eu
    storage.mosandl.eu
    

    laufen letsencrypt

    /opt / letsencrypt.sh / dehydriert -c

    erstellen crontjob, dass die certs jede Woche erzeugt werden

    1  1	* * *	root /opt/letsencrypt.sh/dehydrated -c

    vHost

    SSLEngine On
    SSLCertificateFile      /etc/letsencrypt.sh/certs/storage.mosandl.eu/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt.sh/certs/storage.mosandl.eu/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt.sh/certs/storage.mosandl.eu/chain.pem
    SSLCACertificateFile    /etc/letsencrypt.sh/certs/storage.mosandl.eu/fullchain.pem
    SSLHonorCipherOrder On
    SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

    Neufassungen

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/.well-known
    Alias /.well-known/acme-challenge /var/www/letsencrypt.sh/
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVERNAME}/$1 [R,L]

    Proxy-Pass

    Proxypass /.well-known !
    Alias ​​/.well-known/acme-challenge /var/www/letsencrypt.sh/

    Fehler

  • systemd – tutorial

    systemd – tutorial

    Das neue Init-Tool Systemd liegt schon mehreren Distributionen als Alternative zu Upstart oder dem angestaubten Sysvinit bei. Einige von Sysvinit- und Upstart-Distributionen gewohnte Kommandos und Tricks arbeiten durch Kompatibilitätsmaßnahmen auch unter Systemd. Um die Fähigkeiten von Systemd richtig zu nutzen, sollte der Administrator allerdings auch Werkzeuge und Parameter von Systemd kennen.

    Wichtigstes Tool zur Interaktion mit Systemd ist das Kommandozeilenprogramm systemctl. Für Änderungen an der Konfiguration oder den Neustart von Hintergrunddiensten erfordert es Root-Rechte; einige Diagnose-Aufrufe dürfen auch einfache Anwender ausführen. Wer das Programm ohne jegliche Parameter aufruft, erhält eine Liste der „Units“, die beim Systemstart anfallende Aufgaben erledigen. Dazu gehört neben dem Einbinden und Prüfen von Datenträgern auch das Starten von Hintergrunddiensten oder das Einrichten von Hardware.

    Bei einer Standardinstallation von Fedora 16 listet Systemctl rund hundertsechzig aktive Units in zehn verschiedenen Spielarten. Zu den wichtigsten zählen Service-Units. Sie kümmern sich um Hintergrunddienste, die eine Sysvinit-Distribution typischerweise über Init-Skripte startet. Mount- und Automount-Units binden Dateisysteme ein. Socket-Units legen Sockets an; sie starten indirekt über Abhängigkeiten einen andere Unit, sobald auf den Socket zugegriffen wird. (Eine detaillierte Erläuterung des Unit-Konzepts finden Sie im ersten Teil des Artikels.)

    Über einen Parameter kann man Systemctl anweisen, nur Units eines bestimmten Typs aufzulisten, etwa alle Service-Units:

    systemctl --type=service

    Systemctl leitet seine Ausgabe automatisch an less weiter; über die Pfeiltasten lässt sich nicht nur hoch- und runterscrollen, sondern auch nach rechts, denn dort verbergen sich manchmal weitere Informationen.

    Den Systemstart erledigt Systemd mit Units. Die gibt es in verschiedenen Spielarten, die Systemctl separat auflisten kann. VergrößernIn der ersten Spalte der Ausgabe findet sich der Unit-Name. Die zweite Spalte gibt an, ob Systemd die Unit-Definition laden konnte, die dritte, ob die Unit aktiv ist. Inaktive – installierte, aber nicht zum Start vorgesehene – Units gibt das Programm nur mit dem Schalter -a aus; dasselbe gilt für Units, die das Init-System etwa aufgrund eines Fehlers in der Unit-Datei nicht laden konnte.

    Spalte vier liefert den aktuellen Status. „exited“ zeigt an, dass sich der Prozess ohne Fehler beendet hat. Das ist zum Beispiel bei Diensten der Fall, die im Hintergrund weiterlaufen – etwa bei der Service-Unit, die aus Kompatibilitätsgründen die von Sysvinit bekannte Datei /etc/rc.local beim Systemstart ausführt. „running“ steht bei Diensten, die im Hintergrund laufen: cron, dbus, sshd, udev und andere.

    In der fünften Spalte folgt eine Beschreibung der Unit. Wenn sie mit „LSB“ oder „SYSV“ beginnt, hat Systemd die Unit automatisch erzeugt, um ein traditionelles Init-Skript abzuarbeiten.

    Bei Diensten, die nicht gestartet werden konnten oder später abgestürzt sind, steht in der vierten Spalte „failed“ – rot hervorgehoben, sofern die Konsole farbige Ausgabe beherrscht. Das status-Kommando von sytemctl gibt den Zeitpunkt des Abbruchs und den zurückgelieferten Fehlercode des Programms aus, beispielsweise

    systemctl status NetworkManager.service

    Das Status-Kommando von Systemctl liefert Abbruchzeit und Fehlercode abgestürzter Dienste. Bei einem frisch installierten Fedora 16 listet Systemctl um die 60 Service-Units auf. Darunter sind auch die Login-Prozesse für die Textkonsolen (agetty), denn anders als Sysvinit handhabt Systemd diese über Service-Units wie einen normalen Hintergrunddienst.

    Units …

    Die Konfigurationsdateien zum Erzeugen der Units, die Systemd mitbringt, liegen in /lib/systemd/system/; eine gleichnamige Datei in /etc/systemd/system/ hat jedoch Vorrang.

    Unit-Definition sind meist deutlich kürzer als die klassischen Sys-V-Init-Skripte. Eine Unit-Datei für den Dienst zur Netzwerkzeit-Synchronisierung via NTP ist nur wenige Zeilen lang:

    [Unit]
    Description=Network Time Service
    
    [Service]
    ExecStart=/usr/bin/ntpd -n -u ntp:ntp -g
    
    [Install]
    WantedBy=multi-user.target

    Alle Unit-Dateien enthalten einen durch [Unit] eingeleiteten Abschnitt mit allgemeinen Einstellungen, darunter eine kurze Beschreibung. Im Abschnitt [Service] folgen dienstspezifische Angaben; bei NTP ist das lediglich das Kommando, um den Dienst zu starten. Falls ein spezieller Befehl zum Beenden nötig ist, kann man diesen über eine ExecStop-Anweisung festlegen. Beim NTP-Daemon ist das unnötig, weil er sich in guter Unix-Tradition durch ein SIGTERM-Signal beenden lässt; das sendet Systemd zum Beenden, wenn kein anderer Befehl spezifiziert ist.

    Der Abschnitt [Install] enthält Anweisungen, die Systemd bei der (De-)Installation interpretiert; der Eintrag im NTP-Beispiel bedeutet, dass die Zeitsynchronisation beim Ansteuern des Targets „Multi-User“ aufgerufen werden soll.

    … und Targets

    Die Targets-Units bieten ein Konzept, das den Runlevels von Sysvinit ähnelt; aus Kompatibilitätsgründen versteht Systemd sogar die Runlevel-Namen zur Ansteuerung äquivalenter Targets. Wie gewohnt kann man daher bei Fedora 16 dem Kernel im Boot-Loader den Parameter single mitgeben; Systemd steuert daraufhin rescue.target an, das eine minimale, dem Single-User-Modus entsprechende Umgebung bietet.

    Auch 3 funktioniert, um den Multi-User-Modus ohne grafischen Anmeldemanager anzusteuern. Repräsentiert wird dieser Modus in Systemd durch die Target-Unit multi-user. Um multi-user.target zum Standard zu machen, reicht ein Links:

    ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

    Soll der grafische Anmeldemanager später doch wieder standardmäßig starten, kann man auf die gleiche Weise graphical.target zum Standardziel erheben; es ist das Äquivalent zum Runlevel 5 von Fedora und OpenSuse. Alternativ zu den alten Runlevel-Bezeichnungen kann man dem Kernel auch die Namen der zu startenden Target-Unit mitgeben:

    systemd.unit=multi-user.target

    Um im Betrieb eine andere Target-Unit anzusteuern, dient das isolate-Kommando von Systemctl:

    systemctl isolate rescue.target

    Der Wechsel in das Rescue-Target ist für Administrationsaufgaben interessant, denn dabei beendet Systemd alle User-Logins und Hintergrunddienste, sodass nur noch Systemdienste laufen – etwa jene zur Überwachung von Logical Volumes (lvm2-monitor). Manchmal müssen auch diese für Umbauten heruntergefahren werden, was mit dem Notfall-Modus emergency.target gelingt; hier laufen nur noch die Kernel-Threads.

    Verlangen

    Das show-Kommando von Systemctl liefert einige Interna zu den laufenden Units und den über sie ausgeführten Arbeiten. Mit ihm lässt sich auch ausgeben, welche Units Systemd beim Ansteuern des Multi-User-Targets aufruft:

    systemctl show -p Wants multi-user.target

    In der Ausgabe können sich andere Targets finden – beim multi-user.target etwa basic.target. Das wiederum hängt vom sysinit.target ab, das local-fs.targetvoraussetzt. Diese drei Targets kümmern sich um die Grundeinrichtung des Systems; dazu zählen das Einbinden der Dateisysteme und der Start von Udev. Zum Spezifizieren der Abhängigkeit vom Basic-Target enthält die Unit-Konfigurationsdatei multi-user.target folgende Angaben:

    Requires=basic.target
    After=basic.target

    Durch die After-Angabe erfährt Systemd, dass es das Target nicht nur aufrufen, sondern auch den seinen vollständigen Start abwarten muss. Neben Requires gibt es auch noch das schwächere Wants. Darüber angegebene Units ruft Systemd ebenfalls auf, setzt den Start aber auch fort, wenn eine von ihnen nicht startet.

    Diese Art der Abhängigkeit lässt sich auch über Links zu Unit-Dateien spezifizieren, die in einem Verzeichnis angelegt werden, dessen Name sich aus dem Namen der target-Unit und angehängtem .wants zusammensetzen, etwa

    .../systemd/system/multi-user.target.wants/

    Ausknipsen

    Wer die NTPD-Service-Unit deaktivieren will, damit die Systemzeit beim Booten nicht via NTP synchronisiert wird, kann das folgenden Befehl tun:

    systemctl disable ntpd.service

    Dabei macht Systemctl nichts anderes, als den Link auf die Service-Unit-Datei in den Wants-Verzeichnissen zu entfernen; beim Aktivieren eines Dienstes mit enableerstellt das Tool einen Link. Beides kann man auch manuell tun, um Units zu (de)aktiviern.

    Wird ein Dienst nicht von einer Unit, sondern über ein traditionelles Init-Skript gestartet, leitet Systemctl die Aufforderung zum Aktivieren an das Programm chkconfig weiter. Bei Fedora ist das etwa der Fall, wenn man Apache installiert und via Systemctl aktiviert.

    Das (De)Aktivieren eines Dienstes wirkt sich erst beim nächsten Start oder Beenden des Systems aus. Folgendes Kommando startet einen Dienst einmalig sofort:

    systemctl start ntpd.service

    Der Parameter stop beendet den Dienst. Mit dem Kommando status liefert Systemctl Information über die Unit, darunter ihren derzeitigen Zustand und den Namen der sie spezifizierenden Datei. Zudem gibt das Programm aus, ob und wie lange der Dienst bereits läuft und welche Prozesse zu ihm gehören; den Hauptprozess weist Systemctl dabei explizit aus.

    Über die Gruppenzugehörigkeit lässt sich erkennen, zu welchem Dienst ein Prozess gehört.
    Über die Zugehörigkeit zu den von Systemd angelegten Control Groups lässt sich recht einfach herausfinden, welche Prozesse von welchem Dienst gestartet wurden. Die von Systemd angelegte Cgroup-Hierarchie gibt der Befehl systemd-cgls aus; alternativ zeigt ps die Gruppenzugehörigkeit an:ps xaw -eo pid,args,cgroup

    Abgesoffen

    Falls beim Systemstart Probleme auftreten, an denen Systemd direkt oder indirekt beteiligt scheint, sollten Sie dem Kernel die folgenden Parameter im Boot-Loader mitgeben:

    systemd.log_target=kmsg systemd.log_level=debug

    Systemd schreibt dann ausführliche Informationen zur Fehlersuche auf die Konsole und in den Puffer der Kernel-Meldungen, den man später mit dmesg auslesen kann.

    Zu Systemd gehören die Kommandozeilenprogramme poweroff, halt und reboot; alternativ kann man das System über die gleichlautenden Systemctl-Kommandos herunterfahren oder neu starten. Einen Neustart erreicht man auch mit dem Kommando

    systemctl kexec


    Das Werkzeug „systemd-cgls“ kann die Control Groups und die ihnen zugeordneten Prozesse anzeigen.
    Nach dem Stoppen aller Dienste weist Systemd den laufenden Kernel an, einen zuvor konfigurierten Linux-Kernel direkt zu starten – ohne BIOS-Selbsttest und Boot-Loader. Ist kein Kexec-Kernel konfiguriert, erfolgt ein normaler Neustart.

    Ranholen

    Bei gängigen Administrationsaufgaben kommt man nur mit den Service- und Target-Units direkt in Kontakt; die anderen Units sind vor allem für spezielle Funktionen von Systemd wichtig oder erledigen beim Systemstart all jene Dinge, um die sich bei Sysvinit- und Upstart-Distributionen distributionsspezifische Skripte gekümmert haben. Dazu gehört etwa das Einbinden der in /etc/fstab spezifizierten Dateisysteme, das Aktivieren von Auslagerungsspeicher oder das gelegentliche Aufräumen des /tmp-Verzeichnisses.

    Für einige dieser Arbeiten bringt Systemd eine Automount-Funktion mit, die Pseudo-Einhängepunkte für in /etc/fstab konfigurierte Dateisysteme anlegen kann; tatsächlich eingebunden werden sie allerdings erst beim ersten Zugriff. Das Hinzufügen von „comment=systemd.automount“ in /etc/fstab verwandelt einen beliebigen Mount-Punkt in einen Automount-Punkt. Das kann den Startvorgang beschleunigen und ist beispielsweise für Netzwerkfreigaben nützlich, wenn die Netzverbindung über den NetworkManager erst beim Einloggen eines Users aufgebaut wird.

    Ursachenforschung

    Über Systemctl kann man Systemd zum Senden eines Signals auffordern, ohne die Prozess-ID des Dienstes zu kennen. Der folgende Befehl versetzt Rsyslogd in den Debug-Modus; dieser wird beendet, wenn man den Befehl ein zweites Mal aufruft:

    systemctl kill --signal=USR1 rsyslogd.service

    Wenn man die Angabe des zu sendenden Signals weglässt, schickt Systemctl ein normales Term-Signal, woraufhin sich alle Prozesse beenden sollten, die zu einem Dienst gehören.

    Systemd bringt ein Programm mit, um den Startvorgang zu visualisieren; die dunkelroten Bereiche weisen die Startphase von Diensten aus. Vergrößern
    Der Befehl systemd-analyze gibt aus, wie lange der Systemstart gedauert hat und wie viel Zeit davon auf Kosten von Kernel, Initramfs und die Einrichtung des Userlands durch Systemd entfallen. Der Befehl systemd-analyze blame gibt die Startzeiten der einzelnen Units aus. Zur genaueren Betrachtung des Boot-Prozesses kann das Programm eine SVG-Datei erzeugen, die den Start der Units visualisert:

    systemd-analyze plot > plot.svg

    Manchmal kommt man so Units auf die Spur, die den Systemstart stark in die Länge ziehen. Einige Hinweise zur korrekten Interpretation dieser Ergebnisse liefert der siebte Teil der Blog-Reihe „Systemd for Administrators“. Die bislang zwölf Teile umfassende Serie enthält auch noch viele andere Tipps und Hinweise für den Praxiseinsatz vom Systemd:

    1. Verifying Bootup
    2. Which Service Owns Which Processes?
    3. How Do I Convert A SysV Init Script Into A systemd Service File?
    4. Killing Services
    5. The Three Levels of „Off“
    6. Changing Roots
    7. The Blame Game
    8. The New Configuration Files
    9. On /etc/sysconfig and /etc/default
    10. Instantiated Services
    11. Converting inetd Services
    12. Securing Your Services

    Über die Homepage von Lennart Poettering finden sich zudem zahlreiche weitere Artikel mit Hintergründen zum Init-System. Im dritten „Systemd Status Update“ hat Poettering zudem vor Kurzem einige der Neuerungen aufgelistet, die in den letzten eineinhalb Jahren in Systemd eingeflossen sind.

     

    Quelle: http://www.heise.de/open/artikel/Das-Init-System-Systemd-Teil-2-1563461.html