This is quick tutorial on installing latest VirtualBox on Slackware 14.2 64-bit multilib. In Slackware parlance, multilib is mixed environment with 64-bit and 32-bit libraries, allowing you to run 32-bit programs (e.g. Skype) on 64-bit Slackware.

In the past, VirtualBox was one of the reasons why you had to have multilib version, but these days this is not necessary as Oracle already ships 64-bit VirtualBox binaries.

I sit down to write this tutorial for two reasons:

I lost almost two days figuring out why my Slackware upgrade to 14.2 broke VirtualBox installation beyond repair. Online help is pretty much useless - many guides are based purely on luck or steps I find a bit odd.

This tutorial also can be applied on pure Slackware 64-bit system, although I haven't tested it.

Assuming you have working Slackware system, head to VirtualBox for Linux Hosts and choose All distributions (built on EL5 and therefore do not require recent system libraries) , AMD64 version.

After you downloaded installer, first take some preparation steps:

Make sure you have installed kernel source (located in /usr/src/linux-X.X.X, where X.X.X is your running kernel version). Copy /boot/config-type-X.X.X to /usr/src/linux-X.X.X/.config. type is your running kernel type and Slackware comes with either generic or huge kernels. Do not skip this step, since Slackware ships kernel source with 32-bit configuration. Inside kernel source folder (/usr/src/linux-X.X.X/) type:

$ make prepare && make modules_prepare

This should create proper kernel configuration for 64-bit system and setup tools for building modules.

Now you can run VirtualBox installer. If installer fails, it will write detail report in /var/log/vbox-install.log and if you happen to have errors like this:

... /tmp/vbox.0/include/iprt/types.h:231:9: error: unknown type name ‘__uint128_t’ typedef __uint128_t uint128_t; ^ In file included from /tmp/vbox.0/include/VBox/types.h:30:0, from /tmp/vbox.0/SUPDrvInternal.h:35, from /tmp/vbox.0/SUPDrv.c:33: /tmp/vbox.0/include/iprt/types.h:231:9: error: unknown type name ‘__uint128_t’ typedef __uint128_t uint128_t; ^ ...

it means you haven't done step 2 properly. __uint128_t type is not recognized by gcc on 32-bit platforms and your kernel configuration somehow assumes you are on that platform.

This should be it, short and sweet.