Mesaドライバを正しく更新する方法は?

Mesaドライバを正しく更新する方法は?

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のみを実行できるという意味です。だから私は更新しようとしましたが、いくつかの問題が発生しました。

aptIEを介して更新しようとすると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

OK、ところで:

$ 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

安定版に直接テストをインストールしようとしないでください。またはあなたはフランケンデビアン(せいぜい)非現実的な依存関係により、多数のパッケージが失われます。

良いニュースは、これらの更新されたパッケージです利用可能存在するstretch-backports。 Debian デスクトップではテスト中にパッケージングが一部変更されたため、ストレッチバックポートも一部変更されました。ベンダーニュートラルGLスケジューリングライブラリこれを大きな仕事にしてください。またamd64i386パッケージと一緒に複数のアーキテクチャを使用しているので、このパッケージは同時にアップグレードする必要があります。そうしないと、これまでに見たエラーのいくつかが発生します。

したがって、すべてをアップグレードせずにカウンタートップのみをアップグレードする方法の正確なコマンドを話すことはできません。いいえする: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-get100個のパッケージの削除を提案する)。だからこんな感じ:

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:i386apt-getに手動で2回(各アーチに対して1回)追加する必要があるかもしれません。

@Stephen Kittが提案したように、グラフィックサポートを含む強化されたハードウェアの使用を処理する他の便利で関連するパッケージもストレッチバックポートで利用可能で、おそらくアップグレードする必要があります。その中には:

  • linux-image-amd64現在引っ張るlinux-image-4.19.0-0.bpo.2-amd64
  • さまざまなファームウェアパッケージ(現在インストールされているすべてのパッケージはとにかくアップグレードfirmware-misc-nonfreeする必要があります)。

答え2

このイベントでは、メサ(株)はバックポートではなくソースからビルドできます。

シュルート設定


  1. ホスト設定:

    sudo apt install --yes schroot debootstrap
    
  2. schroot用のディレクトリを作成します。

    sudo mkdir -p /srv/chroot/debian32
    sudo mkdir -p /srv/chroot/debian64
    
  3. 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
    
  4. schroot内のビルドスクリプトがここにファイルをインストールできる/usr/localように追加されました。/etc/schroot/default/fstab

    /usr/local    /usr/local    none    rw,bind    0    0
    
  5. 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次に、/を使用して各schrootを順番に入力し、次のschroot -c debian64操作を行います。

  1. ビルド依存関係をインストールします。

    sudo apt build-dep --yes wayland wayland-protocols libdrm mesa linux && \
    sudo apt install --yes cmake meson 
    
  2. 環境変数を設定します。

    export SRC=$HOME/mesa-sources
    export PREFIX=/usr/local
    
  3. インストールするwayland

    cd $SRC/wayland && \
    meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release \
    -D documentation=false && \
    ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
    
  4. インストールするwayland-protocols

    cd $SRC/wayland-protocols && \
    meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release && \
    ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
    
  5. インストールするdrm

    cd $SRC/drm && \
    meson build-$HOSTTYPE --prefix=$PREFIX --buildtype=release && \
    ninja -C build-$HOSTTYPE && sudo ninja -C build-$HOSTTYPE install
    
  6. インストールする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
    
  7. (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
    

    コンパイル時間(ほぼ)みんなファームウェアは技術的に実現可能私はそれに反対することをお勧めします。

ホストへのパッケージのインストール


ホストシステムに戻り、次の操作を行います。

  1. ホスト設定:

    sudo dpkg --add-architecture i386 && \
    sudo apt update && \
    sudo apt install --yes apt-file gcc-multilib && \
    sudo apt-file update
    
  2. 見つからないライブラリを検索し/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"}' )
    
  3. カーネルパッケージをインストールします。

    # 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
    

環境設定


  1. profile.d(ほとんどの)シェルタイプとシェルタイプが新しい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
    
  2. KDE の SDDM が Xorg AIGLX を起動するときに新しい DRI ドライバも使用するように systemd 設定の上書きを追加します。

    # /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"
    

    (他のデスクトップ環境のGreeterには、そのディレクトリに同じ設定ファイルが必要ですservice.d

  3. (オプション) 既存の Mesa Vulkan ドライバを削除します。

    sudo apt remove mesa-vulkan-drivers mesa-vulkan-drivers:i386
    

    これにより、Vulkanローダーが以前のDebian提供のVulkanドライバファイル(存在する場合)をインポートし、そのうちの1つを「最初の」GPUに返すのを防ぎます。

    メサする持つMESA_VK_DEVICE_SELECT複数のドライバから選択するのではなく、優先順位を指定する特定のPCIデバイスのみを選択できるようにデバイスリストを並べ替えるのに役立つ環境変数同じ機器。 Debian が提供する Vulkan ドライバーをインストールし続けたい場合、どちらかを選択する必要がある場合は、以下を試してください。vkデバイスセレクタ

  4. 最後に、次に再起動します。

    • 新しいamdgpuカーネルモジュールとファームウェアのロード
    • ldconfigキャッシュの更新
    • SDDMの新しいデバイスオーバーライドをロードするようにsystemdを強制します。
    • 新しいDRIライブラリを選択できるようにXorgを再起動してください。

答え3

このイベントでは、メサ(株)はバックポートではなくバックポートされたパッケージを直接作成できます。

設定


  1. 環境変数を設定します。

    # 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"
    
  2. インストールするソースからバグ #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 
    

クロッツ


  1. 以下を使用してi386およびamd64 chrootを設定するmm破片:

    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
    

源泉


  1. 次へ追加源泉のため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
    
  2. ソースパッケージをダウンロードし、変更ログを更新します。

    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
    
  3. パッチを適用します。

    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ビットベースBlob、無料ではないファームウェアパッチにはタブが必要ですが、マークダウンコードブロックがタグを食べる問題を解決してもタブ文字を含むテキストをBashプロンプトに貼り付けると、タブの完成中にタブ文字が使用されます。:()

立てる


  1. パッケージをビルドします(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
    
  2. パッケージを次の場所にコピーします。ローカル適切なストレージパッケージストア(~1GiBが必要):

    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
    

アップグレード


  1. 新しいパッケージにアップグレードする:

    sudo apt update && \
    sudo apt upgrade -o Dpkg::Options::="--force-overwrite"
    
  2. バックポートからカーネルをインストールします。

    { 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
    
  3. 再起動

関連情報