
나는 사용자 동적 종속성(/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을 사용하여 동일한 패키지를 설치하기에 충분한 정보입니다.
공유 라이브러리를 tar업하는 경우 해당 라이브러리가 구성 파일( 에 설치되는 파일 포함 /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
필터링할 파일이 많이 있습니다.)