멀티 아키텍처를 사용하더라도 APT 버전은 서로 다른 아키텍처 간에 충돌합니다. 동일한가요?

멀티 아키텍처를 사용하더라도 APT 버전은 서로 다른 아키텍처 간에 충돌합니다. 동일한가요?

Raspbian과 64비트 커널을 사용하여 다음에서 패키지를 가져옵니다.

deb [arch=armhf] http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free

gzip:arm64와 같은 프로그램을 실행하기 위해 최소 종속성을 설치하려고 하면 충돌이 보고됩니다. 예:

libgcc1 : Breaks: libgcc1:arm64 (!= 1:6.3.0-18+rpi1+deb9u1) but 1:6.3.0-18+deb9u1 is to be installed
gcc-6-base:arm64 : Breaks: gcc-6-base (!= 6.3.0-18+deb9u1) but 6.3.0-18+rpi1+deb9u1 is to be installed

"+rpi1"처럼 보입니다.팔 수소 남편비rpi1과 패키지가 충돌합니다.ARM64가방. 하지만 이는 패키지를 비교하고 있음을 의미합니다.버전두 개의 서로 다른 아키텍처에 걸쳐!

어쨌든, apt-get의 오류 메시지는 오해의 소지가 있을 수 있으므로 내 시스템을 bamarni의 Debian Pi64(다중 아키텍처 작업)와 유사한 상태로 만들기 위해 다음 링크에서 rpi1이 아닌 armhf 패키지를 다운로드해 볼 수 있습니다.https://packages.debian.org/stretch/armhf/libgcc1/downloadlibgcc1:armhf, gcc-6-base:armhf, libc6:armhf, libatomic1:armhf 등을 교체하면 기본 충돌이 사라지고 apt를 통해 libgcc1:arm64 gcc-6-base:arm64 libc6:arm64를 설치할 수 있습니다. 그러나 프로세스에서 ARMv6 호환성 및 기타 Raspbian 관련 수정 사항이 손실될 수 있으므로 이는 좋은 솔루션이 아닙니다.

위의 시나리오는 여전히 Raspbian 패키지에 뭔가 수상한 것이 숨어 있음을 의미할 수 있습니다. 다음 테스트는 +rpi1각 제어 파일의 버전 텍스트 섹션을 제거하는 스크립트를 사용하여 다시 패키지하는 것을 제외하고 Raspbian *.deb 파일을 사용하는 것이었습니다 . 이 작업을 수행하고 해당 패키지를 다시 설치하면 arm64 패키지와의 충돌이 사라졌습니다. 이는 다시 APT가 서로 다른 두 아키텍처의 패키지 버전을 비교하고 있음을 나타냅니다.

apt-cache show이 중 하나를 실행하면 Multi-Arch: same올바른 해당 Architecture:줄로 표시됩니다. 내가 이해하는 한, Multi-Arch: foreign또는 의 경우 다른 아키텍처의 버전에만 관심을 갖습니다 Multi-Arch: allowed.

여기서 무슨 일이 일어나고 있는 걸까요? APT가 서로 다른 아키텍처 간의 패키지 버전을 비교하는 것처럼 보이지만 이를 수행해서는 안 되며, 이로 인해 허위 충돌이 발생할 수 있습니다. bamarni의 Pi64 또는 Ubuntu MATE(또는 대부분의 i386+x86_64 시스템)에서 멀티 아키텍처가 제대로 작동하는지 궁금합니다. 그 이유 중 하나는 해당 시스템이 32비트와 64비트에서 거의 일관된 패키지 버전을 갖고 있기 때문입니다.

답변1

이것은다중 아키텍처 사양 의무사항:

다중 아키텍처 패키지는 암시적으로 동기화 상태를 유지해야 합니다 Breaks: ${self}:other (!= ${binary:Version}).

그 이유는 패키지가 항상 공유 디렉터리( /usr/share/doc)에 일부 아키텍처 독립적인 파일을 제공하므로 패키지 관리 시스템은 해당 파일이 아키텍처 전체에서 동일한지 확인해야 하기 때문입니다. binNMU를 사용하는 경우에도 아키텍처 전체에 동일한 버전을 적용하여 이를 수행합니다.

이는 단일 배포판 내에서는 큰 문제가 아니지만 배포판 전체에서는 그렇습니다.

구체적으로 귀하의 사례를 고려해 보겠습니다 gcc-6-base(문서가 있는 곳이므로). Debian Stretch 버전은 /usr/share/doc/gcc-6-base/changelog.Debian.gz. 그러나 Raspbian 버전에는 다음 항목이 추가됩니다.

gcc-6 (6.3.0-18+rpi1+deb9u1) stretch-staging; urgency=medium

  [changes brought forward from 6.1.1-1+rpi1 by Peter Michael Green <[email protected]> at Wed, 11 May 2016 20:
  * Disable testsuite.

 -- Raspbian forward porter <[email protected]>  Thu, 01 Mar 2018 00:03:02 +0000

더 이상 /usr/share/doc/gcc-6-base/changelog.Debian.gz동일하지 않습니다. Debian Stretch와 Raspbian Stretch 버전의 패키지를 나란히 설치하려면 어떤 버전의 파일을 유지해야 합니까? 결정할 방법이 없으므로 포장 시스템에서는 이를 전면 금지합니다.

관련 정보