Centos 5.8에 PhantomJS 1.6 설치

Centos 5.8에 PhantomJS 1.6 설치

Centos 5.8 서버에 PhantomJS v1.6을 설치하려고 합니다. phantomjs를 실행하려고 할 때 다음 오류가 발생합니다.

phantomjs: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by phantomjs)
phantomjs: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by phantomjs)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by phantomjs)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.10' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtNetwork.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtCore.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libfreetype.so.6)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libfontconfig.so.1)

일부 연구 결과에 따르면 이러한 파일은 제가 다루어야 할지 확신할 수 없는 매우 낮은 수준의 시스템 파일이라고 믿게 되었습니다. 내 서버에서 이것을 실행하는 방법에 대한 아이디어가 있습니까?

답변1

glibc 및 libstdc++에서 버전이 지정된 기호를 찾고 있습니다. 시스템의 libs 버전이 오래되었으므로 일치하지 않습니다. 이는 CentOS가 RedHat AdvancedServer를 추적하기 때문에 새 소프트웨어에 있어서는 상당히 보수적입니다.

다음과 같이 libstdc++에서 기호를 확인할 수 있습니다.

nm -D /usr/lib64/libstdc++.so.6 | grep GLIBC

nm명명된 기호를 덤프하고, 동적 라이브러리의 경우 -D, 이름의 경우 grep을 덤프합니다.

흠, 이것들은 꽤 핵심 라이브러리입니다. libstdc++는 OS에서 C++를 사용하는 모든 앱에서 사용됩니다. glibc는 거의 모든 곳에서 사용됩니다. 아마도 이러한 내용을 현재 위치에서 업데이트하고 싶지 않을 것이며, 그렇게 하더라도 다음 시스템 업데이트에서 업데이트가 손실될 수 있습니다.

Firefox에서도 비슷한 문제가 있었습니다. 다음과 같이 처리할 수 있습니다.

  • Fedora RPM 저장소를 찾으세요.이 장소 유용한 것 같습니다.
  • 버전을 선택하세요. 어느 쪽인지 너무 걱정하지 마세요. 작동하지 않으면 다시 시도하겠습니다.
  • 선택한 버전에 대한 libc 및 libstdc++ x86_64 RPM을 찾으세요. 다운로드 해.
  • tmp 디렉토리로 이동하여 압축을 해제합니다.rpm2cpio libstdc++WHATEVER.rpm | cpio -iv --make-directories
  • 다른 디렉토리를 만드세요. 이 디렉토리는 조금 남아 있어야 합니다. /usr/local 또는 홈 디렉토리에서 장소를 찾으세요. 아마도 이름을 지정하기 위해 $HOME/lib/lib64라고 말하고 싶습니다. 필요에 따라 이름을 바꾸십시오.mkdir $HOME/lib/lib64
  • libstdc++.so.6 파일을 찾아 $HOME/lib/lib64에 복사합니다.

이제 $HOME/lib/lib64(또는 붙인 위치)에 필요한 lib가 있습니다. 이제 앱을 실행할 때 새 lib를 찾는 방법을 알려주어야 합니다.

  • LD_LIBRARY_PATH=$HOME/lib/lib64:$LD_LIBRARY_PATH appThatNeedsNewLib arg1 arg2

이 작업을 여러 번 수행할 준비를 하십시오. 이 작업을 수행했을 때 올바른 libstdc++ 버전을 얻으면 업데이트를 다운로드해야 하는 다른 이전 파일도 노출되었습니다.

답변2

적용 대상: PhantomJS 1.6. Centos 5.6에서 테스트되었습니다.

소스에서 컴파일하면 매력적으로 작동합니다.

./build.sh

원하는 곳 어디에서나 실행할 수 있는 배포를 구축한 후 해당 오류가 발생하는 파일을 복사하고 교체하기만 하면 됩니다.

소스에서 컴파일하고 필요한 파일을 복사하는 것과 동일한 문제가 있었습니다. (나는 내가 한 것처럼 가정하고 있습니다: diff 서버에서 컴파일하고 파일을 복사했지만 항상 동일한 서버에서도 그렇게 할 수 있습니다)

usr/local/src에 다운로드하여 컴파일했습니다. 필요한 파일을 원래 위치에 복사했습니다.

cp -rP /usr/local/src/phantomjs-1.6.0-linux-x86_64-dynamic/bin/phantomjs* /data/phantomjs/bin/
cp -rP /usr/local/src/phantomjs-1.6.0-linux-x86_64-dynamic/lib/l* /data/phantomjs/lib/

경고: WebKit 모듈에 있는 수천 개의 파일로 인해 소스에서 PhantomJS를 컴파일하는 데 시간이 오래 걸립니다. 최신 시스템에서 4개의 병렬 컴파일 작업을 수행하면 전체 프로세스에 약 30분이 소요됩니다. 사용 가능한 경우 기성 바이너리 패키지를 설치하는 것이 좋습니다. 리눅스

참고 1: build.sh는 기본적으로 4개의 병렬 컴파일 작업을 시작합니다. 가상 머신/서버 또는 기타 제한된 환경에서 구축할 때 숫자를 전달하여 작업을 줄입니다. 예를 들어 ./build.sh --jobs 1은 한 번에 하나의 컴파일 작업만 설정합니다.

관련 정보