web-dev-qa-db-ja.com

VirtualBoxをインストールするためにCentOSカーネルソースを取得する方法

TL; DR:実行中のカーネルバージョンは、VirtualBoxがインストールしようとしたときに検出したカーネルソースよりも古いものでした。ソースを自分で作成する必要はありません。最終的な解決策は、実際に新しいバージョンのカーネルソースを削除し、uname -rにある一致するバージョンをすべてyumにインストールすることでした。

歴史:

新しいCentOSサーバーにVirtualBox-4.2をインストールしようとすると、次のようになりました。

カーネル2.6.32-358.6.2.el6.x86_64のカーネルヘッダーは、/ lib/modules/2.6.32-358.6.2.el6.x86_64/buildまたは/lib/modules/2.6.32-358.6にありません。 2.el6.x86_64/source。

したがって、CentOSの指示に従うと カーネルソースが必要です ソースを取得しようとしましたが、~/rpmbuild/SOURCES/kernel-2.6.32-358.6.2.el6linux-xおよびVanilla-xの2つのフォルダーがあります。

VirtualBoxを再度インストールしようとしましたが、カーネルソースが見つからないというエラーが発生したため、次のシンボリックリンクも設定する必要がありました。

/lib/modules/2.6.32-358.6.2.el6.x86_64/build-> /usr/src/kernels/2.6.32-358.6.2.el6.x86_64 /usr/src/kernels/2.6.32-358.6 .2.el6.x86_64-> /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6

しかし、VirtualBoxをインストールしようとすると、makeを実行する必要があるというエラーが表示されます。

/ var/log/vbox-install.log

Uninstalling modules from DKMS
Attempting to install using DKMS

