2011年5月21日 星期六

Run Google Earth 6 on openSUSE

中文版在此
1. How to install google earth ?
Go to http://www.google.com/earth/index.html download the stable verion of google earth.
Choose rpm format package for Fedora/openSUSE.

You will get a google-earth-stable_current_*.rpm file,
install this file in terminal with command:
$ sudo rpm -ivh google-earth-stable_current_*.rpm

or
$ sudo zypper in google-earth-stable_current_*.rpm

or just click on the file use "Install/Remove software" to install it.
This rpm will creat a software repository automatically,
with this repo, you can update your google earth to new version if available.


2. Start Google Earth
You can find Google Earth in your main menu:
Start -> Network -> Other -> Google Earth(3D planet viewer)
or start it use command
$ google-earth

google earth (english)

google earth (traditional Chinese, zh_TW)

google earth (Japanese)

You can see ugly interface fonts and missing fonts for non-latin languages,
The qt4 libraries supplied by googleearth rpm did not support fontconfig and antialias,
so we have to fix this mamually.

3. Use system qt4 libraries
Google Earth 5.1.x works fine on openSUSE after deleting libQt* files in googleearth directory,
http://swyear.blogspot.com/2009/04/google-earth-50.html
but fail since 5.2.x
Remove libQt* in googleearth directory,
GE won't start:
$ sudo rm /opt/google/earth/free/libQt*
$ google-earth
Google Earth has caught signal 11.



We apologize for the inconvenience, but Google Earth has crashed.
This is a bug in the program, and should never happen under normal
circumstances. A bug report and debugging data have been written
to this text file:

/home/****/.googleearth/crashlogs/crashlog-4dda74ff.txt

Please include this file if you submit a bug report to Google.

But there's not much message in that log file:
$ cat /home/****/.googleearth/crashlogs/crashlog-4dda74ff.txt
Major Version 6
Minor Version 0
Build Number 0003
Build Date May 17 2011
Build Time 00:40:40
OS Type 3
OS Major Version 2
OS Minor Version 6
OS Build Version 37
OS Patch Version 6
Crash Signal 11
Crash Time 1306162431
Up Time 0.453146

Stacktrace from glibc:
./libgoogleearth_free.so(+0xab953)[0xf7715953]
./libgoogleearth_free.so(+0xabad3)[0xf7715ad3]
[0xffffe400]


But Ubuntu can use similar method to run google-earth with system qt4 libraries:
http://blog.slps.tp.edu.tw/00086/?p=275 (written in Chinese)
http://people.debian.org.tw/~chihchun/2010/09/12/google-earth-for-linux/ (written in Chinese)

4. Debug google earth
You need some debuginfo packages from Debug repo
$ cd /opt/google/earth/free/
$ export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
$ gdb ./googleearth-bin
GNU gdb (GDB) SUSE (7.2-3.3)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
For bug reporting instructions, please see:
...
Reading symbols from /opt/google/earth/free/googleearth-bin...(no debugging symbols found)...done.
(gdb) r
Starting program: /opt/google/earth/free/googleearth-bin
[Thread debugging using libthread_db enabled]
Missing separate debuginfo for /usr/lib/libstdc++.so.6
Try: zypper install -C "debuginfo(build-id)=ca1ade9217cff47a2dc7f94eac086d6bfc524f2b"
Missing separate debuginfo for /lib/libgcc_s.so.1
Try: zypper install -C "debuginfo(build-id)=be962e2ce565653c0dc2c21bebdfde348c81d3b9"

