아키텍처가 다른 파일 시스템으로 루트를 변경하는 방법은 무엇입니까?

아키텍처가 다른 파일 시스템으로 루트를 변경하는 방법은 무엇입니까?

에서 나오 chroot려고 합니다 .ARMx86_64

qemu바이너리를 chroot 시스템에 복사하여 static을 사용할 수 있다는 것을 알았습니다 .

$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin    

하지만 그럼에도 불구하고 항상 다음과 같은 오류가 발생합니다.

chroot: failed to run command ‘/bin/bash’: Exec format error

나는 이것이 아키텍처가 다르다는 것을 의미한다는 것을 알고 있습니다. 내가 뭐 잘못 했어요?

답변1

나는 때때로 ARM chroot를 사용합니다. 내 전화기는 Linux Deploy를 실행하지만 이미지는 때때로 죽습니다. 그런 다음 이를 내 컴퓨터에 복사하고 다음과 같이 chroot를 사용하여 상황을 확인했습니다.

# This provides the qemu-arm-static binary
apt-get install qemu-user-static

# Mount my target filesystem on /mnt
mount -o loop fs.img /mnt

# Copy the static ARM binary that provides emulation
cp $(which qemu-arm-static) /mnt/usr/bin
# Or, more simply: cp /usr/bin/qemu-arm-static /mnt/usr/bin

# Finally chroot into /mnt, then run 'qemu-arm-static bash'
# This chroots; runs the emulator; and the emulator runs bash
chroot /mnt qemu-arm-static /bin/bash

답변2

중요한:다른 답변을 참조하십시오. 이것은 오래되고 부정확한 답변입니다.

다른 아키텍처로 루트를 변경할 수 없습니다. chroot를 사용하면 아키텍처에서 (chroot에서) 바이너리를 실행할 수 있습니다. x86(및 x86_64)에서 ARM 바이너리를 실행하면 "실행 형식 오류"가 발생합니다.

다양한 아키텍처의 바이너리를 실행하려면 에뮬레이터가 필요합니다. Qemu는 훌륭한 옵션이지만 사용 방법을 배워야 합니다. 여기에는 RootFS를 생성하고 ARM용 커널을 컴파일하는 작업이 포함됩니다. ARM 바이너리(및 커널)를 컴파일하려면 툴체인이 필요할 수 있습니다. 한 가지 확실한 점은 chroot 메서드를 잊어버리면 x86(x86_64)에서 ARM용으로 컴파일된 바이너리를 실행할 수 없다는 것입니다.

편집하다: @UrichDangel과 몇 차례 대화를 나눈 후, chroot 환경에 들어가려면 qemu-user 프로그램(이 경우 qemu-arm)을 사용하는 것이 가능해야 한다는 것을 깨달았습니다. Chroot는 호스트 아키텍처용으로 컴파일된 qemu-arm을 실행해야 하며, 그런 다음 qemu-arm은 /bin/sh(arm용으로 컴파일됨)를 실행할 수 있습니다.

답변3

아치에 설치qemu-user-static그리고binfmt-qemu-staticAUR에서.

그런 다음 chroot하려는 디렉터리 qemu-*-static에 복사했는지 확인하고 다음과 같은 것을 사용할 수 있어야 합니다.usr/bin/chrootchroot /mnt qemu-arm-static /bin/bash

답변4

확실히 다른 아키텍처에 대해 (마운트된) 파일 시스템에 "chroot"하여 의미 있는 작업을 수행할 수 있습니다. 올바른 도구만 있으면 됩니다.

chroot, mount --bind 및 binfmt_misc의 사용자 공간 구현인 PRoot를 살펴보십시오.https://proot-me.github.io/

QEMU의 사용자 모드 에뮬레이터와 함께 모든 것이 준비되었습니다.

일반적으로 "전체" 부팅(즉, init 및 서비스 시작)을 수행할 수는 없지만 "호스트" 시스템의 일부를 포함하여 모든 구성 파일에 액세스하여 "자연스러운" 위치에서 일부 바이너리를 실행하는 것으로 충분합니다. 등.

관련 정보