Debian aufräumen - rc-Pakete mühelos mit meinem Python-Skript entfernen

Wenn Ihr Debian als Euer Betriebssystem verwendet, habt Ihr bestimmt schon einmal mit dem Befehl dpkg gearbeitet, um Pakete zu verwalten. Bei Debian, Ubuntu, etc. kommt es oft vor, dass Pakete mit dem Status „rc“ (removed and configuration files) auf Eurem System verbleiben und Platz beanspruchen. Das manuelle Entfernen dieser Pakete kann jedoch zeitaufwändig sein. In diesem Blog-Artikel stelle ich Euch ein von mir entwickeltes Python-Skript vor, das diesen Prozess automatisiert und vereinfacht.

Hintergrund

Wenn Ihr in Debian oder Ubuntu Pakete deinstalliert, bleiben in der Regel noch Paketbestandteile und Konfigurationsdateien zurück. Dass Reste vorhanden sind erkennt man am Paketstatus „rc“. Um solche Pakete zu identifizieren und zu entfernen, wird normalerweise der Befehl

dpkg -l | grep ^rc | awk {'print $2'} | xargs dpkg -P 

verwendet. Dieser Befehl filtert alle Pakete mit dem Status „rc“ aus der Liste der installierten Pakete und entfernt sie dann vollständig.

Das Python Skript

Mein Python-Skript vereinfacht diesen Vorgang und bietet einige zusätzliche Funktionen. Hier sind die Kernfunktionen des Skripts:

  1. Liste Pakete mit dem Status „rc“ auf
    Durch den Aufruf des Skripts ohne Argumente oder mit dem Argument -l könnt Ihr eine Liste der Pakete mit dem Status „rc“ anzeigen lassen:
    ./purgerc -l
    Ihr seht nun alle relevanten Pakete, die das Skript bereinigen kann.
  2. Entferne Pakete mit dem Status „rc“
    Durch den Aufruf des Skripts mit dem Argument -f werden alle Pakete mit dem Status „rc“ entfernt:
    ./purgerc -f
    Das Skript führt automatisch den Befehl
    dpkg -l | grep ^rc | awk {'print $2'} | xargs dpkg -P
    aus und entfernt die entsprechenden Pakete.
  3. Übersicht über entfernte Pakete
    Nach dem Entfernen gibt das Skript eine Übersicht über die entfernten Pakete aus:
    Packages removed successfully:
    package1
    package2
    ...
  4. Hilfemeldungen
    Durch den Aufruf des Skripts mit dem Argument -h oder -? erhaltet Ihr eine Hilfemeldung:
    ./purgerc -h

Verwendung und Sicherheit

Die Verwendung des Skripts erfolgt selbstverständlich auf eigene Gefahr!

Das Skript wurde unter Debian 12 entwickelt und setzt Python 3.7 voraus.

Um das Skript auszuführen, müsst Ihr sicherstellen, dass Ihr die erforderlichen Berechtigungen habt, Pakete zu entfernen. Dies wird normalerweise durch die Verwendung von sudo erreicht. Damit es von jedem beliebigen Verzeichnis aus aufgerufen werden kann, sollte es eventuell im Verzeichnis /usr/local/bin abgelegt werden.

Bitte beachtet, dass die Verwendung von shell=True bestimmte Sicherheitsrisiken mit sich bringen kann. In diesem Fall, da die Eingabe vom Benutzer nicht direkt in den Befehl eingefügt wird, sollte es jedoch in Ordnung sein. Wenn Ihr Euch dennoch Sorgen macht, könnt Ihr alternative Methoden wie die Verwendung von subprocess.Popen oder die Aufteilung des Befehls in separate Aufrufe in Betracht ziehen.

Mit diesem Python-Skript wird die Bereinigung von Debian-Paketen mit dem Status „rc“ einfacher und benutzerfreundlicher. Es bietet Euch eine klar strukturierte Möglichkeit, Pakete anzuzeigen, zu entfernen und eine Zusammenfassung der durchgeführten Aktionen zu erhalten. Verabschiedet Euch von komplexen Befehlen und automatisiert diesen Vorgang mit diesem nützlichen Skript

