Migration von Latin1 nach UTF8

Aus Knowledgebase
Wechseln zu: Navigation, Suche

Die meisten Neuinstallationen beliebiger Linuxdistributionen verwenden inzwischen UTF8 als Systemzeichensatz. Alte Installationen haben keine Festlegung oder verwenden Latin1. Um hier eine gewisse Kompatibilität herzustellen, wird die Umstellung für Debian Squeeze beschrieben.

Systemeinstellung

Als erstes müssen die entsprechenden Locales generiert werden:

dpkg-reconfigure locales

Hier auswählen, welche generiert werden sollen. Empfehlung: Jeweilige Landessprache (de_DE), sowie englisch (en_GB bzw. en_US) Nach der Auswahl kann dann der Standardwert festgelegt werden. Dieser wird in der Datei /etc/default/locale eingetragen.

Nach einem Reboot arbeitet das System nunmehr mit UTF8.

Dateisystem

Nun muss das Dateisystem noch umgestellt werden. Convmv hilft bei der Umstellung

apt-get install convmv
convmv -f ISO-8859-1 -t UTF8 -r --qfrom --qto --notest .

Netatalk

Anpassen von

  • /etc/default/netatalk:
ATALK_UNIX_CHARSET='UTF8'
  • /etc/netatalk/AppleVolumes.system:
    Umstellen der Volumes von Latin1 auf UTF8.

Netatalk neu starten.

Volume(s) mounten, Syslog dabei beobachten! Es sollten keine Fehlermeldungen auftreten. Jetzt Volume(s) wieder unmounten und die zugehörige AppleDouble-Datenbank checken:

dbd -r .

Folgende Meldungen können auftreten und ignoriert werden:

Bad encoding for '/home/foo/.profile'
Incorrect CNID data in .AppleDouble data for '/home/foo/Mac-Test-File' (bad stamp?)

Spätestens jetzt werden Dateien angemeckert, die per Hardlink platzsparend an verschiedenen Stellen im Dateisystem auftauchen sollten:

No CNID for '/home/foo/Link1' in database
No CNID for '/home/foo/Link2' in database
Put results in a non-unique secondary key in an index not configured to support duplicates
Sep 09 15:04:22.235705 [17688] {dbif.c:693} (E:CNID): error setting key/value in cnid2.db: Invalid argument

Lösung: Hardlinks durch Kopien oder Alias ersetzen.

Samba

In /etc/samba/smb.conf umstellen:

  • unix charset = UTF8
  • display charset = LOCALE

Dateiinhalte

Die Konvertierung aller Dateiinhalte ist sehr aufwendig und kann im Falle von Binärdateien für deren logische Zerstörung sorgen. Kompatibilität in vim kann durch die Ergänzung von ~/.vimrc mit diesen Parametern hergestellt werden:

" Terminalsettings
:set termencoding=UTF8
:set encoding=Latin1

Weblinks