从源代码构建时预安装

从源代码构建时预安装

尝试为 32 位 Centos 7 构建 vmware 工具。期间出现错误./configure

在 /lib/modules/3.10.0-693.2.2.el7.centos.plus.i686 下找不到包含目录

我想我应该安装一些 rpm 才能获得这个目录?我什至发现我需要 kernel-plus-3.10.0-693.2.2.el7.centos.plus.src.rpm。但我也认为它只是其他更通用的软件包的一部分,我将需要安装更多的 RPM。

当我收到此类错误时,我应该遵循什么逻辑才能知道要安装什么?我的情况下那个包裹是什么?

更新#1

$ gcc --version
...4.8.5 20150323

$ cat /proc/version
Linux version 3,10,0 ...
gcc version 4.8.5 20150323

命令

$ sudo yum install kernel-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package kernel-devel-3.10.0-693.21.1.el7.centos.plus.i686 already installed and latest version
Nothing to do

命令

$ ls /lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/
build              modules.builtin      modules.modesetting  source
extra              modules.builtin.bin  modules.networking   updates
kernel             modules.dep          modules.order        weak-updates
modules.alias      modules.dep.bin      modules.softdep
modules.alias.bin  modules.devname      modules.symbols
modules.block      modules.drm          modules.symbols.bin

答案1

您不应该安装带有.src.rpm后缀的软件包。在自己的系统上构建 RPM 软件包时需要具有此后缀的软件包。

VMware 工具(也称为 VBox 工具)为您的内核构建模块。因此它需要工具:编译器、内核头文件和构建环境(具有特定预定义宏的 Makefile 和几个脚本)。

编译器按包提供gcc-<version>。您应该确保运行内核(cat /proc/version=> gcc version)的编译器版本与安装的编译器包gcc-<version>相同。

在 Centos 7kernel-devel-$(uname -r)软件包中提供了带有构建环境的内核头文件。

这就是构建 VMware 工具(或 VBox 工具)所需的全部内容。


更新:

关于open-vm-tools在 Centos 7 中并构建它 Centos 7。Centos 7 已经open-vm-tools在存储库中了。它包含 2 个 systemd 服务(vgauthdvmtoolsd)、vmware-<something>程序和文档。

我下载了open-vm-tools( ) 以在文件yumdownloader --source open-vm-tools中查看它是如何构建的。spec%build宏中包含以下指令:

%configure \
    --without-kernel-modules \
    --enable-xmlsec1 \
    --disable-static

所以包完全不提供模块。模块在哪里?在github open-vm-tools README.md写道:

Linux 发行版提供的 open-vm-tools 软件包不包含 Linux 驱动程序因为 Linux 驱动程序是作为 Linux 内核本身的一部分提供的

这是真的。我在我的 Centos 7 (x86_64) 上检查了它:

find /lib/modules/$(uname -r) -name 'vm*'
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/crypto/vmac.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/gpu/drm/vmwgfx
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_balloon.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_vmci
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/net/vmxnet3
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/net/vmxnet3/vmxnet3.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/scsi/vmw_pvscsi.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport_common.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko.xz

我下载了你的内核版本(3.10.0-693.2.2.el7.centos.plus.i686)并检查其内容:

$ ls kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm
kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm
$ rpm2cpio kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm | cpio -idm # content will be extracted to boot and lib directories in this directory
$ find ./lib/ -name 'vm*'
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/crypto/vmac.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/gpu/drm/vmwgfx
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_balloon.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_vmci
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/net/vmxnet3
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/net/vmxnet3/vmxnet3.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/scsi/vmw_pvscsi.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_virtio_transport.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_virtio_transport_common.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko

所以。模块和工具由存储库提供。您可以重建工具,但使用--without-kernel-modules.如果你想重建模块(我怀疑这是必要的)你应该重建内核包。详细说明见Centos 维基


更新2:

服务设置。成功安装编译工具后,需要创建 2 个服务文件,其中/usr/lib/systemd/system包含以下内容:

vmtoolsd.服务:

[Unit]
Description=Service for virtual machines hosted on VMware
Documentation=http://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware
Requires=vgauthd.service
After=vgauthd.service

[Service]
ExecStart=/usr/local/bin/vmtoolsd
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target
Also=vgauthd.service

vgauthd.服务:

[Unit]
Description=VGAuth Service for open-vm-tools
Documentation=http://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware
PartOf=vmtoolsd.service

[Service]
ExecStart=/usr/local/bin/VGAuthService -s
TimeoutStopSec=5
PrivateTmp=true

[Install]
RequiredBy=vmtoolsd.service

当它们被创建时,您需要使用 .reload 模块依赖项systemctd daemon-reload。之后,您可以通过调用systemctl start vmtoolsd或来启动服务systemctl start vgauthd

相关内容