apt - 외부 아키텍처에서 noarch 패키지 종속성을 설치합니다.

apt - 외부 아키텍처에서 noarch 패키지 종속성을 설치합니다.

Debian-11-amd64를 실행하는 저가형 장치에서는 일부 RAM(이라고 함 dpkg --add-architecture i386)을 절약하기 위해 32비트 버전의 크롬 브라우저를 설치하는 것을 선호합니다.

apt install chromium:i386

잘 작동합니다. 이제 아치 독립적인 언어 팩도 설치하고 싶습니다.

$ apt install chromium-l10n
The following additional packages will be installed:
  chromium chromium-common chromium-sandbox
Suggested packages:
  chromium-shell chromium-driver
The following packages will be REMOVED:
  chromium:i386 chromium-common:i386 chromium-driver:i386 chromium-sandbox:i386
The following NEW packages will be installed:
  chromium chromium-common chromium-l10n chromium-sandbox
0 upgraded, 4 newly installed, 4 to remove and 5 not upgraded.

따라서 apt는 64비트 패키지 버전을 설치하고 32비트 버전을 제거하려고 합니다. 너무 좋지 않아.

나는 노력했다

$ apt install chromium-l10n:i386
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package chromium-l10n:i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'chromium-l10n:i386' has no installation candidate

일부 고정 변형/etc/apt/preferences.d/mychrome-i386

Package: chromium-l10n
Pin: release o=security.debian.org_debian-security_dists_bullseye-security_non-free_binary-i386_Packages
Pin-Priority: 900

이 중 어느 것도 작동하지 않습니다. (합리적인 노력으로) 이것이 어떻게 달성될 수 있습니까?

고마워요
타이코

답변1

OP보다 더 일반적인 접근 방식을 사용하여 버전이 다시 설치되지 않도록 하는 등 Pin 우선 순위가 있는 변형의 재설치를 방지할 수 있습니다 amd64./etc/apt/preferences.d/local-chromium.prefamd64

Package: chromium:amd64
Pin: origin *
Pin-Priority: -1

amd64변형이 설치되는 것을 방지하고 i386변형만 옵션으로 남겨둔다는 점을 제외하면 설치 가능한 콘텐츠의 우선순위는 변경되지 않습니다 .

아래 변경 사항으로는 발생하지 않으므로 이는 선택 사항입니다. 새 버전이 발견되면 표준 업그레이드는 사용되지 않습니다 apt upgrade(그러나 사용될 수 있음 apt full-upgrade). 어쨌든 나중에 Debian n에서 Debian n+1로 실제로 업그레이드할 때 이러한 모든 설정은 어떤 방식으로든 충돌하게 됩니다. 충돌하는 패키지를 제거하고 데비안 버전 변경 후에 다시 설치하는 것이 좋습니다.


Multi-Arch: foreign

핵심 요소는 종속성 시스템이 다른(외부) 아키텍처의 패키지를 기본 패키지로 처리하도록 하는 것입니다. 분명히, 실제 패키지의 동작이나 API가 허용하는 경우에만 이 작업을 수행해야 합니다.

데비안 위키피디아다중 아키텍처 HOWTO 설명:

  • 패키지가 "Multi-Arch: foreign"로 표시되면 다양한 아키텍처의 패키지 종속성을 충족할 수 있습니다(예를 들어 "debhelper:amd64"는 모든 아키텍처에 대한 debhelper에 대한 패키지 종속성을 충족합니다).

우분투에 대한 추가 참고자료다중 아키텍처 사양(이전 링크에서 인용한 데비안):

Multi-Arch: foreign

  • 패키지는아니요와 함께 설치 가능~해야 한다다른 아키텍처에 대한 패키지의 종속성을 충족할 수 있지만 자체 아키텍처는 허용하지 않습니다.

[...]

