mdevctl用来管理nVidia vgpu超赞,但官方不支持使用centos7。因此我写一篇教程讲讲怎么样才能在centos7使用mdevctl


目前最高可编译rpm版本是v1.2.0,能用就行,出问题再想办法更新到更高版本.

更新git

centos7默认的git版本太低,不适合编译:

yum install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
yum install git

安装基础编译环境

注意这里用的gcc版本需要和当前内核gcc版本一致,不然后面make install会报错的

$ cat /proc/version 
Linux version 3.10.0-1160.108.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Jan 25 16:17:31 UTC 2024
$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
 
# 安装所需环境
$ sudo yum install epel-release
$ sudo yum install centos-release-scl yum-utils
$ sudo yum install gcc gcc-c++ make openssl-devel rpm-build

准备rust的环境

推荐使用epel的方式进行安装,手动准备对不上工具链和rust的版本

手动准备

安装 rust 编译器

# 安装rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

现在让 rust 二进制文件在你的 $PATH 中可用

source "$HOME/.cargo/env"

epel安装

这个最高可编译rpm版本是v1.2.0

# 安装工具链
yum install rust-toolset

旧版本工具集

这个工具集的rust版本太老了,连v1.1.0版本的mdevctl都没法编译,千万别用这个版本工具集
来源:

https://www.softwarecollections.org/en/scls/rhscl/rust-toolset-7/

通过以下步骤实现

# 启用源
$ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms

# 安装工具集
$ sudo yum install rust-toolset-7

# 启用工具集
$ scl enable rust-toolset-7 bash
$ rustc --version

# 查看安装的版本
$ sudo yum list rust-toolset-7\*

安装rst2man

需要安装python-docutils包,这里面带了rst2man

yum install python-docutils

使用

which rst2man

确认系统内安装了rst2man

编译安装

git clone https://github.com/mdevctl/mdevctl
# 如果需要切换tag
cd mdevctl/
git checkout v1.2.0

进入mdevctl目录并编译库。
一定需要科学上网

cd mdevctl/
# 查看rust版本
# epel-release安装的rust-toolset只适合安装mdevctl 1.2.0版本
rustc --version
# 清理残留环境
cargo clean
# 如有需要清理掉上次编译的锁文件
rm Cargo.lock
# 编译
cargo build --release
# 直接安装到本系统
make install

编译完成的二进制文件在/root/mdevctl/target/release

编译rpm包

编译成rpm包的时候才需要.

$ yum install python3-docutils-doc

在上面进行了基础的编译安装正常后,需要对文件进行部分修改如下所示:

修改mdevctl.spec

$ diff mdevctl.spec mdevctl.spec.in 
1,2c1
< # DO NOT EDIT
< # This file is automatically generated from "mdevctl.spec.in"
---
> @@generated_notice@@
9c8
< %if ! (0%{?fedora} >= 34 || 0%{?rhel} >= 7)
---
> %if ! (0%{?fedora} >= 34 || 0%{?rhel} >= 8)
18c17
< Version:        1.2.0
---
> Version:        @@mdevctl_version@@
26c25
< %if 0%{?rhel} >= 7
---
> %if 0%{?rhel} >= 8
30c29
< # ExclusiveArch:  %{rust_arches}
---
> ExclusiveArch:  %{rust_arches}

修改Makefile

即修改成--define "_builddir $(PWD)/usr/src/debug,以解决Dest dir longer than base dir is not supported报错.
如下所示:

srpm: mdevctl.spec archive
        rpmbuild -bs --define "_sourcedir $(PWD)/target/package" \
                --define "_specdir $(PWD)" \
                --define "_builddir $(PWD)/usr/src/debug" \
                --define "_srcrpmdir $(PWD)" \
                --define "_rpmdir $(PWD)" $<

rpm: mdevctl.spec archive
        rpmbuild -bb --define "_sourcedir $(PWD)/target/package" \
                --define "_specdir $(PWD)" \
                --define "_builddir $(PWD)/usr/src/debug" \
                --define "_srcrpmdir $(PWD)" \
                --define "_rpmdir $(PWD)" $<

编译

然后就可以生成rpm文件了

make rpm

文件储存位置:./mdevctl/x86_64/

rpm文件

如果实在是编译不出来,可以用我备份的文件就行:

链接:https://pan.baidu.com/s/1Zt6GsLXikRIGFifqPcx6Og?pwd=ddv7 
提取码:ddv7 

从源安装

理论上执行命令就行了。

cargo install mdevctl

但从源安装的没法用,会报错:

mdevctl Error: No such file or directory (os error 2)

测试

mdevctl types
mdevctl list -d

参考:
Unable to build on RHEL 7.9
Fix "Only dest dir longer than base dir not supported"

最后修改:2024 年 03 月 03 日
如果觉得我的文章对你有用,请随意赞赏