Paket mit Umlaut-Dateinamen lässt sich nicht aktualisieren

Antworten
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Paket mit Umlaut-Dateinamen lässt sich nicht aktualisieren

Beitrag von holgerv »

Hallo,

wir haben ein opsi-Paket, das Dateien mit Umlauten im Dateinamen beinhaltet. Das opsi-Paket ließ sich auch problemlos installieren (opsi-package-manager -i). Beim erneuten installieren (opsi-package-manager -i) kommt aber der Fehler: "Backend error: Failed to install package '/home/opsiproducts/umlaut-test/umlaut-test_1.0-1.opsi' on depot 'testdepot.domain.de': 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) (error on server)"

Der Fehler lässt sich reproduzieren:

Code: Alles auswählen

/home/opsiproducts $ opsi-newprod 

/home/opsiproducts $ cd umlaut/

/home/opsiproducts/umlaut $ touch CLIENT_DATA/setup.ins

/home/opsiproducts/umlaut $ touch CLIENT_DATA/umlaut-ä.txt

/home/opsiproducts/umlaut $ opsi-makeproductfile 

Sperre Paket

Paket-Informationen
----------------------------------------------------------------------------
   version              : 1
   custom package name  : 
   incremental package  : False
   package dependencies : 

Produkt-Informationen
----------------------------------------------------------------------------
   product id           : umlaut
   product type         : localboot
   version              : 1.0
   name                 : umlaut
   description          : 
   advice               : 
   priority             : 0
   licenseRequired      : False
   product classes      : 
   windows software ids : 

Produkt-Skripte
----------------------------------------------------------------------------
   setup                : setup.ins
   uninstall            : 
   update               : 
   always               : 
   once                 : 
   custom               : 
   user login           : 

Erzeuge Paket-Datei '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi'

Creating archive CLIENT_DATA.cpio.gz
  100.00% [==================================================]
Creating archive OPSI.cpio.gz
  100.00% [==================================================]
Creating archive umlaut_1.0-1.opsi
  100.00% [==================================================]

Räume auf
Hebe Paket-Sperre auf


/home/opsiproducts/umlaut $ opsi-package-manager -i -vv umlaut_1.0-1.opsi 
[6] [Aug 22 15:51:21] * BackendManager is creating BackendDispatcher (BackendManager.py|195)
[6] [Aug 22 15:51:21] Backend context was set to <OPSI.Backend.BackendManager.BackendManager instance at 0x24c6248> (Backend.py|172)
[6] [Aug 22 15:51:21] Loading dispatch config file '/etc/opsi/backendManager/dispatch.conf' (BackendManager.py|288)
[6] [Aug 22 15:51:21] Loading backend config '/etc/opsi/backends/mysql.conf' (BackendManager.py|329)
[6] [Aug 22 15:51:21] Backend context was set to <OPSI.Backend.BackendManager.BackendDispatcher instance at 0x24c62d8> (Backend.py|172)
[6] [Aug 22 15:51:21] Creating ConnectionPool instance (MySQL.py|68)
[6] [Aug 22 15:51:21] Verifying modules file signature (MySQL.py|400)
[5] [Aug 22 15:51:21] Modules file signature verified (customer: Testkunde) (MySQL.py|422)
[6] [Aug 22 15:51:21] Loading backend config '/etc/opsi/backends/opsipxeconfd.conf' (BackendManager.py|329)
[6] [Aug 22 15:51:21] Backend context was set to <OPSI.Backend.BackendManager.BackendDispatcher instance at 0x24c62d8> (Backend.py|172)
[6] [Aug 22 15:51:21] * BackendManager is creating ExtendedConfigDataBackend (BackendManager.py|206)
[6] [Aug 22 15:51:21] Setting context to backend <OPSI.Backend.Backend.ExtendedConfigDataBackend instance at 0x24c6290> (Backend.py|395)
[6] [Aug 22 15:51:21] Getting hosts, filter: {'type': 'OpsiDepotserver'} (SQL.py|940)