나는 같은 이유로 OP가 했던 일을 Firefox로 하곤 했습니다. 즉, 저사양 시스템에서 메모리를 절약하는 것이었습니다. 변경 사항은 종속된 패키지가 아닌 "기본" 바이너리 패키지에서 수행되어야 합니다. 또한 패키지가 변경되면 종속성 알고리즘은 동일한 버전을 유지할 때 설치된 소스보다 저장소 소스를 선호하지만 종속성 때문에 그렇게 하지 않습니다. 항상 패키지가 예약되어 있다고 기록되며, 패키지가 예약되어 있으면 새 버전을 사용할 수 있지만 설치할 수 없거나같은버전이 가능합니다. 이 문제는 패키지 버전을 약간 높이면 해결될 수 있습니다.

chromium이 접근 방식은 일부 패키지( , firefox-esr및 포함 thunderbird)에서는 잘 작동하지만 다른 패키지에서는 실패할 수 있습니다. 특히 자체적으로 동일한 유형의 문제가 있거나 Multiarch의 라이브러리에 제대로 적용되지 않은 비 라이브러리 패키지에 의존하는 경우(아마도 버그일 수 있음) : 하나) 런타임 라이브러리가 Multi-Arch: same함께 설치될 것으로 예상해야 합니다.

목표는 다음과 같습니다:

  • Multi-Arch: foreign해당 패키지에 의존하는 다른 패키지가 기본 패키지로 처리되고 다른 스키마를 가져오려는 시도가 더 이상 이루어지지 않도록 패키지를 설정합니다 .

  • 선택사항: 버전 번호를 늘립니다.

    이는 새로운 실제 버전이 언제 출시되는지 파악하는 데 도움이 되며 이 작업을 다시 수행해야 합니다.

  • 이전 단계가 완료된 경우 이 단계는 필수입니다. 패키지가 자체적으로 제공되도록 설정하고 이전(실제) 버전으로 버전을 지정합니다.

    ...아키텍처가 아닌 버전으로 인해 종속성 문제가 반복되는 것을 방지합니다.

이러한 변경을 수행하는 간단한 도구는 없습니다. /var/lib/dpkg/status설치된 모든 패키지의 데이터베이스인 이 파일을 개인적으로 직접 편집했습니다 . 실수로 인해 전체 시스템 설치가 손상될 수 있습니다. 더 길지만 더 안전한 방법은 다음과 같습니다. 바이너리 패키지를 다운로드하여 압축을 풀고 필요에 따라 편집한 다음 대체 바이너리 패키지로 다시 패키징하고 설치합니다.

모든 작업은 사용자로서 수행되어야 합니다.뿌리(하지만fakeroot사람들이 사용 방법을 이해하는 한 부품을 재포장하는 데 사용할 수 있습니다(한 번).

mkdir /tmp/repack
cd /tmp/repack
apt-get download chromium:i386
dpkg-deb --raw-extract chromium_*_i386.deb chromium

파일 편집 chromium/DEBIAN/control:

  • 항목을 추가합니다(예: Architecture: i386아래 항목) .Multi-Arch:

    Multi-Arch: foreign
    
  • Version:항목 수정

    버전에 를 추가하여 버전을 변경하세요 .0. 예를 들어, 오늘 Debian 12에서는 다음과 같습니다:

    Version: 119.0.6045.123-1~deb12u1.0
    
  • 항목을 편집합니다 Provides:(해당 항목이 없는 패키지의 경우 추가).

    끝에 ACTUALBERSION을 추가하면 , chromium (= ACTUALVERSION)추가되지 않은 실제 버전으로 대체됩니다 .0. 예를 들어, 오늘 Debian 12에서는 다음 줄이 표시됩니다.

    Provides: gnome-www-browser, www-browser, chromium (= 119.0.6045.123-1~deb12u1)
    

변경된 패키지를 새 .deb파일로 다시 패키지합니다.

dpkg-deb --build chromium/ chromium.deb

그리고 다른 패키지(향후 업그레이드 시 자동으로 가져와야 함)와 함께 (실제) 사용자 root로 다시 설치합니다 .

apt-get install ./chromium.deb chromium-l10n

버전이 업그레이드되지 않은 경우 --reinstall필요할 수 있습니다.

데비안이 새 버전을 출시할 때마다 이 작업을 다시 수행해야 합니다. 이는 향후 apt upgrade명령에서 업그레이드보다는 유지를 지시할 때 chromium:i386감지되어야 합니다 .


실제 테스트는 Debian 12에서 작성되었습니다.

관련 정보