64bitový Linux a Opera

Dub
22
2007

Jak jsem zmínil v minulém příspěvku a v komentářích k němu, rád bych tu průběžně zveřejnil nějaké finty pro provoz 32bitových aplikací v 64bitových Linuxech. Původně jich mělo být víc, ale protože některé začaly trochu zlobit, tak prozatím alespoň něco.

Lately I’ve decided to post here a few tips and tricks about 64bit Linux distros in which I’d like to mention the little things that bugged me for a long time until I found a solution or at least a workaround. And since there happen to be people out there who find my posts here on international search engines from time to time, I’ll try to dust off my English a little and do it bilingually. So for (bad) English, see further down.

Začnu jednou víceméně drobností, která mi ovšem pila krev asi nejvíc. Setkal jsem se s tímhle problémem v 64bitovém Ubuntu, jak v 6.10, tak v nové verzi 7.04. Je dost možné, že tento problém postihuje i další Linuxové 64bitové distribuce, já měl aktuálněji tu čest jen s Arch64 a Vidalinuxem, kde se tento konkrétní problém neprojevoval.
Opera prozatím existuje pouze ve 32bitové verzi (ačkoliv 64bitová se údajně konečně chystá – informace přímo od Opery). Což v 64bitové distribuci znamená dvě možnosti – provozovat 32bitový chroot nebo multilib.
Chroot je sice hezká věc a velice funkční, nicméně idea udržování ‚instalace v instalaci‘ se mi vůbec nezamlouvá, a krom toho tu jsou další problém – například rozdělení MIME asociací. Pokud v Opeře v chrootu například stáhnu nějaký PDF dokument, nemohu ho otevřít dvojklikem ze seznamu stažených souborů, pokud nemám přímo v chrootu nainstalovanou 32bitovou verzi PDF prohlížeče. A tak je to s každým typem souboru. Docela kontraproduktivní (prostě je to vopruz, no).
Čímžtopádem ke slovu přichází multilib. V Ubuntu se řeší instalací několika balíčků, poskytujících základní podporu pro 32bitové aplikace. Pro chod Opery (bez Javy) jsem potřeboval balíčky ia32-libs, ia32-libs-kde, ia32-libs-gtk a ia32-libs-sdl. Opera (například aktuální 9.20) se nainstaluje poměrně snadno ze standardního 32bitového balíčku příkazem:

sudo dpkg -i --force-architecture opera-static_9.20-20070409.1-qt_en_i386.deb (v případě staticky kompilované verze)

sudo dpkg -i --force-architecture opera_9.20-20070409.6-shared-qt_en_i386.deb (v případě kompilace pro sdílenou Qt knihovnu)

Poté by měla jít Opera normálně spustit.
Tady by zdánlivě mohl návod končit. Bohužel, pro české uživatele (a obecně ty, kteří užívají při psaní diakritiku a/nebo mrtvé klávesy) tím problémy teprve začínají. V tuhle chvíli totiž v Ubuntu zjistíte, že místo většiny českých znaků se vám objevují obdélníčky a že to není problém špatného fontu.
Prvním problémem je to, že multilib v Ubuntu nemá zcela v pořádku definice locales a pokud jeho prostřednictvím spustíte 32bitový program, nebude je správně dekódovat. Řešení tohoto problému je nicméně velice jednoduché (a trochu mě zaráží, že ačkoliv o tomto triviálním problému v Ubuntu vědí už minimálně od vydání Edgy, přetrvává i do Feisty). Vyřeší ho jednoduchý symlink:

sudo ln -s -T /usr/lib64/locale /usr/lib32/locale

Pokud teď znovu spustíte Operu, měly by v ní fungovat správně všechny znaky přístupné jednou klávesou a v případě statické verze i ty, které se vkládají pomocí mrtvých kláves.
Pokud ale chcete jako já používat shared verzi Opery (například proto, abyste měli antialiasované fonty v menu a dialogových oknech), je situace opět o něco komplikovanější. Mrtvé klávesy totiž nefungují – pokud chcete například napsat Ň, objeví se místo toho ˇN. Dlouho mi trvalo, než jsem přišel na to, v čem je problém, a řešení asi není úplně ideální, je to spíše hack, nicméně funguje a nezdá se, že by způsobilo jakékoliv jiné problémy. Problém je totiž zcela očividně v 32bitové knihovně libqt-mt, kterou Ubuntu používá. Netuším přesně proč, ale zkrátka s ní mrtvé klávesy ve 32bitových aplikacích nefungují. Zkoušel jsem tu, kterou instaluje balíček ia32-libs-kde, přepsat přímo knihovnou z 32bitové verze Ubuntu, ale bezvýsledně (což mi připadá zajímavé, protože ve 32bitovém Ubuntu s ní tyhle problémy nejsou). Řešením se nakonec ukázalo vzít 32bitovou libqt-mt z úplně jiné distribuce – v mém případě posloužil Arch Linux. Stačí si stáhnout tento balíček, vyextrahovat z něj libqt-mt.so.3.3.8 a libqui.so.1.0.0 a nakopírovat je (samozřejmě jako root) v Ubuntu do /usr/lib32/ místo původních knihoven. Pak stačí upravit všechny symlinky, které na tyto dvě knihovny v tomto adresáři odkazují (libqt-mt.so, libqt-mt.so.3 atd.) a při dalším spuštění Opery by už mělo všechno fungovat, jak má.

