Debian

如何正確更新 Mesa 驅動程序?

  • May 11, 2022

我需要我的顯卡驅動程序支持 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,即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。

不要嘗試直接在stable上安裝testing!或者你最終會得到一個FrankenDebian(充其量),或者由於不切實際的依賴關係而失去很多包。

好消息是這些更新的軟體包stretch-backports. Debian 的檯面在測試中進行了一些包裝更改,在拉伸反向移植中也有,這與供應商中立的 GL 調度庫有關,這使這變得不平凡。此外,由於您同時使用amd64i386包的多架構,因此*必須同步升級這些包,*否則您會遇到一些您已經看到的錯誤。

因此,我無法說出有關如何僅升級 mesa 的確切命令,而不升級所有內容(您不應該這樣做: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,那很好,如果它們中的大多數或許多不相關的包被提供刪除,中止並考慮可能失去的內容。當然,還應提供許多其他升級(例如:libdrm2libdrm2:i386)。由於多拱可能仍然會引起麻煩,因此如果apt-get不夠聰明,您可能必須手動將它們添加兩次(每個拱一次)到不斷增長的單行列表中。

正如@Stephen Kitt 所建議的,其他有用的和相關的軟體包,處理硬體使用的改進,包括圖形支持,也可以在拉伸反向埠中使用,並且可能也應該升級。其中:

  • linux-image-amd64目前將拉linux-image-4.19.0-0.bpo.2-amd64
  • 各種韌體包(無論如何,所有目前安裝的都應該升級),比如firmware-misc-nonfree可能包括升級的圖形支持以及無論如何可能必須升級為新核心的(可能是隱藏的)依賴項以獲得最佳結果。

引用自:https://unix.stackexchange.com/questions/509487