VirtualBox - トラブルシュート - Kernel configuration is invalid.

 
1. 概要
2. とりあえず、バージョンアップ
3. モジュールのバージョン確認
4. いじってみる(できるのか?)

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 を元に戻すことにしたのでした。