teamviewer / without all ia32-libs

teamviewer / without all ia32-libs

  • Written by
    Walter Doekes
  • Published on

A quick rundown on installing TeamViewer without a gazillion ia32-libs.

The problem: if you attempt to install teamviewer_linux_x64.deb on your 64-bit machine, the ia32-libs dependency tries to install more than 200 packages.

That not only feels like overkill, it takes a hell of a long time too.

The solution: alter the dependency list in the .deb and create a small metapackage that references only the required libs.

What follows, is the steps how.

Fetch the download, and inspect what packages we really need (you can skip the inspection):

$ dpkg -x teamviewer_linux_x64-v8.0.17147.deb tmp
$ cd tmp
$ find . -type f | while read -r x
  do word=`test -f "$x" && file "$x" | sed -e 's/^[^:]*: //;s/ .*//'`
     test "$word" = ELF && ldd "$x"
  done | grep not\ found | sort -u
...
libwine.so.1 => not found
libX11.so.6 => not found
libXdamage.so.1 => not found
libXext.so.6 => not found
libXfixes.so.3 => not found
...
$ cd ..

After installing the following list, only libwine.so.1 would still say “not found” (which is okay, because it’s in the package):
libc6:i386 libgcc1:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxtst6:i386

Unfortunately, that was not enough. The “fixme:dbghelp:elf_search_auxv can’t find symbol in module” and “Access violation at 0x7d8ed1b8: Illegal read operation at 0x0000005C (Exception Code: 0xC0000005)” errors when running, turned out to require these two too:
libfontconfig1:i386 libfreetype6:i386

Create a metapackage to hold the i386 dependencies. dpkg refuses to add the :i386 variants to the dependency list directly (a value different from ‘any’ is currently not allowed).

$ mkdir -p tmp2/DEBIAN
$ cat >tmp2/DEBIAN/control <<EOF
Package: teamviewer-i386
Version: 8.0.17147
Section: non-free/internet
Priority: optional
Architecture: i386
Multi-Arch: foreign
Depends: libc6, libgcc1, libx11-6, libxau6, libxcb1, libxdamage1, libxdmcp6, libxext6, libxfixes3, libxtst6, libfontconfig1, libfreetype6
Maintainer: Yourself <root@localhost>
Description: TeamViewer 32-bit dependencies.
EOF
$ dpkg -b tmp2 teamviewer-i386:i386.deb
dpkg-deb: building package `teamviewer-i386:i386' in `teamviewer-i386:i386.deb'.

Update the original teamviewer package dependency list:

$ dpkg --control teamviewer_linux_x64-v8.0.17147.deb tmp/DEBIAN
$ grep ^Depends: tmp/DEBIAN/control
Depends: bash (>= 3.0), libc6-i386 (>= 2.4), lib32asound2, lib32z1, libxext6, ia32-libs
$ sed -i -e 's/ia32-libs/teamviewer-i386/' tmp/DEBIAN/control
$ grep ^Depends: tmp/DEBIAN/control
Depends: bash (>= 3.0), libc6-i386 (>= 2.4), lib32asound2, lib32z1, libxext6, teamviewer-i386
$ dpkg -b tmp teamviewer_linux_x64-v8.0.17147-custom.deb
dpkg-deb: building package `teamviewer' in `teamviewer_linux_x64-v8.0.17147-custom.deb'.

Time to rock:

$ sudo dpkg -i teamviewer-i386.deb
...
$ sudo apt-get -f install
...
The following NEW packages will be installed:
  libexpat1:i386 libfontconfig1:i386 libfreetype6:i386 libx11-6:i386
  libxau6:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386
  libxext6:i386 libxfixes3:i386 libxtst6:i386

Ah, not 220 packages, but only 11. Much better!

$ sudo dpkg -i teamviewer_linux_x64-v8.0.17147-custom.deb
...
$ sudo apt-get -f install
...

Profit. A system without hundreds of unused 32-bits libs.

Now if someone can tell me how to fix this, it’d be nice:

$ dpkg-query --show --showformat='${status} ${package}\n' | grep teamviewer-i386
install ok installed teamviewer-i386
$ dpkg -L teamviewer-i386
Package `teamviewer-i386' is not installed.
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.

Because that’s what the nightly /usr/sbin/popularity-contest calls :-(


Back to overview Newer post: gnome-calculator / missing menu Older post: mysql / count occurrences