• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Grafische Oberfläche zum smart-Cache aufräumen (PyQt)

abgdf

Guru
[EDIT MODERATOR]Achtung: der downloadlink für das aktuelle Paket befindet sich in einem späteren Posting! Das spec-File wird immer aktualisiert. Ansonsten bitte den gesamten Thread lesen, das ist eine Art Workshop und es gibt wichtige Änderungen/Erweiterungen/Korrekturen in den folgenden Postings[/EDIT]

Hallo,

wie man alte rpm-Dateien in in einem Verzeichnis, insbesondere dem smart-cache, aufspürt und gegebenenfalls löscht, wurde bereits hier beschrieben:

http://www.linux-club.de/viewtopic.php?p=361797

Um das etwas komfortabler zu machen, habe ich zu dem Python-Skript "repomanage.py" eine einfache grafische Oberfläche in Qt (KDE) gebaut. Es handelt sich wiederum um ein Python-Programm "repo.py" (PyQt). Die Oberfläche wurde mit QtDesigner erstellt. Das Programm "repo.py" und die erforderlichen Zusatzdateien können mit

Code:
wget -c http://www.angelfire.com/linux/tux25/repo.zip

heruntergeladen werden (< 10 KB).

Damit es läuft, müssen die Pakete "kdebindings3-python....rpm" und "rpm-python....rpm" installiert sein.

In dem Programmfenster wird im oberen Bereich ein Verzeichnis-Feld angezeigt. Wenn man in das Feld klickt und dann Return drückt, wird das angezeigte Verzeichnis (mit dem Code von "repomanage.py" von Seth Vidal) nach alten rpm-Dateien durchsucht. Dies kann eine Weile dauern, so daß man dem Programm insoweit ein bißchen Zeit geben muß. Die gefundenen Dateien werden dann im Hauptfeld angezeigt. Mit einem Klick auf den Button unten rechts, werden alle diese Dateien gelöscht, allerdings ohne weitere Warnung.

Das kleine Programm, zu dessen Erstellung mich oc2pus angeregt hat, ist noch etwas roh.
Bitte sagt mir, was ihr davon haltet und ob und wie ihr euch eine Verbesserung vorstellen könntet.
Vielleicht könnten wir es hier wie in einem Workshop zu einer brauchbaren Anwendung weiterentwickeln.

Viele Grüße

abgdf

P.S.: Um sich an der Entwicklung zu beteiligen, benötigt man Kenntnisse in Python und PyQt. Daher poste ich noch ein paar Links dazu:

Zur Python-Programmierung im allgemeinen:

http://prdownload.berlios.de/abop-german/byteofpython_120.txt
http://diveintopython.org/

Zu PyQt und zur Benutzung des QtDesigners mit Python:

http://www.cs.usfca.edu/~afedosov/qttut/
http://vizzzion.org/?id=pyqt
QtDesigner-Benutzung allgemein: http://doc.trolltech.com/3.3/designer-manual-2.html
 
OP
A

abgdf

Guru
Hallo,

es gibt ein Programm-Update zu 0.2.

Neuerungen:

- Button "Suche rpms".
- Während längerer Vorgänge (z.B. rpm-Suche) verändert sich der Maus-Cursor wie bei anderen KDE-Anwendungen (Qt-Methode: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))).
- Verarbeitung des default-Verzeichnisses in eigener Funktion (sauberer).
Edit:
- Status-Feld zeigt jetzt auch (endlich) Such- und Löschstatus (Qt-Methode: repaint()).

Download wie zuvor:
Code:
wget -c http://www.angelfire.com/linux/tux25/repo.zip
Viele Grüße
 

oc2pus

Ultimate Guru
super !

... und damit daraus ein schönes RPM wird, hier das SPEC-File dazu:
Code:
# Copyright (c) 2006 linux-club.de
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments to www.linux-club.de

# norootforbuild

Name:			qrepoclean
Summary:		This programs cleans smart package cache directory
Version:		0.5
Release:		0.lc.2
License:		GPL
Group:			System/tools
URL:			http://www.linux-club.de/ftopic64467.html
Source:		http://www.angelfire.com/linux/tux25/QRepoClean.zip
BuildRoot:	%{_tmppath}/%{name}-%{version}-build
BuildArch:	noarch
%py_requires
Requires:		kdebindings3-python
Requires:		python
Requires:		rpm-python
Requires:		smart
BuildRequires: update-desktop-files
Packager:		linux-club

%description
This programs cleans smart package cache directory.

It uses as "engine" the script repomanage.py written by Seth Vidal,
for details see http://linux.duke.edu/projects/yum/download/misc/repomanage.py

%prep
%setup -q -n %{name}-%{version}
%__mv devel/readme devel/readme.gui

