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

Установить 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)

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

решение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++ открыло доступ к другим старым файлам, для которых мне также нужно было загрузить обновления.

решение2

Применимо к: PhantomJS 1.6. Протестировано на Centos 5.6.

Вы можете скомпилировать его из исходного кода, и он будет работать как часы.

./build.sh

После сборки выполните развертывание, которое вы можете запустить где угодно, просто скопируйте и замените файлы, в которых возникает эта ошибка.

У меня была та же проблема, я скомпилировал его из исходного кода и скопировал требуемый файл. (Я предполагаю, что сделал так же: скомпилировал на сервере различий и скопировал файлы, но вы всегда можете сделать это на том же сервере)

Скачал в 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, чтобы задать только одно задание компиляции за раз.

Связанный контент