1. 概要
Slackware のシステムをアップグレード後、VirtualBox GuestAdditions が動作しなくなりました。
再インストールしようとすると、下記のエラーが
ERROR: Kernel configuration is invalid.
include/generated/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
調べてみると原因となることは2つあるようで、下記ようなサイトでは
「centos に Virtual Box インストール | 忘れっぽいけんITメモ」
kernel と kernel-header のバージョンが異なるということだそうな・・・。
もう一つの原因は、下記のサイトに書いてあります。
「Ubuntu 16.04 LTSで、Linux カーネルを 4.4.0-143-generic に上げたら、VirtualBox が使えなくなった件 - Hejda の見る夢」
まぁ、どちらも記事はホストとしてインストールする場合の記事ですが。
おそらくは、ゲストで使用時も同様のことが言えるのでは??
2. とりあえず、バージョンアップ
わたしの場合、「VirtualBox GuestAdditions」でしたので、ホスト側の VirtualBox のバージョンをあげて「VirtualBox GuestAdditions」をインストールしなおすことで対応できるかもしれません。
ただし、ゲストがえらく重くなってしまって、ほぼ動かないので Tera Term でログインして、端末から
$ mount /dev/cdrom /mnt
$ /mnt/VBoxLinuxAdditions.run
$ umount /mnt
でまぁ、同じ結果になっちまったのです。
3. モジュールのバージョン確認
1番目の参考サイトによれば、ゲストのモジュールが、ゲスト内で不一致を起こしていることがあるようです。
本当は、これを先にやるべきだったかも(まぁ、VirtualBox のメジャーバージョンをあげるいいきっかけにはなりました)。
ゲストが Slackware ですので、いささかコマンドが異なりますのよ。
$ slackpkg search kernel
Looking for kernel in package list. Please wait... DONE
The list below shows all packages with name matching "kernel".
[ Status ] [ Repository ] [ Package ]
installed patches kernel-firmware-20190118_a8b75ca-noarch-1
installed patches kernel-generic-4.4.172-x86_64-1
installed patches kernel-headers-4.4.172-x86-1
installed patches kernel-huge-4.4.172-x86_64-1
installed patches kernel-modules-4.4.172-x86_64-1
installed patches kernel-source-4.4.172-noarch-1
uninstalled testing kernel-module-ecryptfs-4.4.14-x86_64-1
uninstalled(masked) slackware64 kernel-firmware-20160628git-noarch-1
uninstalled(masked) slackware64 kernel-generic-4.4.14-x86_64-1
uninstalled(masked) slackware64 kernel-headers-4.4.14-x86-1
uninstalled(masked) slackware64 kernel-huge-4.4.14-x86_64-1
uninstalled(masked) slackware64 kernel-modules-4.4.14-x86_64-1
uninstalled(masked) slackware64 kernel-source-4.4.14-noarch-1
You can search specific files using "slackpkg file-search file".
そもそも、kernel-devel なんてのはないし、installed は基本的に不一致を起こしていない・・・。
やな感じねぇ。
4. いじってみる(できるのか?)
いよいよ、第2の参考サイトにはいるわけです。
第2の参考サイトのさらにリンク先「Kernel 4.4.172 Breaking Some Application | SlackBlogs」を読んで(先に読めばよかった・・・)納得。
Linux Kernel 4.4.172 には、対応していないのね。
しかも、これって Slackware の記事じゃん。
えっと。
ここから、手探りです。
どうも VirtualBox GuestAddtion は boot 時に kernel のバージョンを読んで不一致があれば、make しなおしているように見えるので・・・。
該当のソースと思われるものが
/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c
なのです。こいつの3か所
# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)
を全部
# if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168)
にします。
(どうせ、失敗したら、インストールし直せばよいので、わたしはバックアップをとりません)
再起動したら、「/tmp/vbox.0/」でなく「/tmp/vbox.1/」ができて、そこで make してやがる。
どこから、湧いてくるんだろう。
仕方ないので
cd /tmp/vbox.0/
make
make install
しましたら、時間はかかりましたが、インストール自体はできたようです。
ただし、「kernel 4.4.172」は、わたしの環境では「Slackware」自体が安定しないので、「Slackware」の「kernel」を元に戻すことにしたのでした。