Как я могу скомпилировать RpostgreSQL с активацией libssl и libpg и SSL

Я использую R в Windows для подключения к базе данных PostgreSQL, размещенной на AWS. База данных настроена с использованием forcesl = 1 — это означает, что любое соединение должно быть установлено с sslmode=require.

Базовый пакет RPostgreSQL не предоставляет каких-либо параметров ssl. Это поднималось как проблема много раз (см. здесь, здесь, здесь и здесь)

Я знаю, что есть обходной путь с использованием пакета RPostgres, но по другим причинам функциональности я бы предпочел использовать пакет RPostgreSQL.

В нескольких ответах (например, здесь) предлагается использовать измененное имя базы данных для подключитесь к ssl так:

dbConnect(dbDriver('PostgreSQL'),
    dbname   = 'dbname=foobar sslmode=require', # modified dbname
    host     = 'foobar.rds.amazonaws.com',
    port     = 5439,
    user     = 'foobar',
    password = 'foobar')

Но это не сработало для меня, используя версию пакета CRAN. Это привело меня к недавней проблеме, поднятой на github RPostgreSQL: https://github.com/tomoakin/RPostgreSQL/issues/88

Первоначальный пользователь мог использовать измененный метод dbname, когда он компилировал пакет из исходного кода. В Windows, используя последний исходный пакет (0.6.2), скомпилированный с помощью RTools, я получаю следующую ошибку при запуске измененного кода dbname:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect xxxxx.rds.amazonawss.com:5432 on dbname "xxxxxxx": sslmode value "require" invalid when SSL support is not compiled in
)

Судя по этой и остальной части потока, SSL невозможен из текущего источника как в Windows, так и в Mac. Однако разработчик предлагает:

Если вы компилируете в среде, где libssl и libpq были активированы через SSL, драйвер может использовать SSL.

Я думаю, это означает, что я могу вручную загрузить библиотеки и скомпилировать их самостоятельно, но я не уверен, что это быстрое исправление или оно потребует значительного переписывания пакета. Любая помощь или указание в правильном направлении будут высоко оценены. Как я могу сделать это безопасным и воспроизводимым способом?


person Chris    schedule 06.09.2017    source источник
comment
Удалось ли вам решить вашу проблему в Windows?   -  person Julien Navarre    schedule 10.04.2018
comment
@JulienNavarre нет, к сожалению, нет. См. здесь: github.com/tomoakin/RPostgreSQL/issues/ Что нужно написать файл configure.win в пакете   -  person Chris    schedule 11.04.2018


Ответы (2)


Мне удалось решить эту проблему для пользователей El Capitan macOS R в моем офисе, выполнив следующие действия:

  • Удалите пакет RPostgreSQL R, если он уже установлен. Методы различаются в зависимости от того, как это сделать, но либо в консоли R.app, либо в R в Терминале введите remove.packages('RPostgreSQL')

  • Убедитесь, что у вас установлен Homebrew, и из терминала запустите: brew install libpq openssl

  • Откройте R.app и в меню Packages & Data выберите Package Installer.

  • В первом раскрывающемся меню выберите CRAN (sources) (выберите ближайшее к вам зеркало, если вы не использовали его раньше).

  • Используя поиск пакетов, найдите RPostgreSQL и для опций ниже оставьте отмеченным At System Level и отметьте Install Dependencies, затем нажмите Install Selected.

  • Выйдите из всех программ R и RStudio и попробуйте использовать новый пакет RPostgreSQL, установленный из исходного кода.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Если у вас есть серьезные зависимости компиляции от OpenSSL или libpq для других программ, я понятия не имею, как выполнение вышеизложенного может нарушить работу других программ.

person Sena Heydari    schedule 16.02.2018
comment
Спасибо, но мне очень нужно решить эту проблему в Windows. - person Chris; 16.02.2018
comment
Мне также пришлось установить пакет postgresql через Brew перед повторной установкой/пересборкой пакета RPostgreSQL, чтобы заставить работать поддержку SSL. - person Alex; 22.05.2020

Сборка на Windows — это червячная банка. См. набор инструментов R-Admin для Windows. . Единственные исполняемые файлы openSSL для Windows принадлежат неизвестным разработчикам. Сборка и установка openSSL в Windows — это еще одна проблема, которую вам нужно исследовать. Может быть проще установить openSSL в среде сборки R Windows, но у меня нет в этом опыта.

EDIT: оказывается, что при установке postgres в Windows postgres устанавливает openSSL. Это означает, что основной проблемой в Windows является установка набора инструментов Windows для R, установка postgres, а затем указание системы сборки R на libpq.

Другим решением будет запуск Linux на виртуальной машине под Windows. Вот один из способов Установить Linux в Windows. С linux, в зависимости от дистрибутива, вам нужно будет сделать что-то вроде следующего из командной строки linux (для варианта linux RedHat):

sudo yum install openSSL
sudo yum install postgresql96
sudo yum install R

Строка 2 устанавливает libpq, необходимый для RPostgreSQL. Это libpq, который должен быть скомпилирован с openSSL. Вы будете устанавливать и использовать только клиент PostgreSQL, а не сервер, а также получите psql. Могут потребоваться другие пакеты, см. набор инструментов R linux. Обычно они связаны с вышеперечисленным и не должны быть проблемой.

RPostgreSQL содержит версию libpq, но скрипт компиляции не выглядит так, как будто он проверяет наличие openSSL, по крайней мере, не на macOS. Поэтому важно, чтобы система установила libpq.

Также важно, чтобы сценарий настройки RPostgreSQL нашел pg_config, который устанавливается при установке клиента postgres. Не уверен насчет сквозных окон. Поэтому убедитесь, что pg_config находится на вашем пути. Введите pg_config, чтобы узнать.

Теперь вам нужно скачать и скомпилировать RPostgreSQL. Чтобы запустить R, введите следующее в терминале Linux.

R

Затем изнутри R получите, скомпилируйте и установите RPostgreSQL:

install.packages("https://cran.r-project.org/src/contrib/RPostgreSQL_0.6-2.tar.gz", repo=NULL, type="source")

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

Надеюсь, это натолкнет вас на некоторые идеи.

person Neil    schedule 15.09.2017
comment
Посмотрев на это немного больше, кажется, что openssl не является проблемой, поскольку он скомпилирован в установку Windows по умолчанию из EnterpriseDB. Однако при установке из исходников в Windows пакет упорно использует идущий в комплекте libpq вместо предустановленного (несмотря на то, что pg_config лежит у меня в PATH). Я думаю, что исправление этой проблемы (или поиск обходного пути) — последний шаг к ее решению. - person Chris; 18.09.2017
comment
Путь R может отличаться от пути ОС. Вам нужно убедиться, что путь R содержит pg_config. См. biostat.wisc.edu/~kbroman/Rintro/Rwinpack.html - person Neil; 19.09.2017
comment
В моем случае из графического интерфейса R Sys.getenv("PATH") не возвращает местоположение pg_config.exe. - person Neil; 19.09.2017
comment
Вы можете попробовать что-то вроде path <- paste(Sys.getenv("PATH"), "C:\\Program Files\\PostgreSQL\\9.6\\bin", collapse=";") Sys.setenv(PATH = path) в графическом интерфейсе R. - person Neil; 19.09.2017
comment
Никаких кубиков - pg_config уже был в моем PATH, и он все еще использовал версию в комплекте. Поскольку файл configure.win в RPostgreSQL пуст, а в файле configure нет ссылок на Windows, мне кажется, что компиляция из существующей установки libpq не работает в Windows. - person Chris; 19.09.2017