2024-01-22

LMDE 6 の Mesa をより新しいバージョンに差し替えてみた

Wayland でも動かせるようになった Cinnamon 6.0 がなかなか LMDE 6 に配信されないのと、ちょっと時間があったことから、また斜めの方向に進んでしまいました。

はじめに考えたのは

Ubuntu 22.04 ベースの Linux Mint 21.3 をインストールしてみようと考えました。これによって Mesa のバージョンは Debian 12 よりも新しくなるのですが、PipeWire のバージョンは逆に古くなってしまいます。でもまあ、PipeWire であれば PPA で最新化するのもありです。


最近は Linux kernel を自分用にカスタマイズするためにコンパイルしています。LLVM/Clang のバージョンはどうなるのか調べてみると、Linux Mint 21.3 の方が古くなってしまうことがわかりました。

というわけで、Linux Mint  21.3 をインストールするのはやめておきました。



どうせなら

逆に、Debian 12 の Mesa のバージョンだけ新しくできれば解決なのでは? と考えてその方法を探ってみたのですが、あんまりパッとした情報が見つけられませんでした。

Debian の場合は公式というか APT の制御で自由に差し替えられるようになっていたので、情報が少なかったようでした。 具体的には APT のリポジトリを安定版だけではなくtesting というベータ版っぽいリポジトリを使うことで Mesa に限らずより新しいソフトウェアのバージョンを使うことができるようになっています。

ちなみに testing よりもさらに先の開発版として sid というリポジトリも用意されています。

stable(サーバー向け)、testing(デスクトップ向け)、sid(PC ゲーマー向け)なんて表現している人もいて、なるほどと思いました。


やってみた

まずは APT の設定ファイルの修正です。/etc/apt/sources.list.d 内の official-package-repositories.list を編集します。

$ cat official-package-repositories.list 
deb http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages faye main upstream import backport romeo

deb http://ftp.riken.jp/Linux/debian/debian bookworm main contrib non-free non-free-firmware
deb http://ftp.riken.jp/Linux/debian/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/ bookworm-security main contrib non-free non-free-firmware

deb http://ftp.riken.jp/Linux/debian/debian bookworm-backports main contrib non-free non-free-firmware
deb http://ftp.riken.jp/Linux/debian/debian testing main contrib non-free non-free-firmware

最下行の testing というリポジトリを追記しました。

このディレクトリには official-source-repositories.list という定義もありますが、当然ながらソースコードの新しいバージョンが欲しい場合のみ追記すれば良いと思います。今回は不要なので追記しませんでした。

これで apt update をかけてパッケージ情報を最新化します。