Das Skript „purgerc“

#!/usr/bin/env python3
import subprocess
import sys

def list_rc_packages():
    try:
        # Run dpkg command to list packages with status "rc"
        result = subprocess.run(['dpkg', '-l'], capture_output=True, text=True, check=True)
        lines = result.stdout.split('\n')
        rc_packages = [line.split()[1] for line in lines if line.startswith('rc')]
        
        if rc_packages:
            print("These packages can be purged:")
            print('\n'.join(rc_packages))
        else:
            print("No packages available to be purged.")
    except subprocess.CalledProcessError as e:
        print(f"Error: {e}")
        sys.exit(1)

def remove_rc_packages():
    try:
        # Run dpkg command to list packages with status "rc" and remove them
        result = subprocess.run('dpkg -l | grep "^rc" | awk \'{print $2}\' | xargs dpkg -P', capture_output=True, text=True, shell=True, check=False)
        if result.returncode == 0:
            removed_packages = result.stdout.strip().split('\n')
            print("Packages removed successfully:")
            print('\n'.join(removed_packages))
        else:
            print("No packages available to be purged.")
    except subprocess.CalledProcessError as e:
        print(f"Error: {e}")
        sys.exit(1)

def print_usage():
    print("Usage:")
    print("  purgerc             : List packages with status 'rc'")
    print("  purgerc -l          : List packages with status 'rc'")
    print("  purgerc -f          : Purge packages with status 'rc'")
    print("  purgerc -h or -?    : Show this usage message")

def main():
    if len(sys.argv) == 1:
        list_rc_packages()
    elif len(sys.argv) == 2:
        if sys.argv[1] == '-l':
            list_rc_packages()
        elif sys.argv[1] == '-f':
            remove_rc_packages()
        elif sys.argv[1] in ['-h', '-?']:
            print_usage()
        else:
            print("Invalid argument. Use -h or -? for usage.")
            sys.exit(1)
    else:
        print("Invalid number of arguments. Use -h or -? for usage.")
        sys.exit(1)

if __name__ == "__main__":
    main()

DHL Paketkasten – Stromversorgung auf Solarstrom umrüsten

In meinem Artikel DHL Paketkasten – Stromversorgung umrüsten habe ich beschrieben, wie ich unseren Paketkasten umgerüstet habe. Das Ziel war, von den teuren, kurzlebigen Lithium-Batterien auf vermeintlich langlebige und günstige Blockbatterien umzurüsten. Blockbatterien kommen oft im Baugewerbe zum Einsatz und halten normalerweise auch bei niedrigen Temperaturen sehr lange.

Leider war das Ergebnis im Zusammenhang mit dem Paketkasten sehr ernüchternd. Die Batterie hielt auch nicht wesentlich länger als ein Satz Lithium Batterien. Natürlich sind die Blockbatterien etwas günstiger, allerdings bleibt ja immer noch das Öffnen des Paketkastens zum Austausch der Batterien und es ist überaus lästig, wenn die Batterie genau dann aufgibt, wenn der Zusteller versucht, den Paketkasten zu öffnen…

Nachdem ich von einem Freund ein 12 V Solarpanel mit einer Leistung von 10 w geschenkt bekommen hatte, entschied ich mich, dem ganzen Spuk nun mit Sonnenenergie ein Ende zu bereiten. Was ich noch kaufen musste war ein 6V Akku und ein Laderegler. Für diese beiden Teile musste ich ca. 25 EUR investieren.

Das Solarpanel montierte ich auf meinem Carport, führte ein Kabel in den oberen Bereich des Paketkastens und schloss den Laderegler, den Akku und den Paketkasten an. Seit über drei Monaten läuft das ganze nun schon und laut Paketkasten-App ist der Akku immer bei knapp 100% Ladung.

Bilder folgen in Kürze.