В общем Правило, вы не просто меняете права доступа к системным каталогам! Вот для чего нужен root-доступ. Верните разрешения в исходное состояние и в следующий раз запустите sudo R
и install.packages
из получившейся корневой оболочки R.
Причина, по которой вы не можете установить, находится прямо в выводе, который вы показываете:
ERROR: dependencies ‘httr’, ‘git2r’ are not available for package ‘devtools’
Очевидно, как объяснил rcs , в Ubuntu вам необходимо установить libssl-dev Сначала
и libcurl4-openssl-dev
.
Следующая проблема заключается в том, что установка R вашего корневого пользователя имеет / usr / local / lib / R / site-library
в качестве первого каталога в выходных данных .libPaths
и что не находится на пути вашего обычного пользователя. Поскольку это первая запись для root, именно там и была установлена ваша библиотека:
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Итак, простое решение - создать файл с именем ~ / .Rprofile
и добавить к нему эту строку:
.libPaths("/usr/local/lib/R/site-library/")
В качестве альтернативы или дополнительно вы можете включить строку типа
.libPaths("/home/masi/Rlibs")
, которая позволит вам устанавливать библиотеки в каталог / home / masi / Rlibs
(выбирайте любое имя) в будущем и, таким образом, избегайте необходимости в судо R
.
В качестве альтернативы вы можете установить для переменной среды R_LIBS_USER
значение / usr / local / lib / R / site-library /
(или / home / masi / Rlibs
или там, где еще устанавливаются ваши библиотеки). Просто добавьте эту строку в свой ~ / .profile
:
R_LIBS_USER=/usr/local/lib/R/site-library/
Я полагаю, что поведение, с которым вы столкнулись, вызвано зависимостью Requires=
. Согласно разделу о Requires=
из man systemd.unit
:
Если один из других блоков деактивируется или его активация не удалась, этот блок будет деактивирован.
Похоже, что именно это здесь и происходит. Далее в параграфе есть совет, который, как мне кажется, применим в данном случае:
Часто лучше использовать Wants= вместо Requires=, чтобы добиться более надежной системы при работе с отказавшими сервисами.
В документации к Wants=
сказано:
Более слабая версия Requires=. Блоки, перечисленные в этой опции, будут запущены, если конфигурирующий блок запущен. Однако, если перечисленные блоки не запускаются или не могут быть добавлены в транзакцию, это не влияет на валидность транзакции в целом. Это рекомендуемый способ связать запуск одного устройства с запуском другого.
Чтобы ответить по-другому: Я не думаю, что логика "RequireSec=" имеет шанс сработать, потому что systemd отключает службу, потому что условие "Require=" не выполняется.
Это мое предположение.