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"
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/205.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。
1 条评论
赞一个