새로운 glibc 버전을 애플리케이션에 chroot하는 방법은 무엇입니까?

새로운 glibc 버전을 애플리케이션에 chroot하는 방법은 무엇입니까?

프로그램을 실행하려고 하는데 실행하면 다음 오류가 발생합니다.

./app: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by ./app)

처음에는 수동으로 업그레이드하는 방법에 대해 읽었 glibc지만 저와 같은 고급 사용자가 아닌 사용자에게는 너무 위험해 보였습니다. 내 친구가 나에게 말했지만 chroot어떤 단계를 따라야 하는지 잘 모르겠습니다. 누가 날 도울 수 있죠?

내 시스템 정보:

uname -a:Linux hostName 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Distro: Crunchbang 11 (Waldorf)
ldd --version: ldd (Debian EGLIBC 2.13-38+deb7u8) 2.13

ldd ./app:
  linux-vdso.so.1 =>  (0x00007ffdd593d000)
  libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007febe6450000)
  libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007febe623a000)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007febe5eae000)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007febe5c2c000)
   /lib64/ld-linux-x86-64.so.2 (0x00007febe677a000)

답변1

우선, 이와 같은 메시지가 나타나면 실행하려는 애플리케이션을 해당 플랫폼/배포판에서 사용할 수 없다는 것을 깨달아야 합니다. 따라서 가능한 가장 고통스러운 방식으로 충돌이 발생하여 모든 파일, 돈 및 집을 가져갈 가능성이 높습니다. :)

특히 이것은 커널 ABI와 밀접하게 연결되어 있고 다른 버전의 ABI용으로 컴파일된 glibc를 실행하는 것은 위험하기 때문에 (g)libc와 관련이 있습니다. 이것이 라이브러리 버전 관리의 이유입니다.

이러한 경고를 모두 받은 후에도 시도해 보고 싶다면 복잡한 순서대로 다음을 사용할 수 있습니다.

  1. 애플리케이션과 동일한 디렉터리(또는 다른 미해결 디렉터리)에 적절한 라이브러리를 추출하고 다음 app명령을 실행합니다.

    LD_LIBRARY_PATH=. ./app
    

테스트를 통해 올바른 라이브러리가 선택되었는지 확인할 수 있습니다 LD_LIBRARY_PATH=. ldd ./app. 이는 root사용자 및 suid 애플리케이션에는 적용되지 않습니다.

  1. 실제로 애플리케이션에 대한 chroot 환경을 생성해 볼 수 있습니다. 이 chroot호출은 루트(/) 디렉터리에서 실행 중인 응용 프로그램의 위치를 ​​재설정한다는 점을 기억하세요. 실제로 이는 대체 glibc라이브러리를 제공해야 할 뿐만 아니라모두애플리케이션이 사용하는 라이브러리, 해당 라이브러리가 사용하는 라이브러리 등은 자급자족형 환경을 만드는 데 필요한 모든 것이 갖춰질 때까지 계속됩니다. 이는 또한 최소한 /dev/null, /dev/stdin및 장치와 및 파일 /dev/stdout이 있음을 의미합니다 . 데비안 환경의 좋은 예는 설치(확인 )입니다. 시작 명령 자체는 간단합니다./dev/log/etc/passwd/etc/grouppostfix/var/spool/postfix/

    chroot /home/of/chrooted/app ./app
    
  2. 가장 좋고 쉬운 방법은 docker애플리케이션에 적합한 이미지를 사용하는 것입니다. 설치 docker자체는 큰 주제입니다.도커 설치 가이드. 3.8+ 이상의 Linux 커널이 전제조건입니다. 이러한 제한 외에도 이는 다른 배포/라이브러리 세트가 필요한 응용 프로그램을 실행하는 가장 좋은 방법입니다.

또한 확인해보세요GLIBC를 업데이트하지 않고 새 소프트웨어를 실행하는 방법은 무엇입니까?

답변2

대상 버전의 배포판을 사용하여 chroot 환경을 설치하는 것은 노동 집약적인 솔루션입니다. 몇 기가바이트의 디스크 공간이 필요할 수 있지만 특히 데비안과 그 파생 제품에서는 상당히 고통스럽지 않습니다.슈루트사용 가능한 chroot 환경 설정 완료부팅 방지 프로그램이 chroot 환경에는 이전 또는 최신 버전의 Debian 또는 Ubuntu를 설치할 수 있습니다. 바라보다64비트 Debian/Ubuntu에서 32비트 프로그램을 어떻게 실행하나요?schroot+debootstrap 가이드에 대해 알아보세요. GLIBC 2.14의 경우 debootstrap을 사용하여 설치할 버전으로 jessie(Debian) 또는 precise( Ubuntu)를 선택할 수 있습니다 .trusty

기본 schroot 설정을 사용하면 다음과 같은 명령을 실행할 수 있습니다.

schroot -c jessie ./app

홈 디렉토리는 자동으로 chroot의 동일한 경로에 있습니다. 응용 프로그램이 홈 디렉터리에 설치되어 있고 홈 디렉터리의 다른 파일이나 chroot에 있는 소프트웨어에만 액세스하면 괜찮습니다.

관련 정보