Как стать автором
Обновить

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

Время на прочтение5 мин
Количество просмотров3.4K

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


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

Теги:
Хабы:
+9
Комментарии0

Публикации

Изменить настройки темы

Истории

Работа

Data Scientist
62 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн