home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2013 / 2013.06.linuxmafia.com / linuxmafia.com / pub / helpful-things / GetGoogleEarth < prev    next >
Text File  |  2007-08-29  |  6KB  |  176 lines

  1. #!/bin/bash
  2. #
  3. # Copyright 2006-2007 Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  18.  
  19. errorout () { echo "$0: $@" >&2; cd /tmp; rm -rf GoogleEarthInstall; exit 2; }
  20. INSTALLDIR=/opt
  21. INSTALLATION=google-earth
  22. [ "$(id -u)" = "0" ] || errorout must have superuser privileges
  23. touch /usr/share/foobarbazquux || errorout /usr is read-only
  24. rm -f /usr/share/foobarbazquux
  25. touch $INSTALLDIR/foobarbazquux || errorout $INSTALLDIR is read-only
  26. $INSTALLDIR/$INSTALLATION/uninstall.sh 2>/dev/null || true
  27. if ! dd if=/dev/null of=$INSTALLDIR/foobarbazquux seek=1 bs=64M; then
  28.     rm -f $INSTALLDIR/foobarbazquux
  29.     errorout not enough room in $INSTALLDIR
  30. fi
  31. rm -f $INSTALLDIR/foobarbazquux
  32. cd /tmp
  33. if ! dd if=/dev/null of=foobarbazquux seek=1 bs=128M; then
  34.     rm -f foobarbazquux
  35.     errorout not enough room in /tmp
  36. fi
  37. rm -f foobarbazquux
  38. mkdir GoogleEarthInstall
  39. cd GoogleEarthInstall
  40. sIFS="$IFS"
  41. IFS=:
  42. set $LANGUAGE:en
  43. IFS="$sIFS"
  44. unset sIFS
  45. for PICKLANG; do
  46.     EULALANG=$(echo $PICKLANG | cut -d . -f 1)
  47.     echo " ar cs de en es fr it ja ko nl pl pt ru zh_TW " | grep -q " $EULALANG " && break
  48.     EULALANG=$(echo $PICKLANG | cut -d _ -f 1)
  49.     echo " ar cs de en es fr it ja ko nl pl pt ru zh_TW " | grep -q " $EULALANG " && break
  50. done
  51. EULAFILE=EULA-GoogleEarth-${EULALANG}.txt
  52. wget -O- http://earth.google.com/intl/$(echo $EULALANG | tr _ -)/download-earth.html | perl -e 'undef $/; binmode(STDIN, ":utf8"); binmode(STDOUT, ":locale"); $_ = <STDIN>; s/.*<textarea[^>]*>(.*?)<\/textarea>.*/$1/is; print $_' > $EULAFILE
  53. cat >GoogleEarth.template1 <<EOF
  54. Template: shared/GoogleEarth-EULA
  55. Type: boolean
  56. Default: false
  57. Description: Do you agree to this license?
  58. EOF
  59. grep -v '^$' $EULAFILE | sed 's/^[^[:space:]].*/&\n/g' | sed -e 's/^\s*$/./g' -e 's/^/ /g' >>GoogleEarth.template1
  60. echo >>GoogleEarth.template1
  61. debconf-loadtemplate $INSTALLATION GoogleEarth.template1 || errorout failed to load debconf template1
  62. export -f errorout
  63. cat >GoogleEarth.debconf.sh <<EOF
  64. #!/bin/bash
  65. . /usr/share/debconf/confmodule || errorout unable to use debconf
  66. GoogleEarth_cleanup () {
  67.     db_unregister shared/GoogleEarth-EULA
  68.     db_purge
  69. }
  70. errorin () { GoogleEarth_cleanup; errorout "\$@"; }
  71. STATE=1
  72. while true; do
  73.     case "\$STATE" in
  74.     0)  # ensure going back from license presentment is harmless
  75.         STATE=1
  76.         continue
  77.         ;;
  78.     1)  # present license
  79.         db_fset shared/GoogleEarth-EULA seen false
  80.         db_input critical shared/GoogleEarth-EULA || errorin EULA could not be displayed
  81.         ;;
  82.     2)  # determine users' choice
  83.         db_get shared/GoogleEarth-EULA || errorin could not get EULA response
  84.         if [ "\$RET" != "true" ]; then
  85.             cd /tmp
  86.             rm -rf GoogleEarthInstall
  87.             GoogleEarth_cleanup
  88.             exit 1
  89.         fi
  90.         break
  91.         ;;
  92.     *)  # unknown state
  93.         errorin license state unknown: \$STATE
  94.         ;;
  95.     esac
  96.     if db_go; then
  97.         STATE=\$((\$STATE + 1))
  98.     else
  99.         STATE=\$((\$STATE - 1))
  100.     fi
  101. done
  102. GoogleEarth_cleanup
  103. EOF
  104. chmod a+x GoogleEarth.debconf.sh
  105. ./GoogleEarth.debconf.sh || exit $?
  106. wget -N http://dl.google.com/earth/client/current/GoogleEarthLinux.bin || errorout could not download Google Earth
  107. sh GoogleEarthLinux.bin --noexec --keep --nox11 --nochown --target GoogleEarthInstaller
  108. rm -f GoogleEarthLinux.bin
  109. cd GoogleEarthInstaller
  110. cat >GoogleEarth.template2 <<EOF
  111. Template: shared/GoogleEarth-README
  112. Type: note
  113. Description: GoogleEarth README
  114. EOF
  115. grep -v '^$' README.linux | sed -re 's/^[[:blank:]]?[^[:blank:]]+.*$/ &/g' -e 's/^\s*$/./g' -e 's/^/ /g' >>GoogleEarth.template2
  116. echo >>GoogleEarth.template2
  117. debconf-loadtemplate $INSTALLATION GoogleEarth.template2 || errorout failed to load debconf template2
  118. cat >GoogleEarth.debconf.sh <<EOF
  119. #!/bin/bash
  120. . /usr/share/debconf/confmodule || errorout unable to use debconf
  121. GoogleEarth_cleanup () {
  122.     db_unregister shared/GoogleEarth-EULA
  123.     db_unregister shared/GoogleEarth-README
  124.     db_purge
  125. }
  126. errorin () { GoogleEarth_cleanup; errorout "\$@"; }
  127. STATE=1
  128. while true; do
  129.     case "\$STATE" in
  130.     0)  # ensure going back is harmless
  131.         STATE=1
  132.         continue
  133.         ;;
  134.     1)  # present README
  135.         db_fset shared/GoogleEarth-README seen false
  136.         db_input low shared/GoogleEarth-README
  137.         ;;
  138.     2)  # after README
  139.         break
  140.         ;;
  141.     *)  # unknown state
  142.         errorin license state unknown: \$STATE
  143.         ;;
  144.     esac
  145.     if db_go; then
  146.         STATE=\$((\$STATE + 1))
  147.     else
  148.         STATE=\$((\$STATE - 1))
  149.     fi
  150. done
  151. GoogleEarth_cleanup
  152. EOF
  153. chmod a+x GoogleEarth.debconf.sh
  154. ./GoogleEarth.debconf.sh || exit $?
  155. mkdir $INSTALLATION
  156. cp -a ../$EULAFILE bin/googleearth googleearth-icon.png googleearth.xpm linux README* $INSTALLATION
  157. cd $INSTALLATION
  158. tar xf ../googleearth-linux-x86.tar
  159. tar xf ../googleearth-data.tar
  160. cd ..
  161. mv $INSTALLATION $INSTALLDIR
  162. cat >uninstall.sh <<EOF
  163. #!/bin/bash
  164. export SETUP_INSTALLPATH=$INSTALLDIR/$INSTALLATION
  165. export XDG_DATA_DIRS=/usr/share
  166. EOF
  167. . uninstall.sh
  168. chmod a+x uninstall.sh
  169. mv uninstall.sh $SETUP_INSTALLPATH
  170. grep -v 'xdg-desktop-icon[[:blank:]]*install' postinstall.sh > postinstall1.sh
  171. cat preuninstall.sh >> $SETUP_INSTALLPATH/uninstall.sh
  172. echo 'rm -rf $SETUP_INSTALLPATH' >> $SETUP_INSTALLPATH/uninstall.sh
  173. sh postinstall1.sh
  174. cd /tmp
  175. rm -rf GoogleEarthInstall
  176.