/home/opsiproducts/umlaut $ opsi-package-manager -i -vv umlaut_1.0-1.opsi 
[6] [Aug 22 15:51:27] * BackendManager is creating BackendDispatcher (BackendManager.py|195)
[6] [Aug 22 15:51:27] Backend context was set to <OPSI.Backend.BackendManager.BackendManager instance at 0x31f8248> (Backend.py|172)
[6] [Aug 22 15:51:27] Loading dispatch config file '/etc/opsi/backendManager/dispatch.conf' (BackendManager.py|288)
[6] [Aug 22 15:51:27] Loading backend config '/etc/opsi/backends/mysql.conf' (BackendManager.py|329)
[6] [Aug 22 15:51:27] Backend context was set to <OPSI.Backend.BackendManager.BackendDispatcher instance at 0x31f82d8> (Backend.py|172)
[6] [Aug 22 15:51:27] Creating ConnectionPool instance (MySQL.py|68)
[6] [Aug 22 15:51:27] Verifying modules file signature (MySQL.py|400)
[5] [Aug 22 15:51:27] Modules file signature verified (customer: Testkunde) (MySQL.py|422)
[6] [Aug 22 15:51:27] Loading backend config '/etc/opsi/backends/opsipxeconfd.conf' (BackendManager.py|329)
[6] [Aug 22 15:51:27] Backend context was set to <OPSI.Backend.BackendManager.BackendDispatcher instance at 0x31f82d8> (Backend.py|172)
[6] [Aug 22 15:51:27] * BackendManager is creating ExtendedConfigDataBackend (BackendManager.py|206)
[6] [Aug 22 15:51:27] Setting context to backend <OPSI.Backend.Backend.ExtendedConfigDataBackend instance at 0x31f8290> (Backend.py|395)
[6] [Aug 22 15:51:27] Getting hosts, filter: {'type': 'OpsiDepotserver'} (SQL.py|940)
Es sind Fehler aufgetreten: 
   Fehler beim Bearbeiten von Install of package(s) /home/opsiproducts/umlaut/umlaut_1.0-1.opsi on depot 'testdepot.domain.de':
      Backend error: Failed to install package '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' on depot 'testdepot.domain.de': 'ascii' codec can't decode byte 0xc3 in position 8: ordinal not in range(128) (error on server)


/home/opsiproducts/umlaut $ cat /var/log/opsi/package.log
[...]
[5] [Aug 22 15:51:22] ================================================================================================= (Depotserver.py|147)
[5] [Aug 22 15:51:22] Installing package file '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' on depot 'testdepot.domain.de' (Depotserver.py|148)
[5] [Aug 22 15:51:22] Getting meta data from package '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' (Product.py|196)
[5] [Aug 22 15:51:22] Creating product in backend (Depotserver.py|183)
[5] [Aug 22 15:51:22] Locking product 'umlaut' on depot 'testdepot.domain.de' (Depotserver.py|186)
[5] [Aug 22 15:51:22] Checking package dependencies (Depotserver.py|204)
[5] [Aug 22 15:51:22] Running preinst script (Depotserver.py|207)
[5] [Aug 22 15:51:22] Running package script 'preinst' (Product.py|393)
[5] [Aug 22 15:51:22] Unpacking package files (Depotserver.py|211)
[5] [Aug 22 15:51:22] Extracting data from package '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' (Product.py|242)
[5] [Aug 22 15:51:22] Setting product property states in backend (Depotserver.py|293)
[5] [Aug 22 15:51:22] Running postinst script (Depotserver.py|311)
[5] [Aug 22 15:51:22] Running package script 'postinst' (Product.py|393)
[5] [Aug 22 15:51:22] Creating package content file (Product.py|364)
[3] [Aug 22 15:51:22] Bad filename 'umlaut-��.txt' found in directory '/var/lib/opsi/depot/umlaut', skipping entry! (__init__.py|630)
[5] [Aug 22 15:51:22] Setting access rights of client-data files (Product.py|317)
[5] [Aug 22 15:51:22] Unlocking product 'umlaut_1.0-1' on depot 'testdepot.domain.de' (Depotserver.py|320)
[5] [Aug 22 15:51:28] ================================================================================================= (Depotserver.py|147)
[5] [Aug 22 15:51:28] Installing package file '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' on depot 'testdepot.domain.de' (Depotserver.py|148)
[5] [Aug 22 15:51:28] Getting meta data from package '/home/opsiproducts/umlaut/umlaut_1.0-1.opsi' (Product.py|196)
[5] [Aug 22 15:51:28] Creating product in backend (Depotserver.py|183)
[5] [Aug 22 15:51:28] Locking product 'umlaut' on depot 'testdepot.domain.de' (Depotserver.py|186)
[5] [Aug 22 15:51:28] Checking package dependencies (Depotserver.py|204)
[5] [Aug 22 15:51:28] Running preinst script (Depotserver.py|207)
[5] [Aug 22 15:51:28] Running package script 'preinst' (Product.py|393)
[5] [Aug 22 15:51:28] Unpacking package files (Depotserver.py|211)
[2] [Aug 22 15:51:28] Traceback: (Logger.py|742)
[2] [Aug 22 15:51:28]      line 216 in 'installPackage' in file '/usr/lib/python2.6/site-packages/OPSI/Backend/Depotserver.py' (Logger.py|742)
[2] [Aug 22 15:51:28]      line 122 in 'deleteProductClientDataDir' in file '/usr/lib/python2.6/site-packages/OPSI/Util/Product.py' (Logger.py|742)
[2] [Aug 22 15:51:28]      line 206 in 'rmtree' in file '/usr/lib64/python2.6/shutil.py' (Logger.py|742)
[2] [Aug 22 15:51:28]      line 70 in 'join' in file '/usr/lib64/python2.6/posixpath.py' (Logger.py|742)
[2] [Aug 22 15:51:28]      ==>>> 'ascii' codec can't decode byte 0xc3 in position 8: ordinal not in range(128) (Depotserver.py|398)