%install
%__install -dm 755 %{buildroot}%{_bindir}
%__cat > %{name}.sh << EOF
#!/bin/bash
python %{py_sitedir}/%{name}/%{name}.py
EOF
%__install -m 755 %{name}.sh %{buildroot}%{_bindir}

%__install -dm 755 %{buildroot}%{py_sitedir}/%{name}
%__install -m 644 *.py %{buildroot}%{py_sitedir}/%{name}

# icon
%__install -dm 755 %{buildroot}%{_datadir}/pixmaps
%__install -m 644 icon/%{name}.png %{buildroot}%{_datadir}/pixmaps

# menu-entry
%__install -dm 755 %{buildroot}%{_datadir}/applications
cat > %{name}.desktop << EOF
[Desktop Entry]
Type=Application
Comment=This programs cleans smart package cache directory
Terminal=false
Exec=%{name}.sh
Icon=%{name}.png
Name=QRepoClean
X-SuSE-translate=true
DocPath=
X-KDE-SubstituteUID=true
X-KDE-Username=root
EOF
%__install -m 644 %{name}.desktop \
	%{buildroot}%{_datadir}/applications/%{name}.desktop
%suse_update_desktop_file -i %{name} System PackageManager

%clean
[ -d %{buildroot} -a "%{buildroot}" != "" ] && rm -rf  %{buildroot}