Creating symlink /var/lib/dkms/vboxhost/4.2.18/source ->
                 /usr/src/vboxhost-4.2.18

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area...
make KERNELRELEASE=2.6.32-358.6.2.el6.x86_64 -C /lib/modules/2.6.32-358.6.2.el6.x86_64/build M=/var/lib/dkms/vboxhost/4.2.18/build...(bad exit status: 2)
Failed to install using DKMS, attempting to install without
make KBUILD_VERBOSE=1 SUBDIRS=/tmp/vbox.0 SRCROOT=/tmp/vbox.0 CONFIG_MODULE_SIG= -C /lib/modules/2.6.32-358.6.2.el6.x86_64/build modules
test -e include/linux/autoconf.h -a -e include/config/auto.conf || (            \
        echo;                                                           \
        echo "  ERROR: Kernel configuration is invalid.";               \
        echo "         include/linux/autoconf.h or include/config/auto.conf are missing.";      \
        echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";  \
        echo;                                                           \
        /bin/false)
mkdir -p /tmp/vbox.0/.tmp_versions ; rm -f /tmp/vbox.0/.tmp_versions/*

  WARNING: Symbol version dump /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Module.symvers
           is missing; modules will have no dependencies and modversions.

make -f scripts/Makefile.build obj=/tmp/vbox.0
  gcc -Wp,-MD,/tmp/vbox.0/linux/.SUPDrv-linux.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/4.4.7/include -Iinclude  -I/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include -include include/linux/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -fno-stack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack -include /tmp/vbox.0/include/VBox/SUPDrvMangling.h -I/lib/modules/2.6.32-358.6.2.el6.x86_64/build/include -I/tmp/vbox.0/ -I/tmp/vbox.0/include -I/tmp/vbox.0/r0drv/linux -I/tmp/vbox.0/vboxdrv/ -I/tmp/vbox.0/vboxdrv/include -I/tmp/vbox.0/vboxdrv/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DRT_WITH_VBOX -DVBOX_WITH_HARDENING -DCONFIG_VBOXDRV_AS_MISC -DRT_Arch_AMD64 -DVBOX_WITH_64_BITS_GUESTS  -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(SUPDrv_linux)"  -D"KBUILD_MODNAME=KBUILD_STR(vboxdrv)"  -c -o /tmp/vbox.0/linux/SUPDrv-linux.o /tmp/vbox.0/linux/SUPDrv-linux.c
In file included from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/unistd.h:5,
                 from include/linux/unistd.h:7,
                 from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/seccomp_64.h:4,
                 from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/seccomp.h:4,
                 from include/linux/seccomp.h:8,
                 from include/linux/sched.h:80,
                 from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:92,
                 from /tmp/vbox.0/linux/SUPDrv-linux.c:32:
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/unistd_64.h:719:29: error: asm/asm-offsets.h: No such file or directory
make[2]: *** [/tmp/vbox.0/linux/SUPDrv-linux.o] Error 1
make[1]: *** [_module_/tmp/vbox.0] Error 2
make: *** [vboxdrv] Error 2

1)これらのmakeコマンドをどこで実行するのか正確にはわかりません
2)各BUILD/kernel-x/Vanilla&linuxフォルダーでコマンドを実行しようとしましたが、Vanillaフォルダーで実行するとエラーが発生しました。

[dirt@loki kernel-2.6.32-358.6.2.el6]$ cd linux-2.6.32-358.6.2.el6.x86_64/
[dirt@loki linux-2.6.32-358.6.2.el6.x86_64]$ make oldconfig && make prepare
scripts/kconfig/conf -o Arch/x86/Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf -s Arch/x86/Kconfig
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-x86
  CALL    scripts/checksyscalls.sh
[dirt@loki linux-2.6.32-358.6.2.el6.x86_64]$ cd ../Vanilla-2.6.32-358.6.2.el6/
[dirt@loki Vanilla-2.6.32-358.6.2.el6]$ make oldconfig && make prepare
scripts/kconfig/conf -o Arch/x86/Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf -s Arch/x86/Kconfig
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-x86
  CC      Arch/x86/kernel/asm-offsets.s
In file included from include/linux/fs.h:424,
                 from include/trace/events/kmem.h:8,
                 from include/linux/kmemtrace.h:12,
                 from include/linux/slub_def.h:13,
                 from include/linux/slab.h:162,
                 from include/linux/percpu.h:5,
                 from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:4,
                 from include/linux/module.h:20,
                 from include/linux/crypto.h:21,
                 from Arch/x86/kernel/asm-offsets_64.c:8,
                 from Arch/x86/kernel/asm-offsets.c:4:
include/linux/percpu-rwsem.h:11: error: expected specifier-qualifier-list before 'local_t'
include/linux/percpu-rwsem.h: In function 'percpu_down_read':
include/linux/percpu-rwsem.h:19: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:21: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:23: error: implicit declaration of function 'local_inc'
include/linux/percpu-rwsem.h:23: error: implicit declaration of function 'this_cpu_ptr'
include/linux/percpu-rwsem.h:23: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:25: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:29: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: In function 'percpu_up_read':
include/linux/percpu-rwsem.h:49: error: implicit declaration of function 'local_dec'
include/linux/percpu-rwsem.h:49: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: At top level:
include/linux/percpu-rwsem.h:53: error: expected ')' before '*' token
include/linux/percpu-rwsem.h: In function 'percpu_down_write':
include/linux/percpu-rwsem.h:66: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h:67: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:69: error: implicit declaration of function '__percpu_count'
include/linux/percpu-rwsem.h:69: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h: In function 'percpu_up_write':
include/linux/percpu-rwsem.h:76: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:77: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h: In function 'percpu_init_rwsem':
include/linux/percpu-rwsem.h:83: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:83: error: implicit declaration of function 'alloc_percpu'
include/linux/percpu-rwsem.h:83: error: 'local_t' undeclared (first use in this function)
include/linux/percpu-rwsem.h:83: error: (Each undeclared identifier is reported only once
include/linux/percpu-rwsem.h:83: error: for each function it appears in.)
include/linux/percpu-rwsem.h:84: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:87: error: implicit declaration of function 'local_set'
include/linux/percpu-rwsem.h:87: error: implicit declaration of function 'per_cpu_ptr'
include/linux/percpu-rwsem.h:87: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:88: error: 'struct percpu_rw_semaphore' has no member named 'locked'
include/linux/percpu-rwsem.h:89: error: 'struct percpu_rw_semaphore' has no member named 'mtx'
include/linux/percpu-rwsem.h: In function 'percpu_free_rwsem':
include/linux/percpu-rwsem.h:95: error: implicit declaration of function 'free_percpu'
include/linux/percpu-rwsem.h:95: error: 'struct percpu_rw_semaphore' has no member named 'counters'
include/linux/percpu-rwsem.h:96: error: 'struct percpu_rw_semaphore' has no member named 'counters'
cc1: warnings being treated as errors
In file included from /home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:4,
                 from include/linux/module.h:20,
                 from include/linux/crypto.h:21,
                 from Arch/x86/kernel/asm-offsets_64.c:8,
                 from Arch/x86/kernel/asm-offsets.c:4:
include/linux/percpu.h: At top level:
include/linux/percpu.h:168: error: conflicting types for 'free_percpu'
include/linux/percpu-rwsem.h:95: note: previous implicit declaration of 'free_percpu' was here
In file included from include/linux/module.h:20,
                 from include/linux/crypto.h:21,
                 from Arch/x86/kernel/asm-offsets_64.c:8,
                 from Arch/x86/kernel/asm-offsets.c:4:
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:19: error: conflicting types for 'local_inc'
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:19: error: static declaration of 'local_inc' follows non-static declaration
include/linux/percpu-rwsem.h:23: note: previous implicit declaration of 'local_inc' was here
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:25: error: conflicting types for 'local_dec'
/home/dirt/rpmbuild/BUILD/kernel-2.6.32-358.6.2.el6/Vanilla-2.6.32-358.6.2.el6/Arch/x86/include/asm/local.h:25: error: static declaration of 'local_dec' follows non-static declaration
include/linux/percpu-rwsem.h:49: note: previous implicit declaration of 'local_dec' was here
make[1]: *** [Arch/x86/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2
3
Brock Hensley

反対票のおかげで、私はこれを理解し、プロセスをはるかに簡単にすることができました。手動でソースを作成する必要はありません。

(私にとっての)問題は、新しいバージョンのカーネル/ヘッダーがインストールされていて、実行中のカーネルと一致させるために必要な古いバージョンをインストールする前に、それらを削除する必要があったことでした。

最初に18.1を削除します(削除する必要があるのは「ヘッダー」だけです。「開発者」は新しいバージョンと古いバージョンを並べて使用できます):

Sudo yum remove kernel-headers-2.6.32-358.18.1.el6.x86_64

次に6.2をインストールします。

Sudo yum install kernel-headers-2.6.32-358.6.2.el6.x86_64
Sudo yum install kernel-devel-2.6.32-358.6.2.el6.x86_64

これで、VirtualBoxをインストールすると、すべてがうまくいきます。

5
Brock Hensley