[Linux Mint] mintUpdate.py Syntax Error

CiCero

gonna hate
Registriert
14 Juli 2013
Beiträge
267
Moin,

Ich nutze seit einiger Zeit Linux Mint und hatte vor ein paar Tagen mir mal ein bisschen Python angeschaut. Gestern Abend, merkte ich dann, dass in der Taskleiste das Symbol vom Updater fehlt.
Ich habe dann erstmal probiert den so aus dem Menü zu starten, da ist dann aber nichts passiert. Wenn man mintupdate-launcher startet, kommt diese Fehlermeldung:
[src=bash]➜ ~ mintupdate-launcher
File "/usr/lib/linuxmint/mintUpdate/mintUpdate.py", line 24
except Exception, detail:
^
SyntaxError: invalid syntax[/src]
Hier ist auch mal und ein Diff davon mit der von
[src=diff]--- /usr/lib/linuxmint/mintUpdate/mintUpdate.py
+++ /home/janis/Documents/Trash/untitled.py
@@ -66,7 +66,7 @@
(UPDATE_CHECKED, UPDATE_NAME, UPDATE_LEVEL_PIX, UPDATE_OLD_VERSION, UPDATE_NEW_VERSION, UPDATE_LEVEL_STR, UPDATE_SIZE, UPDATE_SIZE_STR, UPDATE_TYPE_PIX, UPDATE_TYPE, UPDATE_TOOLTIP, UPDATE_SORT_STR, UPDATE_OBJ) = range(13)

class PackageUpdate():
- def __init__(self, source_package_name, level, oldVersion, newVersion, extraInfo, warning, update_type, tooltip):
+ def __init__(self, source_package_name, level, oldVersion, newVersion, extraInfo, warning, update_type, origin, tooltip):
self.name = source_package_name
self.description = ""
self.short_description = ""
@@ -77,6 +77,7 @@
self.extraInfo = extraInfo
self.warning = warning
self.type = update_type
+ self.origin = origin
self.tooltip = tooltip
self.packages = []

@@ -87,11 +88,12 @@
self.size += size

class ChangelogRetriever(threading.Thread):
- def __init__(self, source_package, level, version, wTree):
+ def __init__(self, package_update, wTree):
threading.Thread.__init__(self)
- self.source_package = source_package
- self.level = level
- self.version = version
+ self.source_package = package_update.name
+ self.level = package_update.level
+ self.version = package_update.newVersion
+ self.origin = package_update.origin
self.wTree = wTree
# get the proxy settings from gsettings
self.ps = proxygsettings.get_proxy_settings()
@@ -106,19 +108,30 @@
self.wTree.get_widget("textview_changes").get_buffer().set_text(_("Downloading changelog..."))
gtk.gdk.threads_leave()

- changelog_sources = []
- if (self.source_package.startswith("lib")):
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/main/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/multiverse/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/universe/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/restricted/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
- else:
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/main/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/multiverse/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/universe/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/restricted/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
- changelog_sources.append("http://packages.linuxmint.com/dev/" + self.source_package + "_" + self.version + "_amd64.changes")
- changelog_sources.append("http://packages.linuxmint.com/dev/" + self.source_package + "_" + self.version + "_i386.changes")
+ changelog_sources = []
+ if self.origin == "linuxmint":
+ changelog_sources.append("http://packages.linuxmint.com/dev/" + self.source_package + "_" + self.version + "_amd64.changes")
+ changelog_sources.append("http://packages.linuxmint.com/dev/" + self.source_package + "_" + self.version + "_i386.changes")
+ elif self.origin == "ubuntu":
+ if (self.source_package.startswith("lib")):
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/main/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/multiverse/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/universe/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/restricted/%s/%s/%s_%s/changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ else:
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/main/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/multiverse/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/universe/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://changelogs.ubuntu.com/changelogs/pool/restricted/%s/%s/%s_%s/changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ elif self.origin == "debian":
+ if (self.source_package.startswith("lib")):
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/main/%s/%s/%s_%s_changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/contrib/%s/%s/%s_%s_changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/non-free/%s/%s/%s_%s_changelog" % (self.source_package[0:4], self.source_package, self.source_package, self.version))
+ else:
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/main/%s/%s/%s_%s_changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/contrib/%s/%s/%s_%s_changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))
+ changelog_sources.append("http://metadata.ftp-master.debian.org/changelogs/non-free/%s/%s/%s_%s_changelog" % (self.source_package[0], self.source_package, self.source_package, self.version))

changelog = _("No changelog available")

@@ -609,7 +622,7 @@
else:
for pkg in updates:
values = string.split(pkg, "###")
- if len(values) == 9:
+ if len(values) == 10:
status = values[0]
if (status == "ERROR"):
try:
@@ -642,8 +655,9 @@
size = int(values[4])
source_package = values[5]
update_type = values[6]
- short_description = values[7]
- description = values[8]
+ origin = values[7]
+ short_description = values[8]
+ description = values[9]

package_names.add(package.replace(":i386", "").replace(":amd64", ""))

@@ -717,7 +731,7 @@
level = int(level)

# Create a new Update
- update = PackageUpdate(source_package, level, oldVersion, newVersion, extraInfo, warning, update_type, tooltip)
+ update = PackageUpdate(source_package, level, oldVersion, newVersion, extraInfo, warning, update_type, origin, tooltip)
update.add_package(package, size, short_description, description)
package_updates[source_package] = update
else:
@@ -1793,7 +1807,7 @@
buffer.insert_with_tags_by_name(buffer.get_end_iter(), dimmed_description, "dimmed")
else:
# Changelog tab
- retriever = ChangelogRetriever(package_update.name, package_update.level, package_update.newVersion, wTree)
+ retriever = ChangelogRetriever(package_update, wTree)
retriever.start()

