← Back to the index

Installing Skype 8 for Linux on 32-bit Debian 9 (Stretch)

First things first, there are no miracles: you still need a 64-bit processor to run skypeforlinux64.deb. In fact, quite a lot of code we're going to install is going to be 64-bit, so let's get started:

# Enable multiarch to allow installing non-i386 packages
dpkg --add-architecture amd64
apt update
# Install the 64-bit kernel to run both 32-bit and 64-bit binaries
apt install linux-image-amd64

Now reboot into the new kernel (make sure of that in the bootloader menu). Make sure that everything works because we're going to use only amd64 kernel from now on.

# This part is optional, but doing this ensures that amd64 kernel is going to be default in GRUB menu
apt purge linux-{image,headers}*686-pae
apt --purge autoremove

Now we can just install the 64-bit package, right?

# Commented-out code may break your system
# dpkg -i .../path/to/skypeforlinux64.deb
# apt-get install -f

If you run the above commands, you'll find out that apt suggests you to wipe half of the package management system (but has enough courtesy to warn you that it may not be the right thing to do, so can you please type that you know what you are doing first?)

What the hell?

  1. skypeforlinux depends on apt-transport-https.
  2. apt-transport-https does not have Multi-Arch field in its description. Therefore, it gets pre-multiarch behaviour,

The package is not co-installable and it must not be used to satisfy the dependency of any package of another architecture than its own.

  1. skypeforlinux:amd64 tries to pull apt-transport-https:amd64, which conflicts with apt-transport-https:i386 and the rest of APT.
  2. Hillarity ensures.

But that's nonsense, you'd say. (At least, I would.) apt-trasport-https provides, basically, a single executable, /usr/lib/apt/methods/https, which can be called by 32-bit APT to download whatever APT wants to download via HTTPS. There is no reason for it to be a 64-bit executable on a (mostly) 32-bit system. Can we ask APT to keep the 32-bit version?

Almost.

The Multiarch specification says:

If a package is declared Multi-Arch: foreign, preference should be given to a package for the native architecture if available; if it is not available, the package manager may automatically install any available package, regardless of architecture, or it may choose to make this an option controlled by user configuration.

The package is not co-installable and should be allowed to satisfy the dependencies of a package of another architecture than its own.

If you feel your tinker-fu high today, you can try to:

  1. Take the original apt-transport-https_VERSION_i386.deb
  2. Use ar to extract control.tar.gz
  3. Extract ./control from control.tar.gz
  4. Patch in the missing line and increment the version while you're at it
  5. Try to fit the guts back before abyone notices
  6. Install the resulting package

Perhaps it even could work. But we're building our own version of apt-transport-https from source, just for the sake of one line in the package description. Silly, I know.

# Install the packages required to build APT and then some
apt-get build-dep apt devscripts
# Create an empty directory to work in
cd $(mktemp -d ./apt-XXX)
# Download the apt source code
apt-get source apt # I wanted to sneak a GEB reference here, but, well, here it is
# Change directory to the source code itself
cd apt-*
# Insert the missing line in the description of apt-transport-https
sed -i '/^Package: apt-transport-https$/aMulti-Arch: foreign' debian/control
# Increment the version in the changelog so that the original from the repo
# wouldn't override the locally patched package next time you run apt upgrade
dch --local='multiarch' "Mark the package as multi-arch foreign to satisfy skype dependencies"
# dch will warn you that the current directory has been renamed,
# so let's change into it to avoid confusion
cd ../apt-*
# Build the packages. ALL OF THEM!
dpkg-buildpackage -uc -us

Go grab a cup of coffee. (Or, preferrably, something without any caffeine, because your pulse must be racing from stress at this point.) APT is written in C++ and contains a lot of translation strings, so don't expect the build process to be done instantaneously.

Is it done yet? On my machine the build process additionally warned about some translations not being good enough and then crashed because of missing usr/share/man/*/*/apt-something-something.*. Notice the double */*/: those must have been the translated man pages. I had to remove the offending lines from debian/*.install. It's not like I'm even going to install those packages: I just need the patched apt-transport-https. After I applied the fix, I ran fakeroot debian/rules binary to restart the process from approximately where it stopped at.

Is it done now? Finally, you can install the multi-arch-aware apt-transport-https:

dpkg -i ../apt-transport-https*.deb

Then install Skype and its dependencies:

dpkg -i .../path/to/skypeforlinux64.deb
apt-get install -f

Assuming that our apt-transport-https is patched properly, installing Skype now should not break the system.

Enjoy your calls! Until the next APT update, that is...


Unless otherwise specified, contents of this blog are covered by CC BY-NC-SA 4.0 license (or a later version).