Program received signal SIGSEGV, Segmentation fault.
poolGrow (pool=0x80a31d8) at lib/xmlparse.c:6103
warning: Source file is more recent than executable.
6103 pool->freeBlocks = pool->freeBlocks->next;
(gdb) bt
#0 poolGrow (pool=0x80a31d8) at lib/xmlparse.c:6103
#1 0xf497a17e in poolAppend (pool=0x80a31d8, enc=0xf5497e20,
ptr=0x80ae641 "family\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t<edit name=\""...,
end=0x80ae647 "\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t<edit name=\"family"...) at lib/xmlparse.c:6036
#2 0xf497a1af in poolStoreString (pool=0x80a31d8,
enc=<value optimized out>,
ptr=0x80ae641 "family\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t<edit name=\""...,
end=0x80ae647 "\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t<edit name=\"family"...) at lib/xmlparse.c:6089
#3 0xf497c682 in storeAtts (parser=0x80a3038, enc=0xf5497e20,
attStr=0x80ae635 "<test name=\"family\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t"..., tagNamePtr=0x80a4bbc,
bindingsPtr=0x80a4bdc) at lib/xmlparse.c:2706
#4 0xf497dddf in doContent (parser=<value optimized out>, startTagLevel=0,
enc=0xf5497e20,
s=0x80ae635 "<test name=\"family\">\n\t\t\t<string>serif</string>\n\t\t</test>\n\t\t<test name=\"weight\" compare=\"more_eq\">\n\t\t\t<int>200</int>\n\t\t</test>\n\t\t<test name=\"size\" compare=\"more_eq\">\n\t\t\t<double>24</double>\n\t\t</test>\n\t\t"..., end=0x80aeaf6 "", nextPtr=0x80a3050,
haveMore=1 '\001') at lib/xmlparse.c:2356
#5 0xf497ece2 in contentProcessor (parser=0x80a3038,
start=0x80ae458 "</alias>\n\n\t<!-- Persian fantasy fonts -->\n\t<alias>\n\t\t<family>fantasy</family>\n\t\t<accept>\n\t\t\t<family>Homa</family>\n\t\t\t<family>Kamran</family>\n\t\t\t<family>Fantezi</family>\n\t\t\t<family>Tabassom</family>\n\t\t"..., end=0x80aeaf6 "", endPtr=0x80a3050)

There're some strings about persian font...
so maybe something wrong about the fontsetting file.
I try to remove the link /etc/fonts/conf.d/65-fonts-persian.conf
$ sudo rm /etc/fonts/conf.d/65-fonts-persian.conf

Then GE can start, and fonts are antialias.
BUT, some graphics are missing...
Google Earth with antialias fonts(en)

Google Earth with antialias fonts(Chinese)

Google Earth with antialias fonts(Japanese)


Follow the Ubuntu's instructing link above, you need libfreeimage3 package.
You can search and download this package from http://software.opensuse.org
You need libfreeimage3-*.i586.rpm, cause googleearth is a 32bit application
even if you are using x86_64 system, you still need this i586 package!
Download the package, install with command
# rpm -ivh libfreeimage3*.rpm

Then edit googleearth script add
"export LD_PRELOAD=/usr/lib/libfreeimage.so.3" :
cd $script_path;
export LD_PRELOAD=/usr/lib/libfreeimage.so.3
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./googleearth-bin "$@"

Start google-earth again:
icons had shown up in left Layer frame,
BUT not all the graphics show up properly:



and ALL the photos from any popup window (Panoramio and 360Cities) or buildin browser are missing:


Open with your browser (firefox) shows that should be like this:

These things are cause by incompatible libraries (libqjpeg.so, libqgif.so)

5. Something more to do
rmtk313 in
http://www.google.com/support/forum/p/earth/thread?tid=3fe67ea84f63bcd8&hl=en
found that you'd better use
Qt libraries from Qt4.6.3 ,
(64-bit system need libphonon.so.4)
and libqjpeg.so libqgif.so from Google Earth 5.2 ,
and libfreeimage.so.3 ver 3.1.3

and rmtk313 had packed these files for us HERE.
Download the file replacement.7z (7z format),
You will need p7zip package to uncompress and extract files
(you can install it with zypper in p7zip)
$ 7z x replacement.7z

(you can just click on replacement.7z if you had p7zip installed,
Ark or File-roller will start a GUI to extract these files)
file list in rmtk313's package:
googleearth -- startup scripts
libphonon.so.4 -- library from Debain Sqeeze
libQtGui.so.4 -- Qt library from Debain Sqeeze (version 4.6.3)
libQtWebKit.so.4 -- Qt library from Debain Sqeeze (version 4.6.3)
libfreeimage.so.3 -- library from Ubuntu Maverick (version 3.13.1)
libQtCore.so.4 -- Qt library from Debain Sqeeze (version 4.6.3)
libQtNetwork.so.4 -- Qt library from Debain Sqeeze (version 4.6.3)
plugins -- directory contains libqgif.so and libqjpeg.so from google earth 5.2.x

You may not need all the files
On my openSUSE 11.3 x86 system,
After doing things above,
I only need files (libqjpeg.so libqgif.so) in plugins/imageformat/ directory.
Use these files replace the ones from google-earth
$ sudo cp plugins/imageformat/libq* /opt/google/earth/free/plugins/imageformats/

then all the photos from Panoramio and 360Cities can showup properly.