$ sudo apt update
無視:1 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages faye InRelease
ヒット:2 http://ftp.riken.jp/Linux/debian/debian bookworm InRelease
ヒット:3 http://ftp.riken.jp/Linux/debian/debian bookworm-updates InRelease
ヒット:4 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages faye Release
ヒット:5 http://security.debian.org bookworm-security InRelease
ヒット:6 http://ftp.riken.jp/Linux/debian/debian bookworm-backports InRelease
取得:7 http://ftp.riken.jp/Linux/debian/debian testing InRelease [156 kB]
取得:9 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 Packages [9,013 kB]
取得:10 http://ftp.riken.jp/Linux/debian/debian testing/main i386 Packages [8,851 kB]
取得:11 http://ftp.riken.jp/Linux/debian/debian testing/main Translation-ja [736 kB]                                   
取得:12 http://ftp.riken.jp/Linux/debian/debian testing/main Translation-en [6,127 kB]                                 
取得:13 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 DEP-11 Metadata [4,488 kB]                          
取得:14 http://ftp.riken.jp/Linux/debian/debian testing/main all Contents (deb) [33.7 MB]                              
取得:15 http://ftp.riken.jp/Linux/debian/debian testing/main i386 Contents (deb) [11.1 MB]                             
取得:16 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 Contents (deb) [11.5 MB]                            
取得:17 http://ftp.riken.jp/Linux/debian/debian testing/contrib i386 Packages [47.7 kB]                                
取得:18 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 Packages [57.2 kB]                               
取得:19 http://ftp.riken.jp/Linux/debian/debian testing/contrib Translation-en [51.6 kB]                               
取得:20 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 DEP-11 Metadata [19.6 kB]                        
取得:21 http://ftp.riken.jp/Linux/debian/debian testing/contrib all Contents (deb) [113 kB]                            
取得:22 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 Contents (deb) [178 kB]                          
取得:23 http://ftp.riken.jp/Linux/debian/debian testing/contrib i386 Contents (deb) [40.5 kB]                          
取得:24 http://ftp.riken.jp/Linux/debian/debian testing/non-free i386 Packages [73.2 kB]                               
取得:25 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 Packages [97.3 kB]                              
取得:26 http://ftp.riken.jp/Linux/debian/debian testing/non-free Translation-en [66.9 kB]                              
取得:27 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 DEP-11 Metadata [4,200 B]                       
取得:28 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 Contents (deb) [78.1 kB]                        
取得:29 http://ftp.riken.jp/Linux/debian/debian testing/non-free i386 Contents (deb) [28.7 kB]                         
取得:30 http://ftp.riken.jp/Linux/debian/debian testing/non-free all Contents (deb) [822 kB]                           
取得:31 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware i386 Packages [6,028 B]                      
取得:32 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 Packages [6,352 B]                     
取得:33 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware Translation-en [21.7 kB]                     
取得:34 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 DEP-11 Metadata [15.6 kB]              
取得:35 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware all Contents (deb) [17.5 kB]                 
取得:36 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 Contents (deb) [967 B]                 
取得:37 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware i386 Contents (deb) [930 B]                  
87.5 MB を 28秒 で取得しました (3,100 kB/s)                                                                            
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了        
アップグレードできるパッケージが 1468 個あります。表示するには 'apt list --upgradable' を実行してください。

amd64 以外のリポジトリも探しに行っていますが、これは初回だけの動作のようです。

それはそうと、アップグレード可能なパッケージが 1,468 個もあると表示されました。こんなにたくさんアップグレードしてしまうともはや LMDE 6 でも Debian 12 でもなくなってしまいそうです。

アップグレードを処理せずに置いておいたとしても、普通に LMDE 6 に配信されたアップデートを見逃してしまいそうです。意図的にインストールしたいパッケージは testing リポジトリからインストールできて、それ以外は通常の stable リポジトリから処理できるとベストです。

 

ということでさらに調べてみると、preference 定義でなんとかできるようでした。

/etc/apt/preferences.d というディレクトリに official-extra-repositories.pref、 official-package-repositories.pref という 2 つの定義があり、ここに my-package-repositories.pref という 3 つ目の定義ファイルを追加してみました。

$ cat my-package-repositories.pref 
Package: *
Pin: release a=testing
Pin-Priority: -1

Pin-Priority に数値を指定するのですが、通常は大きい値が優先されるのですが、ここにマイナス値を設定すると自動では探しに行かなくなるようです。