%files
%defattr(-,root,root)
%doc readme.txt
%doc devel/*
%{_bindir}/*
%{py_sitedir}/*
%{_datadir}/pixmaps/%{name}.png
%{_datadir}/applications/%{name}.desktop

%changelog
* Sun Jul 23 2006 - linux-club.de 0.5-0.lc.2
- use internal icon
* Wed Jul 19 2006 - linux-club.de 0.5-0.lc.1
- upate to 0.5
- changed name to qrepoclean
* Tue Jul 18 2006 - linux-club.de 0.4-0.lc.1
- upate to 0.4
* Sun Jul 16 2006 - linux-club.de 0.2-0.lc.1
- initial release 0.2

Kurzanleitung:
1.) download des obigen spec-files nach /usr/src/packages/qrepoclean.spec
2.) download des QRepoClean.zip von abgdf und speichern nach /usr/src/packages/SOURCES
wget -c http://www.angelfire.com/linux/tux25/QRepoClean.zip
3.) cd /usr/src/packages
4.) rpmbuild -bb SPECS/qrepoclean.spec
5.) rpm -Uhv RPMS/noarch/qrepoclean*.rpm

Es sollte dann im KDE-Menu ein Eintrag zum starten des Programmes vorhanden sein in SYSTEM-Konfiguration-QRepoClean.

...damit kann der smart-cache aufgeräumt werden. Viel Spass damit!

EDIT: thx to swanema, Schritt 3.) korrigiert (btw, ihr könnt euch natürlich auch ein anderes Icon auswählen)
EDIT: thx to }-Tux-{: "...nutze RPM-Macros" :)
EDIT: thx to konqui: Programm muss als root laufen, geändert im desktop-file
 

swannema

Member
Vielen Dank,
Kleiner Hinweis, das smart.png muss man umbenennen in qrepomanager.png sonst gibt es eine Fehlermeldung.
 

oc2pus

Ultimate Guru
swannema schrieb:
Vielen Dank,
Kleiner Hinweis, das smart.png muss man umbenennen in qrepomanager.png sonst gibt es eine Fehlermeldung.
fixed ;)
thx

und bevor ich es vergesse:
abgdf schrieb:
...Das kleine Programm, zu dessen Erstellung mich oc2pus angeregt hat, ist noch etwas roh.
Bitte sagt mir, was ihr davon haltet und ob und wie ihr euch eine Verbesserung vorstellen könntet.
Vielleicht könnten wir es hier wie in einem Workshop zu einer brauchbaren Anwendung weiterentwickeln.....
ich werde diesen Thread in diese Richtung laufen lassen. Bitte keine Fragen zu smart selber hier posten, dafür gibt es ein anderes Forum. Hier nur Anregungen/Verbesserungen/Wünsche für das Programm posten.

Also "ran an den Speck" und alle python-Gurus sind aufgefordert hier mal "mitzuarbeiten" und Verbesserungen/Features etc einzubringen.....
 

konqui

Hacker
Hallo,
bei mir (SuSE-10.1) liegt der smart.png woanders:
Code:
locate smart.png
/usr/lib/python2.4/site-packages/smart/interfaces/images/smart.png
/usr/share/pixmaps/smart.png
Im KDE-Menü habe ich vor den *.sh EIntrag noch ein _kdesu_ gesetzt.
Es funtioniert auch für:
/var/cache/apt/archives
 

oc2pus

Ultimate Guru
konqui schrieb:
Im KDE-Menü habe ich vor den *.sh EIntrag noch ein _kdesu_ gesetzt.
Es funtioniert auch für: /var/cache/apt/archives

hehe, es funktioniert für ALLE Verzeichnisse wo RPMs drin stehen :)
aber Vorsicht: paket-1.2beta ist "neuer" als paket-1.2 !

das mit dem kdesu ist ein guter Hinweis!
aber das wird besser so im qrepomanager.desktop gelöst:
Code:
X-KDE-SubstituteUID=true
X-KDE-Username=root
 
OP
A

abgdf

Guru
Hallo,

ein Update:

- Nachfrage vor dem Löschen der Dateien :D.
- Mitzählen bei "Verzeichnis nicht gefunden", damit sich die Status-Anzeige ändert, wenn man ein weiteres Mal ein ungültiges Verzeichnis angegeben hat.

Vielen Dank für die Anleitung zum rpm-Erstellen.
Ich bin auch damit einverstanden, wenn ihr meine repo.zip-Datei herunterladet, z.B. ein rpm daraus baut und etwa unter "Linux-Club" auf einen Club-Server legt. Ist ja alles freie Software.
Wenn ich Veränderungen vornehme, lege ich diese bis auf weiteres weiterhin unter der oben genannten Adresse ab.

Viele Grüße

P.S.: Die Dokumentation der PyQt-Klassen befindet sich übrigens hier:
http://www.riverbankcomputing.com/Docs/PyQt4/html/classes.html
 
OP
A

abgdf

Guru
Hallo,

nochmal Neues:

Version 0.3:

- Es können Dateibereiche mit der Maus markiert werden. Wenn man das Mausziehen unterbricht und STRG drückt, kann man einen weiteren Bereich mit der Maus markieren. Bei Klick auf den Button links neben dem "Alles-Löschen-Button" werden (nur) die markierten Dateien auf Nachfrage gelöscht.
- Anzahl der betroffenen Dateien wird häufiger angezeigt.
- QListView-Widget statt QListBox-Widget.
(Alles zusammen war ziemlich schwierig.)
- Name anders ("QRepomanage").

Viele Grüße
 
OP
A

abgdf

Guru
Version 0.4:

- engine.py als Klasse ins Hauptskript integriert.
- QListViewItem-Objekte in Liste gespeichert (leichter zu handhaben).
- readme.txt aussagekräftiger.

Wollte eine Datei nach der anderen anzeigen lassen anstatt alle auf einmal am Ende, auch für Fortschrittsbalken; ging aber nicht; Suchskript braucht offenbar für Dateivergleiche so lange ...

- Auch im Python-Forum "annonciert":

http://www.python-forum.de/topic-6569.html

Viele Grüße
 

oc2pus

Ultimate Guru
sehr schön ;)

und an der script Hosting Front zeichnet sich auch etwas ab! Wird aber noch nicht verraten :mrgreen:

eine Bitte:
packe das zip mal so, das das Baisverzeichnis qrepomanage-%{version} ist, also zur Zeit qrepomanage-0.4, dann muss das SPEC-File nicht laufen angepasst werden ;)
 
OP
A

abgdf

Guru
Hallo,

packe das zip mal so, daß das Basisverzeichnis qrepomanage-%{version} ist, also zur Zeit qrepomanage-0.4.

Null Problemo :).

Und dann noch ein Update:

Hab doch noch einen Fortschrittsbalken (QProgressBar) hinbekommen 8). Macht echt was her :D !

Viele Grüße
 

oc2pus

Ultimate Guru
abgdf schrieb:
Hab doch noch einen Fortschrittsbalken (QProgressBar) hinbekommen 8). Macht echt was her :D !

stimmt :)
spec-file ist angepasst. Jetzt sollte beim nächsten Release, das ganze als tar.gz erscheinen UND das Archiv sollte so heissen wie das Paket ...

also wie nennen wir das "Baby" ?
und du als Autor solltest auch ein schönes Icon ausguggen ...

und da einige ja schon entdeckt haben, das man mit diesem Programm auch den apt-cache aufräumen kann, wäre eine mögliche extension eine Auswahlbox für den Paketmanager: Auswahl: apt/smart

das Kommando zum ermitteln des aktuellen apt-caches:
Code:
fgrep Cache /etc/apt/apt.conf.d/apt.conf
==> Cache "local/packages/cache/apt/" {

oder besser:
Code:
apt-config dump | grep "Dir::Cache "
==> Dir::Cache "local/packages/cache/apt/";

leider kann aber auch das passieren als "user" ...
apt-config dump | grep "Dir::Cache "
E: Öffne Konfigurationsdatei /etc/apt/apt.conf.d/apt.conf - ifstream::ifstream (13 Keine Berechtigung)
 
OP
A

abgdf

Guru
Hallo,

bzgl. "repo.zip" finde ich es im Moment ganz praktisch, wenn man die Datei immer von derselben Stelle herunterladen kann, so daß man sich nicht mit -0.4 oä. verhaspelt. Sonst müßte ich noch eine Webseite mit den verschiedenen Downloadlinks bauen. Später mal ...

also wie nennen wir das "Baby" ?

Ich meine, es sollte ausdrücken, was es tut und wie es aussieht, wie wär's also mit "KRepoClean" ?

Erinnert mich irgendwie an:
http://debiananwenderhandbuch.de/einfuehrung.html#pinguin
:lol:

Ansonsten bin ich dabei, wegen Verzeichniswahl apt/smart etc. eine ComboBox zu bauen. Die Status-Anzeige ist bald am unteren Ende, wo sie hingehört. Dann ist oben auch mehr Platz. Ich bin aber noch nicht fertig. Melde mich dann wieder.

Viele Grüße
 

oc2pus

Ultimate Guru
abgdf schrieb:
also wie nennen wir das "Baby" ?

Ich meine, es sollte ausdrücken, was es tut und wie es aussieht, wie wär's also mit "KRepoClean" ?
hm, ist ja kein KDE-Programm, eher ein QT-Proggi ... also QRepoClean :)

und du brauchst keine Versionsnummer im zip(tar.gz) Namen. Damit ist der download-link immer richtig (QRepoClean.zip wäre ok).
 
OP
A

abgdf

Guru
Hallo,

hier also das Update zu Version 0.5:

- Das was oben versprochen war, insb. apt-Support mit Auswahlmöglichkeit.
- GUI neu gestaltet; Fortschrittsanzeige in Statusbar.

Download dann also jetzt mit

Code:
wget -c http://www.angelfire.com/linux/tux25/QRepoClean.zip

Vielen Dank für die Unterstützung !
Ohne Lob hier und da wäre man viel weniger motiviert.

Viele Grüße
 

oc2pus

Ultimate Guru
so ich habe das SPEC-angepasst, sollte jetzt etwas stabiler sein, weil mehr Macros drin sind :)

das Paket nennt sich dann qrepoclean (in guter alter linux Tradition, alles klein) weil auch die Programmteile diesem Namen folgen.
Ein Icon könntest du noch in das zip reinpacken.

ansonsten habe ich es grade mal ausprobiert, es erkennt sauber die apt und smart-caches auf meinen verschiedenen PCs und Laptops und schlägt den jeweils korrekten Namen vor, sogar via NFS kann ich nun Verzeichnisse checken. Das selektieren der zu löschenden Dateien funktioniert auch sehr gut. Super!

Was etwas stört, das nach einem selektiven Löschen ein erneutes suchen getriggert werden muss, aber damit kann ich leben :)

Alles in allem eine prima GUI

wenn noch jemand einen Befehl liefert wie man den YaST- und yum-cache bestimmt wären alle Paketmanager bedient.
 
OP
A

abgdf

Guru
Danke !

Was etwas stört, das nach einem selektiven Löschen ein erneutes suchen getriggert werden muss

Der Grund ist, um die gelöschten Dateien aus der Listenansicht zu nehmen, habe ich takeItem() verwendet, da del(Item) irgendwie nicht ging. Zu takeItem():

http://doc.trolltech.com/3.3/qlistviewitem.html#takeItem

Warning: This function leaves item and its children in a state where most member functions are unsafe.

Deshalb ist es besser, die Listenansicht neu aufzubauen.

Ein Problem noch: Ich habe "Bytes / 1000" geteilt, um auf KB zu kommen. Hätte es "/ 1024" sein müssen ? Ist ja schnell geändert :).

Bzgl. Icon schau ich mal und pack es mit rein, sobald ich ein gutes finde. Das ist aber nicht so ganz leicht mit meiner langsamen Modem-Verbindung ...

Ansonsten freut es mich, daß die Verzeichniserkennung mit den externen Befehlen gut klappt. Müßte man aber anpassen, wenn die Ausgabe der Befehle mal geändert wird. Kann man ja nicht vorhersehen.

Viele Grüße
 
OP
A

abgdf

Guru
Update:

- Verhalten von "Markierte Dateien löschen" überdacht - Kein "Nachscannen" mehr nötig.

Edit: Jetzt doch 1024 Bytes/KB:

http://en.wikipedia.org/wiki/Kilobyte

The overwhelming popularity of the 1024 definition means that anyone using "kilobyte" to mean 1000 in these situations (Eigene Anm.: memory capacity) is likely to cause confusion.

Viele Grüße
 
Oben