/home/opsiproducts $ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)

/home/opsiproducts $ uname -r
2.6.32-279.11.1.el6.x86_64

/home/opsiproducts $ rpm -q opsiconfd
opsiconfd-4.0.2.4-1.1.noarch

/home/opsiproducts $ echo $LC_ALL
de_DE.utf8
Wir können uns erstmal damit behelfen, vor einem Update die problematischen Dateien manuell aus dem Depot zu löschen (im Beispiel: "rm /var/lib/opsi/depot/umlaut/umlaut-ä.txt"), aber das umgeht nur das Problem, anstatt es zu lösen.

Hat jemand von euch 'ne Idee, was wir tun können?

Danke!


Holger
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: Paket mit Umlaut-Dateinamen lässt sich nicht aktualisier

Beitrag von n.wenselowski »

Hallo holgerv,

ich habe soeben versucht das Problem mit einem Redhat 6.4 und aktuellem OPSI nachzuvollziehen, aber war dabei leider nicht erfolgreich.
Können Sie uns ihr Testprodukt per Mail an info@uib.de zukommen lassen?
Wie sieht Ihre dispatch.conf aus?


Mit freundlichen Grüßen

N. Wenselowski

Code: Alles auswählen

import OPSI
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: Paket mit Umlaut-Dateinamen lässt sich nicht aktualisier

Beitrag von holgerv »

Hallo n.wenselowski,
Können Sie uns ihr Testprodukt per Mail an info@uib.de zukommen lassen?
Habe ich gerade gemacht.
Wie sieht Ihre dispatch.conf aus?

Code: Alles auswählen

~ $ grep -v "^#" /etc/opsi/backendManager/dispatch.conf

backend_.*         : mysql, opsipxeconfd
host_.*            : mysql, opsipxeconfd
productOnClient_.* : mysql, opsipxeconfd
configState_.*     : mysql, opsipxeconfd
.*                 : mysql
Ich vermute ein Problem mit den locales, denn je nach Umgebungsvariable LC_CTYPE (bzw. LC_ALL) sehe ich Umlaut-Dateinamen richtig oder nicht:

Code: Alles auswählen

/tmp $ LC_CTYPE=C touch umlaut-1-ä.txt

/tmp $ LC_CTYPE=de_DE.utf8 touch umlaut-2-ä.txt

/tmp $ LC_CTYPE=C ls umlaut-*.txt
0 umlaut-1-??.txt
0 umlaut-2-??.txt

/tmp $ LC_CTYPE=de_DE.utf8 ls umlaut-*.txt
0 umlaut-1-ä.txt
0 umlaut-2-ä.txt

/tmp $ LC_CTYPE=en_US.utf8 ls umlaut-*.txt
0 umlaut-1-ä.txt
0 umlaut-2-ä.txt
Bei "opsi-package-manager -i" wird wohl der opsiconfd aufgerufen, der ja nicht mit dem Account des lokal angemeldeten Users läuft, sondern mit einem eigenen Account. Für diesen Account ist LC_ALL bzw. LC_CTYPE nicht gesetzt, und daher sieht er die Umlaute falsch. Wo also setzt ich die locales passend? Oder bin ich mit diesem Ansatz auf dem Holzweg?

Schönen Gruß!


Holger
seteqsystems
Beiträge: 62
Registriert: 12 Sep 2012, 11:51
Wohnort: Hall in Tirol

Re: Paket mit Umlaut-Dateinamen lässt sich nicht aktualisier

Beitrag von seteqsystems »

Hi,

Ich hatte ähnliche Probleme mit einem Autodesk-Produkt, dort war ein Dateiname "Schweißvorlage" oder sowas in der Art vorhanden.
Ich habe mir so beholfen, dass ich die Datei einfach auf "ss" umbenannt habe und mittels InstEd die entsprechenden Einträge in der MSI abgeändert habe.
Vielleich lässt sich ja so ein Workaround finden?

lg
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: Paket mit Umlaut-Dateinamen lässt sich nicht aktualisier

Beitrag von n.wenselowski »

Hallo zusammen,

nach tiefergehender Analyse sitzt das Problem tiefer als gedacht, da wir hier von einem Bug in der Python-Referenzimplementierung betroffen sind.
Wir haben allerdings eine Lösung gefunden, die mit dem nächsten Release live gehen wird.


Gruß

Niko

Code: Alles auswählen

import OPSI
Antworten