$ apt update
無視:1 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages faye InRelease
ヒット:2 http://ftp.riken.jp/Linux/debian/debian bookworm InRelease
ヒット:3 http://ftp.riken.jp/Linux/debian/debian bookworm-updates InRelease
ヒット:4 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages faye Release
ヒット:5 http://security.debian.org bookworm-security InRelease
ヒット:6 http://ftp.riken.jp/Linux/debian/debian bookworm-backports InRelease
取得:7 http://ftp.riken.jp/Linux/debian/debian testing InRelease [156 kB]
取得:9 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 Packages [9,013 kB]
取得:10 http://ftp.riken.jp/Linux/debian/debian testing/main i386 Packages [8,851 kB]
取得:11 http://ftp.riken.jp/Linux/debian/debian testing/main Translation-ja [736 kB]                                   
取得:12 http://ftp.riken.jp/Linux/debian/debian testing/main Translation-en [6,127 kB]                                 
取得:13 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 DEP-11 Metadata [4,488 kB]                          
取得:14 http://ftp.riken.jp/Linux/debian/debian testing/main i386 Contents (deb) [11.1 MB]                             
取得:15 http://ftp.riken.jp/Linux/debian/debian testing/main amd64 Contents (deb) [11.5 MB]                            
取得:16 http://ftp.riken.jp/Linux/debian/debian testing/main all Contents (deb) [33.7 MB]                              
取得:17 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 Packages [57.2 kB]                               
取得:18 http://ftp.riken.jp/Linux/debian/debian testing/contrib i386 Packages [47.7 kB]                                
取得:19 http://ftp.riken.jp/Linux/debian/debian testing/contrib Translation-en [51.6 kB]                               
取得:20 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 DEP-11 Metadata [19.6 kB]                        
取得:21 http://ftp.riken.jp/Linux/debian/debian testing/contrib all Contents (deb) [113 kB]                            
取得:22 http://ftp.riken.jp/Linux/debian/debian testing/contrib i386 Contents (deb) [40.5 kB]                          
取得:23 http://ftp.riken.jp/Linux/debian/debian testing/contrib amd64 Contents (deb) [178 kB]                          
取得:24 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 Packages [97.3 kB]                              
取得:25 http://ftp.riken.jp/Linux/debian/debian testing/non-free i386 Packages [73.2 kB]                               
取得:26 http://ftp.riken.jp/Linux/debian/debian testing/non-free Translation-en [66.9 kB]                              
取得:27 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 DEP-11 Metadata [4,200 B]                       
取得:28 http://ftp.riken.jp/Linux/debian/debian testing/non-free amd64 Contents (deb) [78.1 kB]                        
取得:29 http://ftp.riken.jp/Linux/debian/debian testing/non-free all Contents (deb) [822 kB]                           
取得:30 http://ftp.riken.jp/Linux/debian/debian testing/non-free i386 Contents (deb) [28.7 kB]                         
取得:31 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware i386 Packages [6,028 B]                      
取得:32 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 Packages [6,352 B]                     
取得:33 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware Translation-en [21.7 kB]                     
取得:34 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 DEP-11 Metadata [15.6 kB]              
取得:35 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware all Contents (deb) [17.5 kB]                 
取得:36 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware amd64 Contents (deb) [967 B]                 
取得:37 http://ftp.riken.jp/Linux/debian/debian testing/non-free-firmware i386 Contents (deb) [930 B]                  
87.5 MB を 30秒 で取得しました (2,891 kB/s)                                                                            
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了        
パッケージはすべて最新です。

再び apt update してみると、先ほどの「アップグレード可能な〜」という表示が消えました。作戦成功のようです。

 

では、本題の Mesa の最新化です。

どのパッケージをインストールすれば良いのか自身がなかったのですが、とりあえず VA-API のドライバーである mesa-va-drivers をインストールしてみました。

$ apt install -t testing mesa-va-drivers 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libclang-common-15-dev libclang-cpp15 libllvmspirvlib15 libobjc-12-dev
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  clang-16 gcc-13-base lib32asan8 lib32atomic1 lib32gcc-s1 lib32gomp1 lib32itm1 lib32quadmath0 lib32stdc++6
  lib32ubsan1 libasan8 libatomic1 libcc1-0 libclang-common-16-dev libclang-cpp16 libclang-rt-16-dev libclang1-16
  libclc-16 libclc-16-dev libegl-mesa0 libgbm1 libgcc-13-dev libgcc-s1 libgfortran5 libgl1-mesa-dri libglapi-mesa
  libglx-mesa0 libgomp1 libhwasan0 libitm1 libllvm16 libllvmspirvlib16 liblsan0 libobjc-13-dev libobjc4 libquadmath0
  libstdc++-13-dev libstdc++6 libtsan2 libubsan1 libx11-6 libx11-data libx11-dev libx11-xcb1 libx32asan8 libx32atomic1
  libx32gcc-s1 libx32gomp1 libx32itm1 libx32quadmath0 libx32stdc++6 libx32ubsan1 libxatracker2 libzstd-dev libzstd1
  lld-16 llvm-16 llvm-16-dev llvm-16-linker-tools llvm-16-runtime llvm-16-tools mesa-opencl-icd mesa-vdpau-drivers
  mesa-vulkan-drivers zstd
提案パッケージ:
  clang-16-doc wasi-libc libstdc++-13-doc libx11-doc llvm-16-doc
以下のパッケージは「削除」されます:
  libclc-15 libclc-15-dev
以下のパッケージが新たにインストールされます:
  gcc-13-base libclc-16 libclc-16-dev libgcc-13-dev libhwasan0 libllvmspirvlib16 libobjc-13-dev libstdc++-13-dev
