如何将 Nvidia 驱动程序安装程序转换为 deb?

如何将 Nvidia 驱动程序安装程序转换为 deb?

时不时地,我就会想试用一下 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 在内的完整描述,请参阅这个答案

相关内容