2014-01-21 4 views
1

У меня есть учетная запись с bluehost, которая дает мне ssh доступ, но нет sudo, поэтому я не могу использовать yum (это CentOS-сервер).Использование/установка библиотек на сервере без sudo

Я хочу запустить сценарий, который зависит от phantomjs, но он не работает, по-видимому, потому что у меня нет доступа к freetype и fontconfig. Обратившись к ним, они сказали мне

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

Спрашивая, если не было никакого способа сделать это, они ответили

Это может быть возможно, но мы не будем оказывать любую поддержку для него или установить его для вас.

Итак, мой вопрос заключается в том, как я могу установить эти библиотеки самостоятельно (желательно уже скомпилированные/готовые) и использовать их phantomjs?

ответ

1

Одна возможность состоит в том, чтобы загрузить вспомогательные библиотеки, которые вам нужно в «частном» месте, а затем изменить заголовки вашей программы для поиска этого местоположения.

Мимические ваша целевая среда

  • Установите виртуальную машину на собственной машине работает тот же CentOS строить, как хостинговой компании. Это означает тот же выпуск CentOS и ту же архитектуру процессора. (cat /etc/*-release должен предоставить вам одну информацию, uname -a предоставит вам другую информацию. В частности, вы хотите убедиться, что у вас есть аналогичная версия библиотеки C, /lib/libc.so.? должна быть исполняемой и предоставить вам некоторые сведения о используемой библиотеке C .)
  • Установите необходимые пакеты с помощью YUM на свой виртуальный хост.
  • Убедитесь, что ваш исполняемый файл работает.

Выяснить, что целевая среда отсутствует

  • Выполнить ldd /usr/bin/your-app, чтобы получить список библиотек, к которому он относится. В частности, для очистки списка: ldd/usr/bin/your-app | cut -d '(' -f 1 | cut -d '>' -f 2 | sed -e 's, [\ t], g' | sort | uniq> my-required-libs

  • Log на удаленный сервер и скопировать файл через, а затем запустить что-то вроде:

    #/бен/ш

    недостающого ЛИЭСА для Lib в $ (< моего-требуемые-ЛИЭС) сделать if [-f "$ lib"] then echo "OK $ lib" else echo "NO $ lib" эхо «$ Lib» >> недостающей ЛИЭС фи сделано

  • missing-libs Копия обратно на свой виртуальный хост и mkdir папку с именем, например, ~/my-app/lib; затем cp $(<missing-libs) /home/myself/my-app/lib

ВНИМАНИЕ, что вы будет необходимость создания этой точный путь на вашем виртуальном хостинге, включая имя пользователя и так далее - так что если ваша директория для записи на общем хосте /home/myself убедитесь, что этот каталог находится под /home/myself на виртуальном хосте.

Alter RPATH исполняемого файла, чтобы указать на другое место

  • библиотеки Найдите исполняемый файл приложения и изменять свои заголовки с помощью chrpath (вы, возможно, потребуется yum install chrpath в виртуальной машине, так как это является необычным программа нужна):

    chrpath --list/USR/бен/ваш-приложение

    Если отчеты любой существующий RPATH, то вы будете хотеть PREPEND путь ~/мое приложение/LIB к тому, что RP ATH с : - например, если chrpath --list показано /usr/lib/my-app/plugins, вы можете использовать /home/myself/my-app/lib:/usr/lib/my-app/plugins. В более обычном случае просто используйте --replace с именем каталога, в который вы скопировали необходимые библиотеки.

    chrpath --replace ~/мое-приложение/Библиотека/USR/бен/ваше-приложение

  • Теперь скопируйте исполняемый файл с новым RPATH и каталогом полной поддержки библиотек к общему хосту.

Это все «дружественное» к многопользовательской настройке с общим хостингом, в отличие от других решений, например, chroot тюрьмы.

В качестве альтернативы, создать LD_LIBRARY_PATH обертку

Если chrpath не работает для настройки (например,чрезвычайно строги SELinux контексты), вы можете быть в состоянии пропустить chrpath шаг и вместо того, чтобы сделать что-то вроде:

mv ~/my-app/bin/my-app ~/my-app/bin/my-app.real 

и сделать сценарий оболочки, как

#!/bin/sh 
    export LD_LIBRARY_PATH=/home/myself/my-app/lib 
    exec /home/myself/my-app/bin/my-app.real 

... и заменить имя исходного Binary с этим скрипт.

Обратите внимание, что теоретически вы можете заменить практически любую библиотеку таким образом, но когда библиотеки требуют файлов данных в определенных местах (например, /etc) или динамически вызывают подбиблиотеки из системных местоположений (например, /usr/lib64), вы можете столкнуться с переписывать их с новыми путями в своих сценариях ./configure или редактировать их источники способами, которые, вероятно, не стоят усилий во всех, кроме самых экстремальных случаях.

EG: Вещи, которые недружелюбны к перемещению таким образом: libc и подключаемые модули аутентификации.

+0

Я уже много лет использую VM, и даже тогда это был только VMWare (кратко) и Virtualbox. Разве VM не будет использовать кучу ресурсов? Наверное, есть какое-то решение VM, о котором я не знаю. Я думал о чем-то вроде [docker] (https://www.docker.io/), но похоже, что ему тоже нужно sudo. Почему вы говорите, что «chroot» будет недружественным для этого (кроме того, что он нуждается в sudo, так что это не сработает)? – user137369

+0

Я был успешным с вариантом этого решения, и это действительно помогло мне добраться туда. Спасибо – user137369

+0

Извините, разъяснение, VM - это временная вещь на вашей локальной машине, если у вас нет запасной машины, которую вы можете использовать для макет-системы. И, да, 'sudo' - вот почему' chroot' было бы трудно использовать здесь, а также требовать, чтобы иногда искажалось приложение chroot'а из-за пределов тюрьмы – BRFennPocock

0

Похоже, вам нужна помощь хостинговой компании, если вы не можете запустить YUM для установки пакетов самостоятельно. В Linux вы не можете установить что-либо, если вы не можете sudo или стать root. Если они вам не помогут (из-за чего это звучит), я перейду к VPS вместо общего хоста. Это даст вам возможность запускать YUM и внести необходимые изменения на сервер на уровне администратора.

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

Источник: работал в крупной хостинговой компании на протяжении многих лет

+0

Я, конечно, понимаю, почему они этого не сделают, но это не значит, что это невозможно. Программное обеспечение, доступное через 'yum', может быть установлено без корневого доступа вручную, они просто блокируются для одного пользователя (здесь нет проблем). Мне не нужно * 'yum', мне просто нужны эти библиотеки. Я спрашиваю, как их установить. – user137369

+0

Вы пытались построить его из источника? Это может позволить вам сделать это в зависимости от того, какие параметры безопасности установлены. Следующий вопрос будет, если они скажут, что есть ли это в phpinfo? Например: FreeType Support => enabled FreeType Linkage => с freetype FreeType Version => 2.3.7 –

+0

Да, freetype показывает в phpinfo. Я не пробовал компиляцию из источника, главным образом потому, что не знал, что с ними делать после (как/где их настроить, чтобы phantomjs их видел и использует). – user137369

Смежные вопросы