![如何将 Nvidia 驱动程序安装程序转换为 deb?](https://linux22.com/image/1038298/%E5%A6%82%E4%BD%95%E5%B0%86%20Nvidia%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%20deb%EF%BC%9F.png)
时不时地,我就会想试用一下 Nvidia 驱动程序的测试版。今天就遇到了这种情况:295.40 版出现了严重的性能问题,我想试试全新的支持 XRandR 的 302.07 版。
我完全可以下载安装程序,删除所有 repo 安装的驱动程序文件并安装新版本,但坦率地说,扭转局面并返回 repo 版本是一件痛苦的事情。这也意味着每次内核升级时我都必须手动重新安装驱动程序。
我们通常给人们的另一个选择是 PPA,但在这种情况下我真的很不耐烦。任何 PPA 都要过几天才能得到这个,但我今天需要尝试一下。我已经在媒体中心手动安装了它,现在我正在盯着我的桌面。
那么,如何获取安装程序(例如NVIDIA-Linux-x86-302.07.run
:)并将其转换为新的nvidia-current
/nvidia-current-updates
包?
另一种询问方式可能是:人们如何打包 Nvidia 驱动程序?
答案1
除非新版本存在结构差异,否则应该可以重新使用当前的包装:
NEWVERSION=302.13
DIR=nvidia-graphics-drivers-"$NEWVERSION".orig/
## Making a new tarball
mkdir $DIR
# Copy in new run files
cp NVIDIA*.run $DIR
tar --owner=root --group=src -caf nvidia-graphics-drivers_"$NEWVERSION".orig.tar.gz $DIR
rm -r $DIR
## Setting up the packaging source
apt-get source nvidia-graphics-drivers
cd nvidia-graphics-drivers*/
# Remove old run files and copy in new
rm NVIDIA*.run
cp ../NVIDIA*.run .
# This version number should ensure it gets replaced by official version...
dch -v $VERSION-1 "my release"; dch -l~mybuild "local build"; dch -r
## Installing build-dependencies
mk-build-deps
sudo dpkg -i nvidia-graphics-drivers-build-deps*.deb; apt-get install -f
## Building
debuild -us -uc
类似这样的事情可能会有效,但还有相当多的混乱,我猜这就是为什么 PPA 包没有立即发布的原因 ;)
答案2
正如 arand 所说,您可以使用现有的源包,前提是它没有发生太大变化。以下命令将下载 .run 文件,检索和调整现有源文件并最终将其打包。
通过安装一些构建依赖项来准备安装:
sudo apt-get build-dep nvidia-graphics-drivers
sudo apt-get install execstack # needed but not included with build-deps
为了做好准备,请设置一些控制正在下载的文件的变量并为其创建一个新目录:
VER=310.19
mkdir nvidia-graphics-drivers-$VER; cd nvidia-graphics-drivers-$VER
NVIDIA-Linux-x86-310.19.run
如果您还没有下载,请下载名为的文件。如果您有一台 64 位机器,您还应该下载名为 64 位的安装程序NVIDIA-Linux-x86_64-310.19-no-compat32.run
:
wget ftp://download.nvidia.com/XFree86/Linux-x86/$VER/NVIDIA-Linux-x86-$VER.run
wget ftp://download.nvidia.com/XFree86/Linux-x86_64/$VER/NVIDIA-Linux-x86_64-$VER-no-compat32.run
现在检索打包文件,“提取”它,更改版本号并在不签名的情况下构建包:
apt-get source --diff-only nvidia-current
gunzip -c *.diff.gz | patch -p1
dch -v $VER-0~local "New upstream release."
现在,在撰写本文时,版本295.40-0ubuntu1.1
未构建 310.19,因为包装已更改。事实证明libXvMCNvidia.*
文件已被删除,因此让我们删除包括 XvMCConfig 在内的那些行:
sed -i '/XvMC/d' debian/{*.links*.in,*.install.in,rules}
构建包:
dpkg-buildpackage -b -uc -us
如果一切顺利,您现在可以使用以下命令安装生成的 deb 文件:
sudo dpkg -i ../nvidia-current_$VER-*.deb; sudo apt-get install -f
(sudo apt-get install -f
如果您之前已经安装了 nvidia-current,则该命令是可选的,并且没有遇到依赖问题)
答案3
这些驱动程序实际上依赖于较新的内核等,因此在这种情况下,您可能无法重新编译 - 有关包括 PPA 在内的完整描述,请参阅这个答案