나는 사용자 정의 Raspbian 설치를 사용하고 있습니다 qemu
. 즉:
systemd-nspawn -q --bind /usr/bin/qemu-arm-static -D $MOUNTPATH /bin/bash << EOF
DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND
apt-get install -y samba
EOF
내 호스트는 Raspbian Buster를 대상으로 Debian 9.9를 실행하고 있습니다. 이와 같은 명령을 실행하면 다음과 같은 오류가 많이 발생합니다.
오류: ld.so: /etc/ld.so.preload에서 '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' 객체를 미리 로드할 수 없습니다(공유 객체 파일을 열 수 없음): 무시됨.
${PLATFORM}
변수를 확장할 수 없는 것 같습니다 . 이 오류가 호스트에서 발생하는지 에뮬레이트된 대상에서 발생하는지 확실하지 않습니다. 어쨌든, 나는 노력한다:
export PLATFORM=v7l
호스트 터미널과 nspawn
스크립트에는 있지만 아무것도 변경되지 않습니다. 출력도 읽었 system-nspawn --help
지만 플랫폼과 관련된 내용은 찾지 못했습니다.
내가 무엇을해야 하나?
답변1
의사 변수는 ${PLATFORM}
실제로 다른 라이브러리를 참조하기 위해 바이너리와 라이브러리에 내장된 링커 플래그로, 여러 가능성이 있을 때 플랫폼에 맞는 라이브러리를 찾을 수 있도록 해줍니다.
바라보다manld.so자세한 내용은 "Rpath 토큰 확장" 섹션을 참조하세요.
의 특정 경우에는 ${PLATFORM}
auxv 벡터에서 가져옵니다. 명령(기본적으로 모든 명령)을 실행하고 LD_SHOW_AUXV=1
환경 변수를 내보내서 ld.so에 이 벡터를 덤프하도록 지시할 수 있습니다. /proc/$pid/auxv
파일을 확인하여 실행 중인 프로세스의 auxv를 찾을 수도 있습니다 .
이는 의 출력과 일치할 수 있지만 출력 의 다른 필드 중 하나 uname -m
일 수도 있습니다 .uname -p
uname
실제로는 Linux 네임스페이스만 적용하기 때문에 nspawn에서 제어할 수 없을 것 같습니다. 플랫폼의 모양을 변경하려면 실제 가상화가 필요할 수도 있습니다. nspawn 대신 QEMU(Raspbian 아키텍처용)에서 실행할 수 있다면 그 효과가 있을 것이라고 확신합니다. QEMU가 Linux 커널을 부팅하므로옳은플랫폼에서 이 모든 것이 작동하려면 올바른 설정을 얻어야 합니다.