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

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


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

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.