Вопрос или проблема
Я использую Dreamhost VPS, который не предоставляет возможности sudo
. Dreamhost работает на Ubuntu.
Моя конечная цель – использовать Ruby для запуска безголового веб-браузера. Я выбрал гем Watir
, который требует chromedriver
.
Я установил chromedriver
в свою домашнюю директорию ~/chrome/
и добавил его в свой $PATH.
Я получаю ошибку:
/home/user/.rvm/gems/ruby-2.3.0/gems/selenium-webdriver-3.141.0/lib/selenium/webdriver/remote/response.rb:69:in
`assert_ok': unknown error: Chrome failed to start: exited abnormally
(Selenium::WebDriver::Error::UnknownError)
Похоже, мне нужно установить Xvfb
, и все руководства предлагают sudo apt-get install
, чего я сделать не могу.
Даже если я установлю Xvfb как отдельный пакет, ему не хватает многих дополнительных компонентов из X11:
[myServer]$ Xvfb :1 -screen 0 1024x768x24
(WW) Не удается открыть RGB файл "/usr/X11R6/lib/X11/rgb.txt"; будет использована встроенная копия.
_XSERVTransSocketOpenCOTSServer: Не удается открыть сокет для inet6
_XSERVTransOpen: сбой открытия транспорта для inet6/ps554048:1
_XSERVTransMakeAllCOTSServerListeners: не удалось открыть слушатель для inet6
ошибка при открытии файла политики безопасности /usr/X11R6/lib/X11/xserver/SecurityPolicy
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/misc/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/TTF/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/Speedo/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/Type1/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/CID/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/75dpi/, удаление из списка!
Не удалось инициализировать элемент пути шрифта /usr/X11R6/lib/X11/fonts/100dpi/, удаление из списка!
Серверная ошибка:
не удалось открыть шрифт по умолчанию 'fixed'
Временное решение – получить инстанс на Amazon Web Services, который позволяет использовать 100% sudo и установить все необходимые пакеты.
Если это система на основе Debian или Debian и в ней установлен apt
, вы все равно можете использовать его – в некотором роде.
Получите список URL-адресов, с которых apt-get install ....
будет загружать файлы – обратите внимание, что если пакеты уже загружены, он не выведет URL, так как файл существует в /var/cache/apt/archive
.
user@darkstar:~$ apt-get upgrade --allow-unauthenticated -y --print-uris
URL-адреса будут внизу вывода, вы можете извлечь их с помощью grep
, если это необходимо. В любом случае, соберите все файлы .deb
, необходимые для этого, а затем на машине, где у вас есть root, используйте alien
, чтобы конвертировать из формата deb
в .tgz
(или .tar.gz
). Подобно пакету Slackware, он будет содержать дерево каталогов от корня /
до того места, где файлы фактически находятся.
После того как все они будут сконвертированы, извлеките их все в какую-нибудь директорию. Перейдите в эту директорию и создайте новый файл .tar.gz
, содержащий весь необходимый контент, скопируйте его на свой веб-сервер, извлеките, а затем отредактируйте или установите свои $PATH
и $LD_LIBRARY_PATH
и т.д. по мере необходимости.
Ответ или решение
Для установки Headless Chrome на вашем VPS от Dreamhost без использования sudo
вам потребуется несколько шагов. Поскольку вы уже установили chromedriver
в вашу домашнюю директорию и добавили его в $PATH
, давайте решим проблему с запуском Chrome и зависимыми библиотеками без предоставления прав администратора.
Шаг 1: Установка необходимых библиотек
Вы правы в том, что Xvfb
необходим для запуска Chrome в безголовом режиме. К сожалению, установка через apt-get
требует прав суперпользователя. Однако вы можете установить Xvfb
и другие необходимые библиотеки вручную, скачав их .deb
файлы, а затем установив их на своем сервере.
-
Получите список необходимых пакетов
Воспользуйтесь командой для получения списка необходимых библиотек и их версий:apt-cache depends xvfb
-
Скачайте нужные
.deb
файлы
На машине с доступом к сети и правами администратора вы можете использовать команду:apt-get download <package-name>
Замените
<package-name>
на названия библиотек, необходимых для установкиXvfb
. -
Передача файлов на VPS
Используйтеscp
илиrsync
для передачи всех загруженных.deb
файлов на ваш VPS. -
Установка без sudo
На вашем VPS экстрактируйте скачанные пакеты и установите их:dpkg -x package.deb /some/target/directory
Замените
package.deb
на имя вашего скачанного файла. Повторите это для каждого пакета.
Шаг 2: Установка Xvfb
Когда все зависимости будут установлены, запустите Xvfb
следующим образом:
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
Убедитесь, что DISPLAY
переменная окружения корректно установлена. Это позволит вашим приложениям находить виртуальный дисплей.
Шаг 3: Настройка Watir и Selenium
Убедитесь, что у вас установлены необходимые гемы:
gem install watir
gem install selenium-webdriver
Шаг 4: Проверка работы
Теперь вы можете попробовать запустить скрипт на Ruby с использованием Watir. Убедитесь, что указали правильный путь к Chromedriver вашей установки. Например:
require 'watir'
browser = Watir::Browser.new :chrome
# Ваш код для автоматизации
browser.close
Заключение
Если вы столкнетесь с проблемами в процессе установки, вы можете рассмотреть другие пути, например использовать Docker, если у вас есть доступ к нему на сервере. Это позволит вам полноценно управлять средой и зависимостями без необходимости использовать sudo
.
Также, так как Amazon Web Services позволяет использовать полные права администратора, вы можете создать временную инстанцию, чтобы подготовить окружение, а затем перенести его на ваш VPS.
Если у вас возникают дополнительные вопросы или проблемы, не стесняйтесь спрашивать.