chroot 내에서 chroot의 아키텍처를 감지하는 방법은 무엇입니까?

chroot 내에서 chroot의 아키텍처를 감지하는 방법은 무엇입니까?

호스트 시스템이 Debian amd64를 실행하고 있다고 가정합니다. 이 시스템에서는 debootstrap을 사용하여 다른 Debian i386이 폴더에 설치되었습니다. 그런 다음 쉘 스크립트가 chroot 내에서 실행되고 있다고 가정합니다.

chroot 내부에서 dpkg-architecture /uname -a는 호스트 시스템의 아키텍처(amd64)만 표시합니다.

chroot의 [패키지] 아키텍처를 감지하는 방법은 무엇입니까? (i386)

답변1

dpkg-architecture그리고 dpkg --print-architecture나를 위해 일합니다.

/root# chroot /f/32
{3}/# uname -m
x86_64
{3}/# file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=152184668fe2d58ef2ef49e8c40d044880f8e318, stripped
{3}/# dpkg --print-architecture
i386
{3}/# dpkg-architecture
DEB_BUILD_ARCH=i386
DEB_BUILD_ARCH_BITS=32
DEB_BUILD_ARCH_CPU=i386
DEB_BUILD_ARCH_ENDIAN=little
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_GNU_CPU=i586
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=i586-linux-gnu
DEB_BUILD_MULTIARCH=i386-linux-gnu
DEB_HOST_ARCH=i386
DEB_HOST_ARCH_BITS=32
DEB_HOST_ARCH_CPU=i386
DEB_HOST_ARCH_ENDIAN=little
DEB_HOST_ARCH_OS=linux
DEB_HOST_GNU_CPU=i586
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=i586-linux-gnu
DEB_HOST_MULTIARCH=i386-linux-gnu
DEB_TARGET_ARCH=i386
DEB_TARGET_ARCH_BITS=32
DEB_TARGET_ARCH_CPU=i386
DEB_TARGET_ARCH_ENDIAN=little
DEB_TARGET_ARCH_OS=linux
DEB_TARGET_GNU_CPU=i586
DEB_TARGET_GNU_SYSTEM=linux-gnu
DEB_TARGET_GNU_TYPE=i586-linux-gnu
DEB_TARGET_MULTIARCH=i386-linux-gnu

즉, chroot의 프로그램이 32비트 시스템에서 실행되고 있다고 생각하도록 해야 합니다. 올바른 방법을 사용하여 실행하면 됩니다.성격. 이것setarch유틸리티(의 일부 util-linux)가 이 작업을 수행할 수 있습니다.

linux32 chroot /path/to/chroot

만약 너라면schroot를 사용하여 chroot 설정, 이 문제는 chroot 정의에서와 같이 Personality를 선언하여 linux32해결될 수 있습니다 .

관련 정보