A co se týče Opery pod multilibem, pak ještě jeden poměrně bizarní problém – pokud používáte fintu pro Megaupload prostřednictvím změny řetězce ISP, pak se může stát, že vám bude padat Flash 9 plugin a tam, kde má být nějaká animace, bude místo ní jen bílá plocha. Bizarní, ale je to tak.

And now for something completely same:

Let’s start with a minor problem, which nevertheless bugged me most. I’ve encountered this in 64bit Ubuntu 6.10 as well as in new 7.04. It’s possible that this does happen in some other distros as well. Lately I’ve only seen Arch64 and Vidalinux AMD64 and none of them were affected by this.
There is still only 32bit version of Opera browser available (although, as was recently mentioned, the 64bit version is finally in the works). In 64bit distro, this means two options are available – either set up a 32bit chroot or use mulitlib.
Chroot is a nice thing and it works quite well, but I really don’t like the very idea of running ‚distro within distro‘. And there are other problems as well – for example the doubled MIME associations. If I download a PDF file using Opera in chroot, it’s not possible to just double click in the transfers list to open it, unless I install the 32bit version of PDF viewer as well. And this goes for any filetype. It kind of defeats the purpose, I think (well, it just plain sucks).
Therefore we come to the multilib solution. In Ubuntu this is done by installing a few packages that provide the basic 32bit application support. For Opera to run (without Java), I’ve had to install the ia32-libs, ia32-libs-kde, ia32-libs-gtk a ia32-libs-sdl packages. As for Opera itself (i.e. the latest Opera 9.20), it can be installed quite easy using the usual 32bit package (available from opera.com) like this:

sudo dpkg -i --force-architecture opera-static_9.20-20070409.1-qt_en_i386.deb (in case of static version)

sudo dpkg -i --force-architecture opera_9.20-20070409.6-shared-qt_en_i386.deb (in case of shared version, which uses your local Qt library)

Then, Opera should run without problems.
It seems like that’s all there’s to it. Sadly, for Czech users (and generally for all international users, who need to type accented characters and/or use dead keys), the troubles are just beginning. At this point you find out that instead of accented characters, all you get is small rectangles and that it’s got nothing to do with font selection.
The first part of the problem is that in Ubuntu, multilib locales are not set up as they should, so if you try to run a 32bit app, it can’t decode them properly. This can be resolved very easily, though (and I’m a little worried that although Ubuntu knows about this problem at least since Edgy release, it’s still present even in Feisty). The solution is a simple symlink:

sudo ln -s -T /usr/lib64/locale /usr/lib32/locale

If you start Opera now, all the accented characters accessible by single keystroke should work and, in the case of static version, the dead keys should work as well.
If you are like me and want to use the shared version of Opera (so as to have antialiased fonts in menus and dialogs), it complicates things a bit, again. The dead keys (or compose key) don’t work yet – if you try to type Ň, you’ll get ˇN. It took me a long time to find out where the problem is, and although the solution is not what I’d call ideal, it’s more of a hack, it still works and it doesn’t look like it causes more problems than it solves. The problem is obviously within the 32bit libqt-mt library Ubuntu uses. I don’t really know why, but you simply can’t type dead characters while using it. I’ve tried to overwrite the one the ia32-libs-kde package installs with the one from pure 32bit Ubuntu, but to no avail (which I find interesting, since in pure 32bit Ubuntu, there’s no such problems, dead keys work as they should). The final solution is to use 32bit libqt-mt from another distribution altogether, in my case from Arch Linux. All you have to do is to download this package, extract the libqt-mt.so.3.3.8 and libqui.so.1.0.0 libraries and copy them (as root) in Ubuntu to /usr/lib32/, overwriting the existing versions. Then it’s a matter of correcting all the symlinks in this directory that point to these libraries (libqt-mt.so, libqt-mt.so.3 and so on) and the next time you start Opera, dead keys should work just fine.

And speaking of Opera in multilib environment, there is another very bizzare issue – if you use the trick for free Megaupload download slots and change the ISP setting in Opera, it’s possible that the Flash 9 plugin will keep crashing and instead of Flash objects you’ll only see blank rectangles. Quite bizzare, but true.

1 člověku se článek líbí.

Napsal(a) dne 22. 4. 2007 v 01:55
Kategorie: HW, SW a podobná verbež

Žádné komentáře »

RSS komentářů k tomuto příspěvku. Zpětné URL


Napište komentář

Používá systém WordPress | Styl: Aeros 2.0 z TheBuckmaker.com