A (возможно, типичное) обновление R на Linux истории ...
История:
В какой-то момент в прошлом я обновил версию R на нашем сервере RHEL / CentOS 7 с использованием версии по умолчанию, загруженной менеджером пакетов yum
в то время. Например, с sudo yum install R
до версии 3.5.2 в какой-то момент в начале 2019 года. По умолчанию это устанавливает R на /usr/lib64/R
для всех пользователей и полностью заменяет версию 3.4.x, которая была там ранее установлена. Shiny Server уже был установлен, настроен для работы от имени пользователя shiny
, и он без проблем установил новую версию R.
Ситуация:
Год позже настало время перекусить и обновить версию R, работающую на сервере Linux. Запуск yum check-upgrade R
Я обнаружил, что доступна версия 3.6.0. Я действительно хочу установить 3.6.3 И я не хочу нарушать работу всех моих приложений, работающих на 3.5.2, поэтому мне нужно использовать другой метод. Следуя инструкциям на https://docs.rstudio.com/resources/install-r/, я загружаю файл 3.6.3 .rpm и устанавливаю его. По умолчанию R устанавливается по адресу /opt/R/3.6.3/
, оставляя версию 3.5.2 как есть. Однако, как только я завершу шаг Создать символическую ссылку на R , ни одно из моих блестящих приложений не заработает:
sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript
Это не должно вызывать удивления. Все мои блестящие приложения полагаются на несколько пакетов R, которые еще не были установлены для этой новой версии R. Я могу быстро заставить свои приложения снова работать в предыдущей версии (3.5.2), удалив эти символические ссылки до тех пор, пока я не установлю необходимые пакеты в новой версии:
sudo rm /usr/local/bin/R
sudo rm /usr/local/bin/Rscript
Сообщения об ошибках в моих блестящих файлах журнала приложений (на /var/log/shiny-server/<app name>-<user>-<datetime>.log
) подтверждают, что приложения не запускались из-за отсутствия пакетов. Чтобы обновить пакеты R в папке общей библиотеки, мне нужно запустить новую версию R как sudo: sudo -i /opt/R/3.6.3/bin/R
и установить необходимые пакеты, например, install.packages(c("shiny","devtools","rmarkdown","shinydashboard","tidyverse"))
в R.
Теперь, когда R пакеты установлены, я могу воссоздать символические ссылки:
sudo ln -s /opt/R/3.6.3/bin/R /usr/local/bin/R
sudo ln -s /opt/R/3.6.3/bin/Rscript /usr/local/bin/Rscript
Я проверяю, что мои приложения работают с новой версией R.
Теперь у меня есть несколько вопросов:
Вопрос 1: После выполнения этих шагов R --version
по-прежнему возвращает старую версию (3.5.2). Но когда я вернулся на следующий день, он открывает 3.6.3. Зачем? Нужно ли мне запускать команду терминала, чтобы получить R --version
, чтобы немедленно вернуть новую версию, или открытие нового окна терминала - единственный способ добиться этого?
Вопрос 2: Запуск sudo R --version
всегда возвращает старую версию (3.5.2). Запуск sudo which R
возвращает /bin/R
. Запуск more /bin/R
показывает содержимое, в котором указано, что это «оболочка оболочки для исполняемого файла R.» и имеет жестко заданный путь "/ usr / lib64 / R". Я не думаю, что мне сейчас нужна эта обертка. Каков рекомендуемый способ заставить эти команды sudo указывать на новую версию?
Я могу на всякий случай сделать резервную копию этого файла в моем домашнем каталоге (например, cp /bin/R ~/binR.backup
), а затем:
* Удалить / bin / R?
* Заменить / bin / R с символической ссылкой на новую версию (например, sudo ln -s /opt/R/3.6.3/bin/R /bin/R
)?
* Переустановите «старую» версию в /opt/R/3.5.2/
, используя .rpm так же, как я установил 3.6.3, установите туда пакеты, а затем удалить версию /usr/lib64/R
(например, sudo yum remove R
)?
Возможно, более точным заголовком было бы: «Как переключиться с локального (EPEL) R на параллельную (указанную версию c) установку R на Linux ( Red Hat / CentOS)?
Ссылки на похожие вопросы, которые я просмотрел, но не ответил на свои вопросы:
- Как обновить R в Linux
- Изменить путь в Linux
- Как загрузить определенную c версию R в Linux