ldd 출력을 가져와서 이러한 .so 파일을 패키징할 수 있습니까?

ldd 출력을 가져와서 이러한 .so 파일을 패키징할 수 있습니까?

나는 사용자 동적 종속성(/lib64의 종속성이 아니라 /usr/lib64의 종속성)을 얻기 위해 이 작업을 수행합니다.

[root@localhost bin]# ldd Xvfb | grep '/usr/lib64/' | cut -d '=' -f1
    libcrypto.so.10 
    libGL.so.1 
    libpixman-1.so.0 
    libXfont.so.1 
    libXau.so.6 
    libxshmfence.so.1 
    libXdmcp.so.6 
    libglapi.so.0 
    libXext.so.6 
    libXdamage.so.1 
    libXfixes.so.3 
    libX11-xcb.so.1 
    libX11.so.6 
    libxcb-glx.so.0 
    libxcb-dri2.so.0 
    libxcb.so.1 
    libXxf86vm.so.1 
    libdrm.so.2 
    libfreetype.so.6 
    libfontenc.so.1 
    libfreebl3.so 

이 파일을 /usr/lib64에서 다른 시스템(CentOS에서 CentOS로, 거의 동일한 버전)으로 복사하고 싶습니다. 대부분 tarball을 전송하는 방식입니다. 이들 중 대부분은 최신 버전에 대한 심볼릭 링크일 가능성이 높으므로 이러한 파일도 포함되어야 하며 심볼릭 링크는 다른 시스템에서 다시 생성되어야 합니다.

대상 컴퓨터에 패키지 관리자가 없고 샌드박스 처리되어 있기 때문에(인터넷 없음) 이런 방식으로 수행해야 합니다.

이 목록을 tar에 전달할 수 있는 문자열로 변환할 수 있다고 생각하지만 어떻게 해야 하는지 잘 모르겠습니다. 일부 바이너리를 사용하여 이 작업을 수행해야 하므로 가능하다면 한 줄로 작성하는 것이 좋습니다. 어떤 아이디어가 있나요?

답변1

아마도 어느 쪽인지 결정하는 것이 더 나을 것입니다.가방이러한 공유 라이브러리는 이 패키지 목록을 사용하여 yum을 통해 두 번째 시스템에 해당하고 설치됩니다. 이렇게 하면 yum이 업데이트를 찾을 때 업데이트를 받게 됩니다.

그건 그렇고, 당신은 아마도아니요다음과 같은 경우에 이 작업을 수행하고 싶습니다.

  • 두 번째 컴퓨터에는 네트워크 액세스 권한이 없습니다.
  • 테스트 목적으로 yum이 더 이상 특정 패키지 버전을 제공하지 않는 약간 오래된 시스템에 대한 구성을 복사해야 합니다.

각 파일에 대한 패키지 정보를 수집합니다 rpm -qf. 예:

rpm -qf /usr/lib64/libfreebl3.so

그러면 패키지와 해당 버전이 제공됩니다. yum을 사용하여 다른 컴퓨터에 동일한 패키지를 설치하는 데 충분한 정보입니다.

공유 라이브러리를 압축하는 경우 구성 파일(에 설치될 라이브러리 포함 /etc/ld.so.conf.d)에 따라 달라질 수 있다는 점도 알아야 합니다. 동일한 파일에 속한 부분을 찾을 수 있습니다예를 들어 다음을 사용하십시오 rpm -ql.

rpm -ql $(rpm -qf /usr/lib64/libfreebl3.so)

물론 일부 중복된 내용도 있을 것입니다. 또한 이러한 라이브러리는 다른 명확하지 않은 패키지(자체 구성 파일 포함)에 의존할 수 있습니다. 이 경우rpm -qR 돕다하지만 필요한 파일이 있는지 확인하려면 약간의 작업이 필요합니다.)

라이브러리 목록에서 작업:

ldd Xvfb | grep '/usr/lib64/'

다음과 같이 패키지 목록을 만들 수 있습니다.

ldd Xvfb | grep '/usr/lib64/' | xargs rpm -qf

해당 파일 목록을 가져옵니다.

ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql

그리고 타르저것위로:

tar czf /tmp/blob.tar.gz $(ldd Xvfb | grep '/usr/lib64/' | xargs -n 1 rpm -qf | xargs -n 1 rpm -ql)

한 단계에서 sort -u중복된 패킷을 필터링 하고 싶을 수도 있습니다. rpm일부 라인에서는 여러 패키지가 허용되지만 다른 라인에서는 허용되지 않으므로 -n 1안전을 위해 해당 옵션을 사용합니다(r).

제안된 대로 라이브러리 파일만 필요한 경우 다음을 수행할 수 있습니다.

#!/bin/sh
mkdir  /tmp/xvfb
cd /usr/lib64
tar czf /tmp/xvfb/Xvfb.tar.gz $(ldd /usr/bin/Xvfb | grep '/usr/lib64/' | cut -d '=' -f1 | awk '{print $1}' | while read IN; do OUT=`readlink $IN`; cp -rf $OUT /tmp/xvfb/$IN; echo /tmp/xvfb/$IN; done)

그리고 제가 제안하는 방법은 rpm -q파일에 대한 심볼릭 링크를 제공하는 것입니다. (CentOS6으로 빠르게 확인해 보면 ldconfig 파일은 없지만 /usr/share필터링해야 할 파일이 많습니다).

관련 정보