except Exception, detail:
@@ -1823,7 +1837,7 @@
buffer.insert_with_tags_by_name(buffer.get_end_iter(), dimmed_description, "dimmed")
else:
# Changelog tab
- retriever = ChangelogRetriever(package_update.name, package_update.level, package_update.newVersion, wTree)
+ retriever = ChangelogRetriever(package_update, wTree)
retriever.start()

def celldatafunction_checkbox(column, cell, model, iter):
@@ -2178,7 +2192,12 @@
viewSubmenu.append(descriptionsMenuItem)

viewSubmenu.append(historyMenuItem)
- viewSubmenu.append(kernelMenuItem)
+ try:
+ # Only support kernel selection in Linux Mint (not LMDE)
+ if (commands.getoutput("lsb_release -is").strip() == "LinuxMint" and float(commands.getoutput("lsb_release -rs").strip()) >= 13):
+ viewSubmenu.append(kernelMenuItem)
+ except Exception, detail:
+ print detail
viewSubmenu.append(infoMenuItem)

helpMenu = gtk.MenuItem(_("_Help"))
@@ -2228,4 +2247,4 @@
print detail
log.writelines("-- Exception occured in main thread: " + str(detail) + "\n")
log.flush()
- log.close()
+ log.close()
[/src]
Beim rumgooglen habe ich viele Leute gefunden, deren Updater auch nicht wollte. Da lag es aber fast immer am Aufruf von gtk.main() gegen Ende der Datei. Kann es bei mir auch da dran liegen?
 
Das Problem ist vermutlich die Shebang-Zeile.
Das Skript benötigt Python 2, wird aber derzeit vermutlich mit Python 3 ausgeführt.

Die shebang auf [kw]#!/usr/bin/env python2[/kw] zu ändern sollte das Problem vorerst lösen, aber es kann sein, dass das bei einem update wieder überschrieben wird.

Eigentlich sollte das auch gar nicht nötig sein, weil der Distributor wissen sollte welche Python Version bei ihm Standard ist, also entweder hat der da was verzapft oder du hast versehentlich die datei [kw]/usr/bin/python[/kw] verändert.
 
  • Thread Starter Thread Starter
  • #3
Also, ich habe gerade eben mal die shebang auf [kw]#!/usr/bin/env python2[/kw] geändert und das Programm startet nun auch, aberes gibt ein anderes Problem: Wenn ich Updater auf "Refresh" klicke, wird einmal das Fenster neu gerendert oder so, aber es passiert nichts. Etwas, das genau so aussah, hatte ich schon mal bei einer vorherigen Installation von Mint.

Die ausgabe dazu:
[src=bash]➜ ~ mintupdate-launcher

(mintUpdate.py:13027): libglade-WARNING **: unknown attribute `swapped' for <signal>.

(mintUpdate.py:13027): libglade-WARNING **: unknown attribute `swapped' for <signal>.

(mintUpdate.py:13027): libglade-WARNING **: unknown attribute `swapped' for <signal>.

(mintUpdate.py:13027): libglade-WARNING **: unknown attribute `swapped' for <signal>.
^CTraceback (most recent call last):
File "/usr/lib/linuxmint/mintUpdate/mintUpdate.py", line 2225, in <module>
gtk.main()[/src]

Also vermute ich eher, dass ich [kw]/usr/bin/python[/kw], bzw. [kw]/usr/bin/local/python[/kw] (das gibt [kw]type python[/kw] aus) geändert habe.
Als ich mir Python mal ein wenig angesehen habe, konnte ich [kw]sound[/kw] nicht importieren, mal python-dev und Abhängigkeiten installiert. Diese Pakete habe ich mittlerweile wieder entfernt, aber keine Ahnung ob da nicht was verändert wurde. Das heir sind die Pakete:
[src=bash]libpython-dev
libpython2.7-dev
python-dev
python2.7-dev[/src]

habe ich gerade eben ausprobiert, habe aber immer noch die libglade Warnungen und nicht mehr den Python Error beim Aufruf von gtk.main(), aber das Refreshen klappt immer noch nicht.
 
das python in [kw]/usr/bin/local/python[/kw] installiert ist, ist ungewöhnlich, hast du Python selbst kompiliert und systemweit installiert?

unabhängig davon, ist das ganze recht merkwürdig, die Warnungen sind denke ich vernachlässigbar btw.

ist das die aktuellste Version von mint?
 
  • Thread Starter Thread Starter
  • #5
Jap, ist Linux Mint Rebacca. Selbst kompiliert habe ich Python nicht. Was ich probiert habe, ist alle Pakete mit Python im Namen von Synaptic neu installieren zu lassen, hat aber auch nichts gebracht.
 
Hab mir grad mal mint installiert und mit das angesehen, dort ist python2 Standard.
Schau mal bitte nach ob [kw]/usr/bin/local/python[/kw] ein symlink ist. Sollte dem so sein, kannst du den höchstwahrscheinlich einfach löschen, es sei denn du hast den für irgendwas selbst angelegt, mich würde btw mal interessieren, worauf der genau zeigt.


Ich würde sonst mal versuchen mit [kw]aptitude update[/kw] und [kw]aptitude upgrade[/kw] manuell abzudaten und schauen obs dann weider geht.
 
  • Thread Starter Thread Starter
  • #7
War ein Symlink, habe aber vergessen zu schauen, wo der hinzeigt. Umbenannt zum Testen und dann direkt gelöscht.

Klappt zumindestens jetzt gerade, vielen Dank für die Hilfe ;) :beer:
 
Zurück
Oben