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 버전의 패키지를 나란히 설치하려면 어떤 버전의 파일을 유지해야 합니까? 결정할 방법이 없으므로 포장 시스템에서는 이를 전면 금지합니다.