我需要我的显卡驱动程序支持 OpenGL 4.5,据我所知 Mesa 实际上能够运行它。
glxinfo
给了我这个:
$ glxinfo | grep "OpenGL"
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
OpenGL core profile version string: 3.3 (Core Profile) Mesa 13.0.6
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 13.0.6
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 13.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:
所以这意味着它只能运行OpenGL 3.0。所以我尝试更新它,但遇到了几个问题:
如果我尝试通过apt
ie更新它sudo apt-get upgrade libgl1-mesa-dri -t testing
,它就会损坏:
$ sudo apt-get upgrade libgl1-mesa-dri -t testing
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
libsnmp30 : Depends: libsensors4 (>= 1:3.0.0) but it is not going to be installed
mesa-va-drivers : Depends: libsensors4 (>= 1:3.0.0) but it is not going to be installed
mesa-va-drivers:i386 : Depends: libsensors4:i386 (>= 1:3.0.0) but it is not going to be installed
E: Broken packages
好的,但是:
$ apt-cache policy libsensors4
libsensors4:
Installed: 1:3.4.0-4
Candidate: 1:3.4.0-4
Version table:
*** 1:3.4.0-4 900
900 http://ftp.ru.debian.org/debian stretch/main amd64 Packages
100 /var/lib/dpkg/status
所以这取决于lib版本>=1:3.0.0,但我有版本1:3.4.0-4,这真的很奇怪。
一般来说,我不明白我应该如何升级Mesa。如果使用apt
,我不知道应该更新哪些包。如果来自源头,我不知道它将如何交互apt
以及是否不会通过更新恢复。
我使用的是 Debian 9 Stretch,显卡是 Intel HD Graphics 5000。
答案1
不要尝试直接在稳定版上安装测试!或者你最终会得到一个弗兰肯Debian(充其量)或者会由于不切实际的依赖关系而丢失大量包。
好消息是这些更新的软件包可用在stretch-backports
。 Debian 的台面在测试中进行了一些包装更改,因此在拉伸向后移植中也进行了一些更改,与供应商中立的 GL 调度库使这变得非同小可。另外,由于您将多架构与amd64
和i386
包一起使用,这些软件包必须同步升级否则您会遇到一些您所见过的错误。
因此,我无法说出如何仅升级台面的确切命令,而不升级所有内容(您应该不是do:stretch-backports
没有安全支持)但我会给出一个过程。
首先请关注Debian 的说明关于如何stretch-backports
正确添加。我将在这里做一个简单的总结:
# echo 'deb http://deb.debian.org/debian/ stretch-backports main contrib non-free' >> /etc/apt/sources.list.d/stretch-backports.list
# apt-get update
如果您添加了buster/testing/sid 条目,请务必将其删除。
某些软件包可能已消失(例如libgles1-mesa
不再提供),而其他软件包则出现。您必须升级所有涉及的软件包一单个 apt-get 命令,因此您首先必须查看最相关的软件包及其当前版本,然后让依赖项解析器选择缺少的部分(例如:)libdrm2
。您应该手动执行操作,而不是在脚本中执行操作,因为您必须检查是否没有发生任何不良情况(例如apt-get
提出删除 100 个包)。所以像这样:
dpkg -l | fgrep 13.0.6-1+b2
甚至:
dpkg -l | awk '/^.i/ && $3 == "13.0.6-1+b2" { print $2 }' | xargs
获取包列表的主要部分。请注意,对于已安装的多架构软件包,您必须提供软件包amd64
(默认情况下,因此不需要额外的软件包:amd64
,但您可以将其从剪切/粘贴中保留)和再次如果在上一个命令中也找到了相同的i386
包(使用:i386
附加到包名称)dpkg
。所以最终的安装命令可能应该是这样的:
apt-get -t stretch-backports install libgl1-mesa-dri:amd64 libgl1-mesa-dri:i386 mesa-opencl-icd:amd64 mesa-opencl-icd:i386 ...
你明白了。现在检查数量即将被删除提供的套餐。如果有一些与台面相关的软件包需要被删除(例如:)libgles1-mesa
,那很好,如果其中大多数或许多不相关的软件包被提议删除,则中止并思考可能会丢失什么。当然,还应该提供许多其他内容作为升级(例如:libdrm2
和libdrm2:i386
)。这些可能仍然会因为多拱门而造成麻烦,因此如果apt-get
不够聪明,您可能必须将它们手动添加两次(每个拱门一次)到不断增长的单行列表中。
正如 @Stephen Kitt 所建议的,其他有用和相关的软件包,处理硬件的改进使用,包括图形支持,也可以在拉伸向后移植中使用,并且可能也应该升级。他们之中:
linux-image-amd64
目前将拉动linux-image-4.19.0-0.bpo.2-amd64
- 各种固件包(无论如何,当前安装的所有固件包都应该升级),例如
firmware-misc-nonfree
可能包括升级的图形支持,并且无论如何可能必须升级为较新内核的(可能是隐藏的)依赖项以获得最佳结果。
答案2
在这次活动中,梅萨公司。不在向后移植中,您可以从源代码构建:
施鲁特设置
主机设置:
sudo apt install --yes schroot debootstrap
为 schroot 建立目录:
sudo mkdir -p /srv/chroot/debian32 sudo mkdir -p /srv/chroot/debian64
为 schroot 创建并填充配置文件:
# /etc/schroot/chroot.d/debian32.conf [debian32] description=Debian i386 directory=/srv/chroot/debian32 personality=linux32 type=directory users=yourusername # /etc/schroot/chroot.d/debian64.conf [debian64] description=Debian amd64 directory=/srv/chroot/debian64 personality=linux type=directory users=yourusername
添加
/usr/local
以便/etc/schroot/default/fstab
schroot 内的构建脚本可以在那里安装文件:/usr/local /usr/local none rw,bind 0 0
使用 Debian 安装填充 schroot 目录:
# install debian in schroots sudo debootstrap --arch=i386 $(lsb_release --short --codename) /srv/chroot/debian32 sudo debootstrap --arch=amd64 $(lsb_release --short --codename) /srv/chroot/debian64 # add deb-src lines to sources.list echo "deb-src http://deb.debian.org/debian $(lsb_release --short --codename) main" | sudo tee --append /srv/chroot/debian32/etc/apt/sources.list echo "deb-src http://deb.debian.org/debian $(lsb_release --short --codename) main" | sudo tee --append /srv/chroot/debian64/etc/apt/sources.list # install sudo in schroots: sudo schroot -c debian32 -- apt install --yes sudo sudo schroot -c debian64 -- apt install --yes sudo # update package lists: sudo schroot -c debian32 -- apt update sudo schroot -c debian64 -- apt update
汇编
在主机系统上,克隆源存储库:
# set source directory
export SRC=$HOME/mesa-sources
# install git
sudo apt install --yes git
# these branches/tags Work For Me™ on Debian 11 for a RX 6700 XT.
mkdir -p $SRC && \
cd $SRC && \
git clone --branch 1.20.0 https://gitlab.freedesktop.org/wayland/wayland.git && \
git clone --branch 1.25 https://gitlab.freedesktop.org/wayland/wayland-protocols.git && \
git clone --branch libdrm-2.4.110 https://gitlab.freedesktop.org/mesa/drm.git && \
git clone --branch mesa-22.0.2 https://gitlab.freedesktop.org/mesa/mesa.git && \
git clone --branch 20220411 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git && \
git clone --branch v5.17.4 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git $SRC/linux-src/linux
# grab host kernel config
cp /boot/config-$(uname -r) $SRC/linux-src/linux/.config
schroot -c debian32
然后用/依次输入每个 schrootschroot -c debian64
并执行以下操作:
安装构建依赖项:
sudo apt build-dep --yes wayland wayland-protocols libdrm mesa linux && \ sudo apt install --yes cmake meson
设置环境变量:
export SRC=$HOME/mesa-sources export PREFIX=/usr/local
安装
wayland
:cd $SRC/wayland && \ meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release \ -D documentation=false && \ ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
安装
wayland-protocols
:cd $SRC/wayland-protocols && \ meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release && \ ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
安装
drm
:cd $SRC/drm && \ meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release && \ ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
安装
mesa
:cd $SRC/mesa && \ meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release \ -D gallium-vdpau=enabled \ -D shared-llvm=disabled \ -D vulkan-layers=device-select,intel-nullhw,overlay && \ ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
(仅限 64 位 schroot)编译内核(集成 AMD 和 Intel GPU 固件):
# collect firmware cd $SRC/linux-firmware && \ ./copy-firmware.sh $SRC/linux-firmware-bin # compile linux & generate Debian packages cd $SRC/linux-src/linux && \ ./scripts/config --set-val DEBUG_INFO n && \ ./scripts/config --set-str EXTRA_FIRMWARE_DIR $SRC/linux-firmware-bin && \ ./scripts/config --set-str EXTRA_FIRMWARE "$(cd $SRC/linux-firmware-bin; find * -type f | grep -E "amdgpu/|i915/" | paste -sd " " -)" && \ yes "" | make oldconfig && \ make -j$(nproc) bindeb-pkg
编译时(几乎)全部固件是技术上可行我建议反对。
在主机上安装软件包
返回主机系统,执行以下操作:
主机设置:
sudo dpkg --add-architecture i386 && \ sudo apt update && \ sudo apt install --yes apt-file gcc-multilib && \ sudo apt-file update
扫描
/usr/local
缺少的库并安装提供它们的软件包:# 64-bit sudo apt install --yes $(\ find /usr/local/lib/x86_64-linux-gnu/ -type f -exec ldd {} \; | \ grep "not found" | \ awk '{print "x86_64-linux-gnu/" $1 "$"}' | \ sort | uniq | \ apt-file --regexp --from-file search - | \ awk -v ORS=" " -F ":" '{print $1}' ) # 32-bit sudo apt install --yes $(\ find /usr/local/lib/i386-linux-gnu/ -type f -exec ldd {} \; | \ grep "not found" | \ awk '{print "i386-linux-gnu/" $1 "$"}' | \ sort | uniq | \ apt-file --architecture i386 --regexp --from-file search - | \ awk -v ORS=" " -F ":" '{print $1 ":i386"}' )
安装内核包:
# set source directory export SRC=$HOME/mesa-sources && \ sudo dpkg -i $SRC/linux-src/linux-headers-*.deb && \ sudo dpkg -i $SRC/linux-src/linux-image-*.deb && \ sudo dpkg -i $SRC/linux-src/linux-libc-dev*.deb
系统设置
添加
profile.d
脚本以确保(大多数)shell 和 shell 类型使用新的 DRI 驱动程序:# /etc/profile.d/local-mesa.sh export LIBGL_DRIVERS_PATH=/usr/local/lib/x86_64-linux-gnu/dri:/usr/local/lib/i386-linux-gnu/dri
添加 systemd 配置覆盖,以便当 KDE 的 SDDM 启动 Xorg AIGLX 时也使用新的 DRI 驱动程序:
# /etc/systemd/system/sddm.service.d/local-mesa.conf [Service] Environment="LIBGL_DRIVERS_PATH=/usr/local/lib/x86_64-linux-gnu/dri:/usr/local/lib/i386-linux-gnu/dri"
(其他桌面环境的Greeters需要相应目录中的相同配置文件
service.d
)(可选)删除旧的 Mesa Vulkan 驱动程序:
sudo apt remove mesa-vulkan-drivers mesa-vulkan-drivers:i386
这可以防止 Vulkan 加载程序获取旧的 Debian 提供的 Vulkan 驱动程序文件(如果有)并可能将其中一个作为“第一个”GPU 返回。
而梅萨做有
MESA_VK_DEVICE_SELECT
环境变量来帮助重新排序设备列表,它只允许您选择要优先考虑的特定 PCI 设备,而不是在多个驱动程序之间进行选择相同的设备。如果您想保留安装的 Debian 提供的 Vulkan 驱动程序并需要在它们之间进行选择,请尝试vk设备选择器。最后,重新启动到:
- 加载新的
amdgpu
内核模块和固件 - 刷新
ldconfig
缓存 - 强制 systemd 加载 SDDM 的新单位覆盖
- 重新启动 Xorg,以便它可以获取新的 DRI 库
- 加载新的
答案3
在这次活动中,梅萨公司。不在向后移植中,您可以自己创建向后移植的包:
设置
设置环境变量:
# point this somewhere convenient, needs ~23 GiB of space export MESA_SRC=$HOME/mesa-backports # it *is* possible to build mesa with bullseye's llvm-toolchain-11, # albeit with a slightly more involved patch for mesa export MESA_PACKAGES="\ wayland \ wayland-protocols \ libdrm \ directx-headers \ llvm-toolchain-14 \ mesa \ firmware-nonfree"
安装根从源头(由于错误#1011348):
sudo apt install curl && \ sudo apt build-dep proot && \ mkdir -p $MESA_SRC && cd $MESA_SRC && \ curl -L "https://github.com/proot-me/proot/archive/refs/tags/v5.3.1.tar.gz" | tar xzf - && \ cd proot-*/ && make -C src loader.elf loader-m32.elf build.h && \ make -C src proot && \ sudo make -C src install
克罗茨
使用设置 i386 和 amd64 chroot毫米德布斯特拉普:
sudo apt install mmdebstrap && \ time \ for ARCH in i386 amd64; do \ mkdir -p $MESA_SRC && cd $MESA_SRC && \ mmdebstrap --mode=proot --format=directory --arch=$ARCH bullseye debian-$ARCH && \ proot -S debian-$ARCH apt update && \ proot -S debian-$ARCH apt install --yes locales eatmydata && \ proot -S debian-$ARCH sh -c 'echo "en_US.UTF-8 UTF-8" > /etc/locale.gen' && \ proot -S debian-$ARCH /usr/sbin/locale-gen && \ proot -S debian-$ARCH eatmydata apt install --yes \ devscripts equivs local-apt-repository && \ proot -S debian-$ARCH mkdir -p /srv/local-apt-repository ; \ done
来源
添加来源为了
unstable
:{ sudo tee /etc/apt/sources.list.d/unstable-sources.list > /dev/null << HEREDOCDELIM deb-src http://deb.debian.org/debian unstable main contrib non-free HEREDOCDELIM } && \ sudo apt update
下载源包和更新变更日志:
for PKG in $MESA_PACKAGES; do \ mkdir -p $MESA_SRC/$PKG && cd $MESA_SRC/$PKG && \ apt source $PKG/unstable && \ cd $MESA_SRC/$PKG/$PKG-*/ && \ DEBFULLNAME="Example User" \ DEBEMAIL="[email protected]" \ dch --bpo " " ; \ done
应用补丁:
cd $MESA_SRC/firmware-nonfree/firmware-nonfree-*/ && \ { base64 -d << 'HEREDOCDELIM' LS0tIGEvZGViaWFuL3J1bGVzCisrKyBiL2RlYmlhbi9ydWxlcwpAQCAtMzgsMTQgKzM4LDYgQEAK IAlta2RpciAtcCAkKEBEKQogCXByaW50ZiA+JEAgJ1NvdXJjZTogJXNcblZlcnNpb246ICVzXG4n ICQoU09VUkNFKSAkKFZFUlNJT05fU09VUkNFKQogCi1kZWJpYW4vY29udHJvbCBkZWJpYW4vcnVs ZXMuZ2VuOiAkKEdFTkNPTlRST0wpICQoQ09OVFJPTF9GSUxFUykKLWlmZXEgKCQod2lsZGNhcmQg ZGViaWFuL2NvbnRyb2wubWQ1c3VtKSwpCi0JJChNQUtFKSAtZiBkZWJpYW4vcnVsZXMgZGViaWFu L2NvbnRyb2wtcmVhbAotZWxzZQotCW1kNXN1bSAtLWNoZWNrIGRlYmlhbi9jb250cm9sLm1kNXN1 bSAtLXN0YXR1cyB8fCBcCi0JCSQoTUFLRSkgLWYgZGViaWFuL3J1bGVzIGRlYmlhbi9jb250cm9s LXJlYWwKLWVuZGlmCi0KIGRlYmlhbi9jb250cm9sLXJlYWw6ICQoR0VOQ09OVFJPTCkgJChDT05U Uk9MX0ZJTEVTKQogIyBXZSBjdXJyZW50bHkgbmVlZCB0byBydW4gY29weS1maXJtd2FyZS5zaCB0 byBnZXQgYSBjb21wbGV0ZSBsaXN0IG9mCiAjIHN5bWxpbmtzIHRvIGluY2x1ZGUgaW4gcGFja2Fn ZSBkZXNjcmlwdGlvbnMuCg== HEREDOCDELIM } | patch -p1 && \ cd $MESA_SRC/mesa/mesa-*/ && \ { base64 -d << 'HEREDOCDELIM' LS0tIGEvZGViaWFuL2NvbnRyb2wKKysrIGIvZGViaWFuL2NvbnRyb2wKQEAgLTQxNSw3ICs0MTUs NyBAQAogQXJjaGl0ZWN0dXJlOiBhbWQ2NCBhcm02NCBhcm1lbCBhcm1oZiBpMzg2IG1pcHM2NGVs IG1pcHNlbCBwb3dlcnBjIHBwYzY0IHBwYzY0ZWwgczM5MHggc3BhcmM2NAogUHJlLURlcGVuZHM6 ICR7bWlzYzpQcmUtRGVwZW5kc30KIERlcGVuZHM6Ci0gbGliY2xjLTEzLAorIGxpYmNsYy0xNCwK ICBvY2wtaWNkLWxpYm9wZW5jbDEgfCBsaWJvcGVuY2wxLAogICR7c2hsaWJzOkRlcGVuZHN9LAog ICR7bWlzYzpEZXBlbmRzfSwK HEREDOCDELIM } | patch -p1
(对于不透明的情况表示歉意64位基数blobs,非免费固件补丁需要选项卡,但是Markdown 代码块吃掉标签即使你解决了这个问题将包含制表符的文本粘贴到 Bash 提示符中会导致它在尝试制表符完成时消耗制表符:()
建造
构建软件包(在 12 核 Ryzen 5900x 上大约需要 90 分钟):
time \ for ARCH in i386 amd64; do \ for PKG in $MESA_PACKAGES; do \ cd $MESA_SRC/$PKG/$PKG-*/ && \ proot -S $MESA_SRC/debian-$ARCH /usr/lib/local-apt-repository/rebuild && \ proot -S $MESA_SRC/debian-$ARCH apt update && \ PATH=/sbin:/usr/sbin:$PATH \ proot -S $MESA_SRC/debian-$ARCH eatmydata mk-build-deps --install --remove \ --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' && \ DEB_BUILD_OPTIONS="nostrip nocheck nodoc noautodbgsym noddebs" \ DEB_BUILD_PROFILES="nostrip nocheck nodoc noautodbgsym noddebs" \ proot -R $MESA_SRC/debian-$ARCH dpkg-buildpackage --build=binary -us -uc && \ proot -S $MESA_SRC/debian-$ARCH cp ../*.deb /srv/local-apt-repository \ ; done \ ; done
将包复制到本地 apt 存储库软件包仓库(需要约 1 GiB):
sudo apt install local-apt-repository && \ sudo mkdir -p /srv/local-apt-repository && \ for PKG in $MESA_PACKAGES; do \ sudo cp $MESA_SRC/$PKG/*.deb /srv/local-apt-repository/ \ ; done && \ sudo /usr/lib/local-apt-repository/rebuild
升级
升级到新包:
sudo apt update && \ sudo apt upgrade -o Dpkg::Options::="--force-overwrite"
从向后移植安装内核:
{ sudo tee /etc/apt/sources.list.d/bullseye-backports.list > /dev/null << HEREDOCDELIM deb http://deb.debian.org/debian bullseye-backports main HEREDOCDELIM } && \ sudo apt update && \ sudo apt install linux-image-amd64/bullseye-backports
重启