R и СИБ. Как устранить противоречие интересов и запустить R на Linux в оффлайн-режиме
![habr.png](https://habrahabr.ru/images/habr.png)
Является продолжением предыдущих публикаций.
Очень часто попытки применить инструменты 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
- download RStidio Server from link below Страница загрузки
- Copy RPM to remote server dsthost
ondsthost
- install it using
rpm -ihv ./rstudio-server ... .rpm
Установка RStudio Shiny Server free
на srchost
- download Shiny Server from link below Страница загрузки
- Copy RPM to remote server dsthost
- install it using
rpm -ihv ./shiny-server ... .rpm
Проверяем web доступ
Shiny Server
http://
— общая стартовая страница с приложениями:3838/
RStudio Serverhttp://
:8787
Установка приложения
на srchost
:
- Установка собственных пакетов с Github
cd /tmp
&&git clone https://github.com/path1/pack.git
(from bash on local server)- copy
pack
to/tmp
folder in remote serverdsthost
- on remote server do in R:
devtools::install_local(path="/tmp/pack")
- Распаковка скриптов приложения с предоставленного дистрибутива в домашнюю директорию
~/R/
пользователя ruser - Оставляем режим работы Shiny Server для одного аналитика (ruser), делаем мапирование его домашней директории R на
/srv/shiny-server
командойln -s
:sudo ln -s /home/ruser/R/
/srv/shiny-server/ - Даем права на запись (пишется лог приложения)
chmod -R go+rwx /home/ruser
Можно работать
Предыдущая публикация — «Использование R для «промышленной» разработки».