Установите PhantomJS 1.6 на Centos 5.8

Я пытаюсь установить PhantomJS v1.6 на свой сервер Centos 5.8. Я сталкиваюсь с следующей ошибкой при попытке запустить 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)

Некоторые исследования заставляют меня поверить, что это довольно низкоуровневые системные файлы, с которыми я не уверен, что мне следует связываться. Любые идеи, как запустить это на моем сервере?

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/

Предупреждение: Компиляция PhantomJS из исходного кода занимает много времени, в основном из-за тысяч файлов в модуле WebKit. С 4 параллельными заданиями на современном компьютере весь процесс занимает около 30 минут. Настоятельно рекомендуется установить готовый двоичный пакет, если он доступен. Linux

Примечание 1: build.sh по умолчанию запускает 4 (четыре) задания параллельной компиляции. При сборке на виртуальной машине / сервере или в другой ограниченной среде уменьшите число заданий, передав число, например./build.sh --jobs 1, чтобы установить только одно задание компиляции за раз.

Он ищет версионные символы в glibc и libstdC++. Версии в библиотеках вашей системы более старые, поэтому они не совпадают, что имеет смысл, поскольку CentOS отслеживает RedHat AdvancedServer, который довольно консервативен в отношении нового программного обеспечения.

Вы можете проверить символы в вашем libstdC++ следующим образом:

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

nm создает дамп именованных символов, -D для динамических библиотек и grep для ваших имен

Хм, это симпатичные ядра. libstdC++ используется любым приложением, которое использует C++ в вашей ОС. glibc используется практически всем. Вы, вероятно, не хотите обновлять их на месте, и даже если бы вы это сделали, вы, вероятно, потеряете свои обновления при следующем обновлении системы.

У меня была похожая проблема с Firefox, вы можете справиться с этим следующим образом:

  • Найдите репозиторий Fedora RPM. Этот сайт кажется полезным.
  • Выберите версию. Не беспокойтесь о том, какой из них; если не получится, попробуем еще раз
  • Найдите RPM libc и libstdC++ x86_64 для выбранной вами версии. Загрузить.
  • Перейдите в каталог 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 (или где бы вы ее ни вставляли). Теперь, когда вы запускаете свое приложение, вы должны указать ему, как искать новую библиотеку.

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

Будьте готовы сделать это несколько раз - когда я сделал это, получая правильную версию libstdC++, я обнаружил и другие старые файлы, к которым мне также нужно было загружать обновления.

Другие вопросы по тегам