- PVSM.RU - https://www.pvsm.ru -

R и СИБ. Как устранить противоречие интересов и запустить R на Linux в оффлайн-режиме

Является продолжением предыдущих публикаций [1].

Очень часто попытки применить инструменты DataScience в корпоративной среде встают в полное противоречие с требованиями Службы Информационной Безопасности (СИБ). В мире DataScience рекомендация «поставь с гитхаба» становится практически нерешаемой при полной изоляции аналитической машины от интернета. Тем не менее, задача запуска на linux инфраструктуры R в offline окружении вполне решаемая. Ниже приведу последовательность мантр, которые позволят это исполнить. Если какие-то шаги будут не совсем прозрачными, то скорректирую по мере появления комментариев. Эти же шаги можно использовать и для online инсталляции, пропуская шаги, относящиеся к хитрым трюкам или созданию локальных репозиториев. Собрано по крупицам на основании многократных инсталляций под разнообразные задачи. Практика показала, что тема весьма актуальна.

Исходные допущения и обозначения

  • srchost — отдельная машина с доступом в Интернет;
  • dsthost — целевая машина для инсталляции R аналитики;
  • на обе машины установить CentOS 7 последней версии;
  • с обеих машин доступны репозитории yum (rhel/centos и epel).

Установка пакетов в ОС, необходимых для работы R App

Шаги исполняются на srchost и dsthost. В качестве srchost может выступать и просто Windows машина аналитика, тогда шаги по развертыванию srchost можно опустить.

На srchost пакеты устанавливаются из интернета, на dsthost — из локального репозитория. Далее srchost будет использоваться для создания miniCRAN.

sudo yum update
sudo yum -y install chrony
sudo systemctl start chronyd
sudo systemctl enable chronyd
sudo systemctl status chronyd
sudo yum -y install epel-release
uname -a
sudo yum -y install wget tree
sudo yum -y install wget libcurl-devel openssl-devel cyrus-sasl-devel libxml2-devel libpng-devel libjpeg-devel python python-devel proj proj-devel mesa-libGL mesa-libGL-devel mesa-libGLU mesa-libGLU-devel gmp-devel mpfr-devel cairo-devel libXt-devel gtk2-devel v8-devel udunits2 udunits2-devel xorg-x11-server-Xvfb unixODBC* postgresql-devel mariadb-devel mysql-devel gcc-gfortran* texlive*, ufw, dejavu*, psmisc, rrdtool, wireshark, lrzsz
sudo yum -y install dejavu-fonts-common dejavu-sans-mono-fonts rrdtool psmisc lrzsz gdal* proj-devel proj-epsg proj-nad protobuf-devel geos-devel

Ставим все, что касается LaTeX

Необходимо для работы RMarkdown

sudo yum -y install texlive texlive-latex texlive-xetex texlive-collection-fontsrecommended texlive-collection-latex texlive-collection-latexrecommended  texlive-xetex-def texlive-collection-xetex

Устанавливаем шрифты

Добавляем поддержку кириллицы:

sudo yum -y install texlive-cyrillic texlive-collection-langcyrillic texlive-cyrillic-doc texlive-framed texlive-titling texlive-*font* linux-liber*

Установка Roboto Condensed:

wget http://li.nux.ro/download/nux/dextop/el7/x86_64//google-roboto-common-1.2-2.el7.nux.noarch.rpm
wget http://li.nux.ro/download/nux/dextop/el7/x86_64//google-roboto-condensed-fonts-1.2-2.el7.nux.noarch.rpm
sudo yum localinstall google-roboto-common-1.2-2.el7.nux.noarch.rpm
sudo yum localinstall google-roboto-condensed-fonts-1.2-2.el7.nux.noarch.rpm
sudo fc-cache

Установка R

sudo yum -y install R

Создаем репозиторий miniCRAN на srchost

Используем пакет miniCRAN для инициализации репозитория на srchost. Предполагаем, что она работает под управлением CentOS и на ней стоит R. Считаем, что локальная директория /opt/miniCRAN, куда будут загружаться необходимые пакеты, уже создана.

Ставим miniCRAN

sudo -i R
install.packages("miniCRAN") # инсталляция miniCRAN

Выкачиваем нужные нам пакеты (дополнить чего не хватает для вашего проекта) вместе с зависимостями

sudo -i R
library("miniCRAN")
tags <- c("tidyverse", "lubridate", "glue", "scales", "forcats", "readxl", "magrittr", "stringi", "stringr", 
          "futile.logger", "jsonlite", "Cairo", "RColorBrewer", "extrafont", "hrbrthemes", "DBI", "RPostgreSQL", 
          "config", "shiny", "shinyjqui", "shinythemes", "shinyBS", "shinyjs", "shinyWidgets", "shinycssloaders", 
          "formattable", "anytime", "tictoc", "digest", "officer", "openxlsx", "assertr", "checkmate", "udunits2", 
          "devtools", "DT", "data.table")
