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

в 14:58, , рубрики: big data, data mining, data science, R, Промышленное программирование

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

Очень часто попытки применить инструменты 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, требуемый для сборки 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":

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 Страница загрузки
  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 Страница загрузки
  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 для «промышленной» разработки».

Автор: i_shutov

Источник

Поделиться

* - обязательные к заполнению поля