Ein Wiki privater Natur

compare_extensions.sh

Dieses Skript vergleicht die aktivierten GNOME-Erweiterungen oder installierten Debian-Pakete auf zwei Rechnern und stellt die Unterschiede in einer HTML-Seite dar.

compare-ext_1280x.png

Nutzung

./compare_extensions.sh [Option]

    -g: Vergleicht die aktivierten GNOME-Erweiterungen.
    -p: Vergleicht die installierten Debian-Pakete.

Wenn das Skript ohne Parameter ausgeführt wird, wird eine Anleitung angezeigt.

#!/bin/bash
# compare_extensions.sh
# $Revision: 1.5 $
# WebDAV Verzeichnis, in dem die Ergebnisse abgelegt werden
WEBDAV_DIR="/path/to/webdav/directory"
RESULT_FILE="$WEBDAV_DIR/extensions_comparison.html"

get_revision() {
    REVISION=$(grep -m 1 -oP 'Revision:\s*\K[^\s]+' "$0")
}
get_revision

# Funktion zur Generierung des GNOME-Erweiterungsvergleichs
function compare_gnome_extensions {
    # Sammele aktivierte GNOME-Shell-Extensions
    ENABLED_EXTS=$(gsettings get org.gnome.shell enabled-extensions | tr -d "[],\'")

    # Erstelle eine Datei mit aktivierten Extensions auf diesem Rechner
    HOSTNAME=$(hostname)
    HOST_FILE="$WEBDAV_DIR/${HOSTNAME}_enabled_extensions.txt"
    echo "$ENABLED_EXTS" | tr ' ' '\n' | sort | uniq > "$HOST_FILE"

    # Wenn beide Rechner ihre Ergebnisse hochgeladen haben, vergleichen
    if [[ $(ls "$WEBDAV_DIR"/*_enabled_extensions.txt | wc -l) -eq 2 ]]; then
        echo "Beide Rechnerergebnisse sind vorhanden, vergleiche GNOME-Erweiterungen..."

        FILES=($WEBDAV_DIR/*_enabled_extensions.txt)
        HOST1=$(basename "${FILES[0]}" _enabled_extensions.txt)
        HOST2=$(basename "${FILES[1]}" _enabled_extensions.txt)

        HOST1_EXTS=$(sort "${FILES[0]}" | uniq)
        HOST2_EXTS=$(sort "${FILES[1]}" | uniq)

        ALL_EXTS=$(echo -e "$HOST1_EXTS\n$HOST2_EXTS" | sort | uniq)

        generate_html_table "$HOST1" "$HOST2" "$ALL_EXTS" "$HOST1_EXTS" "$HOST2_EXTS"
    else
        echo "Warte auf das Ergebnis vom anderen Rechner für GNOME-Erweiterungen..."
    fi
}

# Funktion zur Generierung des Debian-Paketvergleichs
function compare_debian_packages {
    # Sammele installierte Debian-Pakete
    INSTALLED_PKGS=$(apt list --installed 2>/dev/null | awk -F/ '{print $1}' | sort | uniq)

    # Erstelle eine Datei mit installierten Paketen auf diesem Rechner
    HOSTNAME=$(hostname)
    HOST_FILE="$WEBDAV_DIR/${HOSTNAME}_installed_packages.txt"
    echo "$INSTALLED_PKGS" > "$HOST_FILE"

    # Wenn beide Rechner ihre Ergebnisse hochgeladen haben, vergleichen
    if [[ $(ls "$WEBDAV_DIR"/*_installed_packages.txt | wc -l) -eq 2 ]]; then
        echo "Beide Rechnerergebnisse sind vorhanden, vergleiche installierte Pakete..."

        FILES=($WEBDAV_DIR/*_installed_packages.txt)
        HOST1=$(basename "${FILES[0]}" _installed_packages.txt)
        HOST2=$(basename "${FILES[1]}" _installed_packages.txt)

        HOST1_PKGS=$(sort "${FILES[0]}" | uniq)
        HOST2_PKGS=$(sort "${FILES[1]}" | uniq)

        ALL_PKGS=$(echo -e "$HOST1_PKGS\n$HOST2_PKGS" | sort | uniq)

        generate_html_table "$HOST1" "$HOST2" "$ALL_PKGS" "$HOST1_PKGS" "$HOST2_PKGS"
    else
        echo "Warte auf das Ergebnis vom anderen Rechner für installierte Pakete..."
    fi
}

# Funktion zur Erstellung der HTML-Tabelle
function generate_html_table {
    local HOST1=$1
    local HOST2=$2
    local ALL_ITEMS=$3
    local HOST1_ITEMS=$4
    local HOST2_ITEMS=$5

    echo "<html><head><style>
    table {
      width: 90%;
      margin: 0 auto;
      border-collapse: separate;
      border-spacing: 5px;
    }
    th {
      background-color: #dedeee;
    }
    td {
      background-color: #ddd;
    }
    .green-bg {
      background-color: #a8d5a8;
    }
    </style></head><body>" > "$RESULT_FILE"

  case ${opt} in
    g ) 
      OPT="compare_gnome_extensions"
      ;;
    p ) 
      OPT="compare_debian_packages"
      ;;
  esac


    echo "<h1 style='text-align: center; color: blue;'>Vergleiche ${OPT}<small><small> 
    &nbsp;&nbsp;(mit compare_extensions.sh V:$REVISION)
    </small></small></h1>" >> "$RESULT_FILE"

    echo "<table border='1'><tr><th>Item</th><th>$HOST1</th><th>$HOST2</th></tr>" >> "$RESULT_FILE"

    for item in $ALL_ITEMS; do
        echo -n "<tr><td>$item</td>" >> "$RESULT_FILE"

        if grep -q "$item" <<< "$HOST1_ITEMS"; then
            echo -n "<td class='green-bg'>✅</td>" >> "$RESULT_FILE"
        else
            echo -n "<td></td>" >> "$RESULT_FILE"
        fi

        if grep -q "$item" <<< "$HOST2_ITEMS"; then
            echo -n "<td class='green-bg'>✅</td>" >> "$RESULT_FILE"
        else
            echo -n "<td></td>" >> "$RESULT_FILE"
        fi

        echo "</tr>" >> "$RESULT_FILE"
    done

    echo "</table></body></html>" >> "$RESULT_FILE"
    echo "Ergebnis unter $RESULT_FILE gespeichert."
}


# Argument Parsing für verschiedene Vergleiche
if [ "$#" -eq 0 ]; then
  echo "Nutzung: $0 [-g für GNOME Erweiterungen] [-p für Debian Pakete]"
  exit 1
fi
while getopts ":gp" opt; do
  case ${opt} in
    g ) 
      compare_gnome_extensions
      ;;
    p ) 
      compare_debian_packages
      ;;
    \? ) 
      echo "Nutzung: $0 [-g für GNOME Erweiterungen] [-p für Debian Pakete]"
      ;;
  esac
done