pkgList <- pkgDep(tags, suggests=TRUE, enhances=FALSE)
makeRepo(pkgList, path="/opt/miniCRAN", repos="https://cloud.r-project.org/", type=c("source"))

на dsthost вручную скопировать содержимое /opt/miniCRAN

set miniCRAN dir as default CRAN URI

На dsthost в файле /usr/lib64/R/library/base/R/Rprofile дописываем

local({
  uri <- paste0("file://", normalizePath("/opt/miniCRAN", winslash="/"))
  options(repos = c(CRAN = uri))
})

Руками добавляем библиотеку ICU версии > 52

На srchost

  • Скачиваем пакет ICU [2], требуемый для сборки stringi.
  • Переносим пакет на dsthost и регистрируем:
    • Размещаем его в /opt/icu55/data.
    • Добавляем/исправляем путь к библиотеке в /usr/lib64/R/etc/Renviron:
      # manual ICUDT
      ICUDT_DIR=/opt/icu55/data
      # --------------------

Подключение к MS SQL из-под linux требует доп. шагов по установке драйверов

"Установка Microsoft ODBC Driver for SQL Server для Linux и macOS" [3]:

sudo su
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
exit
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
sudo ACCEPT_EULA=Y yum install msodbcsql

обновляем пакеты в R

на dsthost

sudo -i R
update.packages(ask=FALSE)

Вручную собираем пакет udunits2

После установки библиотек ищем расположение h файлов следующей командой find . -type f -name udunits2.h и запускаем инсталляцию пакета из консоли R со следующими параметрами:

install.packages("udunits2", configure.args='--with-udunits2-include=/usr/include/udunits2/')

Ставим пакеты в R средствами штатного install.packages()

sudo -i R
install.packages(c("tidyverse", "lubridate", "glue", "scales", "forcats", "readxl", "magrittr", "stringi", "stringr", 
          "futile.logger", "jsonlite", "Cairo", "RColorBrewer", "extrafont", "hrbrthemes", "DBI", "RPostgreSQL", 
          "config", "shiny", "shinyjqui", "shinythemes", "shinyBS", "shinyjs", "shinyWidgets", "shinycssloaders", 
          "formattable", "anytime", "tictoc", "digest", "officer", "openxlsx", "assertr", "checkmate", "udunits2", "devtools", "DT", "data.table"))

Изменение переменных окружения, используемых в скриптах

  • Изменение переменных окружения на сервере linux
    vi /etc/environment
    R_CONFIG_ACTIVE=production
    source /etc/environment
    echo $R_CONFIG_ACTIVE
    sudo systemctl restart shiny-server

Установка продуктов RStudio

на dsthost
Завести отдельного пользователя с uid > 100! от лица которого будем заходить в RStudio Server:

sudo useradd ruser
sudo passwd XXX
sudo usermod -aG wheel ruser # to make user 'sudo-user'

Установка RStudio Server free

на srchost

  1. download RStidio Server from link below Страница загрузки [4]
  2. Copy RPM to remote server dsthost
    on dsthost
  3. install it using rpm -ihv ./rstudio-server ... .rpm

Установка RStudio Shiny Server free

на srchost

  1. download Shiny Server from link below Страница загрузки [5]
  2. Copy RPM to remote server dsthost
  3. install it using rpm -ihv ./shiny-server ... .rpm

Проверяем web доступ

Shiny Server

  • http://<server-ip>:3838/ — общая стартовая страница с приложениями
    RStudio Server
  • http://<server-ip>:8787

Установка приложения

на srchost:

  1. Установка собственных пакетов с Github
    • cd /tmp && git clone https://github.com/path1/pack.git (from bash on local server)
    • copy pack to /tmp folder in remote server dsthost
    • on remote server do in R: devtools::install_local(path="/tmp/pack")
  2. Распаковка скриптов приложения с предоставленного дистрибутива в домашнюю директорию ~/R/ пользователя ruser
  3. Оставляем режим работы Shiny Server для одного аналитика (ruser), делаем мапирование его домашней директории R на /srv/shiny-server командой ln -s <SOURCE> <LINK_NAME>:
    sudo ln -s /home/ruser/R/<app> /srv/shiny-server/<app>
  4. Даем права на запись (пишется лог приложения)
    chmod -R go+rwx /home/ruser

Можно работать

Предыдущая публикация — «Использование R для «промышленной» разработки» [1].

Автор: i_shutov

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/data-mining/271010

Ссылки в тексте:

[1] предыдущих публикаций: https://habrahabr.ru/post/342254/

[2] ICU: https://raw.githubusercontent.com/gagolews/stringi/master/src/icu55/data/icudt55l.zip

[3] "Установка Microsoft ODBC Driver for SQL Server для Linux и macOS": https://docs.microsoft.com/ru-ru/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server

[4] Страница загрузки: https://www.rstudio.com/products/rstudio/download-server/

[5] Страница загрузки: https://www.rstudio.com/products/shiny/download-server/

[6] Источник: https://habrahabr.ru/post/345000/?utm_campaign=345000