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
안정 버전에 직접 테스트를 설치하려고 하지 마세요! 아니면 당신은프랑켄데비안(기껏해야) 비현실적인 종속성으로 인해 많은 수의 패키지가 손실됩니다.
좋은 소식은 이러한 업데이트된 패키지가사용 가능존재하다stretch-backports
. 데비안 데스크탑에는 테스트 중 패키징이 일부 변경되었으므로 스트레치 백포트도 일부 변경되었습니다.공급업체 중립적인 GL 스케줄링 라이브러리이것을 큰 일로 만드십시오. 또한 amd64
및 i386
패키지 와 함께 다중 아키텍처를 사용하고 있으므로이 패키지는 동시에 업그레이드되어야 합니다.그렇지 않으면 지금까지 본 오류 중 일부가 발생하게 됩니다.
그래서 모든 것을 업그레이드하지 않고 조리대만 업그레이드하는 방법에 대한 정확한 명령을 말할 수 없습니다.아니요할 것: stretch-backports
보안 지원 없음) 그러나 프로세스를 제공하겠습니다.
먼저 주의해주세요데비안 지침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
schroot 내의 빌드 스크립트가 여기에 파일을 설치할 수
/usr/local
있도록 추가되었습니다 ./etc/schroot/default/fstab
/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
그런 다음 /를 사용하여 각 schroot를 차례로 입력 schroot -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
(대부분의) 쉘 및 쉘 유형이 새 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
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
)(선택 사항) 기존 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
캐시 새로 고침- SDDM의 새 장치 재정의를 로드하도록 systemd를 강제 실행합니다.
- 새로운 DRI 라이브러리를 선택할 수 있도록 Xorg를 다시 시작하세요.
- 새
답변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 설정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
원천
다음에 추가원천을 위한
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비트 기반Blob, 무료가 아닌 펌웨어 패치에는 탭이 필요하지만마크다운 코드 블록이 태그를 먹는다문제를 해결하더라도탭 문자가 포함된 텍스트를 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
패키지를 다음 위치에 복사하세요.로컬 적절한 저장소패키지 저장소(~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
업그레이드
새 패키지로 업그레이드:
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
재시작