blob: 2f64b17e5db3af4406d0286167a8e8c2c6be32a6 [file] [log] [blame]
local({
.pick_cran <- function() {
# Return a CRAN repo URL, preferring RSPM binaries if available for this OS
rspm_template <- "https://packagemanager.rstudio.com/cran/__linux__/%s/latest"
# See https://github.com/rstudio/r-docker#releases-and-tags,
# but note that RSPM still uses "centos8"
supported_os <- c("bionic", "focal", "jammy", "centos7", "centos8", "opensuse153")
if (nzchar(Sys.which("lsb_release"))) {
os <- tolower(system("lsb_release -cs", intern = TRUE))
if (os %in% supported_os) {
return(sprintf(rspm_template, os))
}
}
if (file.exists("/etc/os-release")) {
os_release <- readLines("/etc/os-release")
vals <- sub("^.*=(.*)$", "\\1", os_release)
os <- intersect(vals, supported_os)
if (length(os)) {
# e.g. "bionic"
return(sprintf(rspm_template, os))
} else {
names(vals) <- sub("^(.*)=.*$", "\\1", os_release)
if (grepl("opensuse", vals["ID"])) {
version <- sub('^"?([0-9]+)\\.?([0-9]+).*"?.*$', "\\1\\2", vals["VERSION_ID"])
os <- paste0("opensuse", version)
if (os %in% supported_os) {
return(sprintf(rspm_template, os))
}
}
}
}
if (file.exists("/etc/system-release")) {
# Something like "CentOS Linux release 7.7.1908 (Core)"
system_release <- tolower(utils::head(readLines("/etc/system-release"), 1))
# Extract from that the distro and the major version number
os <- sub("^([a-z]+) .* ([0-9]+).*$", "\\1\\2", system_release)
if (os %in% supported_os) {
return(sprintf(rspm_template, os))
}
}
return(NULL)
}
options(
Ncpus = parallel::detectCores(),
repos = c(tryCatch(.pick_cran(), error = function(e) NULL), "https://cloud.r-project.org"),
HTTPUserAgent = sprintf(
"R/%s R (%s)",
getRversion(),
paste(getRversion(), R.version$platform, R.version$arch, R.version$os)
)
)
# there's a bug in 3.5 that will warn/error on these, so only set it around that
if (getRversion() >= "3.6.0" || getRversion() < "3.5.0") {
options(
warnPartialMatchAttr = TRUE,
warnPartialMatchDollar = TRUE,
warnPartialMatchArgs = TRUE
)
}
})