以下のパッケージはアップグレードされます:
  clang-16 lib32asan8 lib32atomic1 lib32gcc-s1 lib32gomp1 lib32itm1 lib32quadmath0 lib32stdc++6 lib32ubsan1 libasan8
  libatomic1 libcc1-0 libclang-common-16-dev libclang-cpp16 libclang-rt-16-dev libclang1-16 libegl-mesa0 libgbm1
  libgcc-s1 libgfortran5 libgl1-mesa-dri libglapi-mesa libglx-mesa0 libgomp1 libitm1 libllvm16 liblsan0 libobjc4
  libquadmath0 libstdc++6 libtsan2 libubsan1 libx11-6 libx11-data libx11-dev libx11-xcb1 libx32asan8 libx32atomic1
  libx32gcc-s1 libx32gomp1 libx32itm1 libx32quadmath0 libx32stdc++6 libx32ubsan1 libxatracker2 libzstd-dev libzstd1
  lld-16 llvm-16 llvm-16-dev llvm-16-linker-tools llvm-16-runtime llvm-16-tools mesa-opencl-icd mesa-va-drivers
  mesa-vdpau-drivers mesa-vulkan-drivers zstd
アップグレード: 58 個、新規インストール: 8 個、削除: 2 個、保留: 1420 個。
193 MB のアーカイブを取得する必要があります。
この操作後に追加で 111 MB のディスク容量が消費されます。
続行しますか? [Y/n] 

インストール完了後、glxinfo で確認してみると Mesa のバージョンは 23.2.1 に更新されていました。(以前は 22.3 でした)

$ glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: AMD (0x1002)
    Device: AMD Radeon Graphics (renoir, LLVM 16.0.6, DRM 3.54, 6.5.10-zen3) (0x1638)
    Version: 23.2.1
    Accelerated: yes
    Video memory: 16384MB
    Unified memory: no
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 15684 MB, largest block: 15684 MB
    VBO free aux. memory - total: 7873 MB, largest block: 7873 MB
    Texture free memory - total: 15684 MB, largest block: 15684 MB
    Texture free aux. memory - total: 7873 MB, largest block: 7873 MB
    Renderbuffer free memory - total: 15684 MB, largest block: 15684 MB
    Renderbuffer free aux. memory - total: 7873 MB, largest block: 7873 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 16384 MB
    Total available memory: 24313 MB
    Currently available dedicated video memory: 15684 MB
OpenGL vendor string: AMD
OpenGL renderer string: AMD Radeon Graphics (renoir, LLVM 16.0.6, DRM 3.54, 6.5.10-zen3)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 23.2.1-1
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6 (Compatibility Profile) Mesa 23.2.1-1
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 23.2.1-1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

 

なんか Mesa のインストール方法に自信はありませんが、Debian のリポジトリの切り替え方がわかって良かったです。

 

(追記)

Mesa のバージョンを上げたら Firefox で VP9 とかのハードウェアエンコードが無効になってしまったので vainfo で確認してみました。

$ vainfo
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva error: /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so has no function __vaDriverInit_1_0
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

おや?

VA-API が機能していないようです。

ん〜、libva あたりでエラーのようですね。もしやここら辺も testing から新しいバージョンに更新しないといけないんですかね。

$ apt install -t testing libva2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  libva-drm2 libva-wayland2 libva-x11-2 va-driver-all
以下のパッケージはアップグレードされます:
  libva-drm2 libva-wayland2 libva-x11-2 libva2 va-driver-all
アップグレード: 5 個、新規インストール: 0 個、削除: 0 個、保留: 1560 個。
145 kB のアーカイブを取得する必要があります。
この操作後に追加で 18.4 kB のディスク容量が消費されます。
続行しますか? [Y/n] 

ということで、libva2 を新しいバージョンに差し替えてみることにしました。

$ vainfo
libva info: VA-API version 1.20.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.12.0)
vainfo: Driver version: Mesa Gallium driver 23.3.5-1 for AMD Radeon Graphics (radeonsi, renoir, LLVM 17.0.6, DRM 3.54, 6.6.15-zen3)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

大成功です。無事に VA-API が復活しました。