But on my openSUSE 11.4 x86_64 laptop,
GE6 will crash (freeze) if replace libqjpeg.so libqgif.so with files from 5.2
I have to replace all the files from rmtk313
and Google Earth 6 works.

6. Needed files for Google Earth 6 from openSUSE 11.3
Test OK with rmtk313's files,
I think it might be more compatible with openSUSE's libraries
Share:
http://dl.dropbox.com/u/6331820/ge6_replacement_opensuse.tar.gz
Use these files to replace the files from google-earth
Download the tarball and uncompress, and run install.sh
$ tar -zxvf ge6_replacement_opensuse.tar.gz
ge6_replacement_opensuse/
ge6_replacement_opensuse/libQtWebKit.so.4
ge6_replacement_opensuse/googleearth
ge6_replacement_opensuse/libQtGui.so.4
ge6_replacement_opensuse/install.sh
ge6_replacement_opensuse/plugins/
ge6_replacement_opensuse/plugins/imageformats/
ge6_replacement_opensuse/plugins/imageformats/libqjpeg.so
ge6_replacement_opensuse/plugins/imageformats/libqgif.so
ge6_replacement_opensuse/libQtNetwork.so.4
ge6_replacement_opensuse/libQtCore.so.4
ge6_replacement_opensuse/libfreeimage.so.3
$ cd ge6_replacement_opensuse/
$ ./install.sh

install.sh script will
(1) remove /etc/fonts/conf.d/65-fonts-persian.conf
(2) install libphonon and relative packages
(3) backup files, copy googleearth (libfreeimage script added), libQt*, libfreeimage.* (from openSUSE 11.3) and plugins/imageformats/libq* (from GE 5.2) to google-earth-dir
Here's the contents of install.sh
#!/bin/bash
echo "This script will copy needed files for Google Earth 6"
echo "You have to install Google Earth before running this script"
echo "Need root password !"
#Remove buggy link
test -e /etc/fonts/conf.d/65-fonts-persian.conf && sudo rm /etc/fonts/conf.d/65-fonts-persian.conf
#Check architecture
rpmlist=""
arch=$(uname -m)
if [ "$arch" == 'x86_64' ]
then
test -e /usr/lib/libphonon.so.4 || rpmlist="libphonon4-32bit"
test -e /usr/lib/libaudio.so.2 || rpmlist="$rpmlist libaudio2-32bit"
test -e /usr/lib/libpulse-mainloop-glib.so.0 || rpmlist="$rpmlist libpulse-mainloop-glib0-32bit"
else
test -e /usr/lib/libphonon.so.4 || rpmlist="libphonon4"
test -e /usr/lib/libaudio.so.2 || rpmlist="$rpmlist libaudio2"
test -e /usr/lib/libpulse-mainloop-glib.so.0 || rpmlist="$rpmlist libpulse-mainloop-glib0"
fi
#Install needed packages
if [ "$rpmlist" != "" ]
then
echo "$rpmlist will be install"
sudo zypper in $rpmlist
fi
#Copy all files to googleearth_dir
FILEDIR=$(cd `dirname $0` && pwd)
sudo rm -r /opt/google/earth/free/*-orig
for qtfile in /opt/google/earth/free/libQt*.4
do
sudo mv $qtfile $qtfile-orig
done
sudo mv /opt/google/earth/free/googleearth /opt/google/earth/free/googleearth-orig
sudo mv /opt/google/earth/free/plugins /opt/google/earth/free/plugins-orig
sudo cp -r $FILEDIR/* /opt/google/earth/free/
sudo rm /opt/google/earth/free/install.sh
echo "Done! Have a lot of fun!"


Run google-earth again, almost everything is fine:
Start up

Panoramio popup window

You can upload your photos to Panoramio

use buildin browser to view photos

360cities

3D buildings, You can type Chinese character in serch area

Welcome to Taichung

Street view

Start up with Japanese UI

Mt. Fuji 富士山·ふじさん

Start up with EN UI

Grand Canyon

One of 360 cities photos of Grand Canyon

Defect:
It's sad that flash can't work properly with embedded pop-up window


Click on video screen window to watch from youtube in build-in browser


Youtube layer also use flash

Have to link to website


7. Note
(1). If relative bug not solved yet, after updating google-earth or fontconfig,You must re-run that script again
(2). Tested OK on openSUSE 11.3 x86 system and openSUSE 11.4 x84_64 system
(3). Ubuntu user can try rmtk313's package

沒有留言: