[
https://issues.apache.org/jira/browse/ARROW-11963?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17304141#comment-17304141
]
Ahmed Riza commented on ARROW-11963:
------------------------------------
We can see the compiler flags, that R will use, by inspecting the "R CMD
config" from the "R" package that's installed via the Fedora package manager.
Some sample output (we can see the explicit hardening flags that will be used
for any compilation of packages):
{code:java}
$ /usr/bin/R CMD config --all
CC = gcc -m64
CFLAGS = -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
-pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
-Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-fstack-protector-stron
g -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic
-fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection
CPICFLAGS = -fpic
CPPFLAGS = -I/usr/local/include
CXX = g++ -m64 -std=gnu++11
CXXFLAGS = -O2 -flto=auto -ffat-lto-objects -fexceptions -g
-grecord-gcc-switches -pipe -Wall -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-str
ong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic
-fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection
{code}
I believe that when the R arrow package installer compiles the arrow C++
libraries (when they are missing on the system), the "hardening" flags are not
being used. I believe it is this mismatch that's causing the segfaults.
At this point, I have no idea as to how to build the arrow C++ libraries
themselves with the hardening flags. This is obviously something specific to
each Linux distro. I think other distros, e.g. Debian based ones have similar
hardening features.
> Arrow installation issue with R 4.0.4 on Fedora 33
> --------------------------------------------------
>
> Key: ARROW-11963
> URL: https://issues.apache.org/jira/browse/ARROW-11963
> Project: Apache Arrow
> Issue Type: Bug
> Components: R
> Affects Versions: 3.0.0
> Environment: Linux, Fedora 33
> Reporter: Ahmed Riza
> Priority: Major
> Attachments: R_arrow_install.log.gz, R_arrow_install_clean.log.gz,
> R_install_20210317204844.log.gz, R_install_with_debug.log.gz, cmake.log,
> jemalloc_ep_config.log, make.log.gz
>
>
> I have been trying to install "arrow" package, using R 4.0.4 on Linux (Fedora
> 33). I have built and installed the C++ arrow libraries (using release
> version 3.0.0) following the instructions at
> [https://arrow.apache.org/docs/r/.|https://arrow.apache.org/docs/r/]
> Then, from R, I tried to install "arrow":
> {code:java}
> install.packages("arrow"){code}
> This fails during the verification stage:
> {code:java}
> ** testing if installed package can be loaded from temporary location
> sh: line 1: 8386 Segmentation fault (core dumped) R_TESTS=
> '/usr/lib64/R/bin/R' --no-save --no-restore --no-echo 2>&1 <
> '/tmp/RtmpWtq6vV/file1f4b570a7335'
> caught segfault ***
> address (nil), cause 'memory not mapped'
> Traceback:
> 1: dyn.load(file, DLLpath = DLLpath, ...)
> 2: library.dynam(lib, package, package.lib)
> 3: loadNamespace(package, lib.loc)
> 4: doTryCatch(return(expr), name, parentenv, handler)
> 5: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> 6: tryCatchList(expr, classes, parentenv, handlers)
> 7: tryCatch({ attr(package, "LibPath") <- which.lib.loc ns <-
> loadNamespace(package, lib.loc) env <- attachNamespace(ns, pos = pos,
> deps, exclude, include.only)}, error = function(e) { P <- if (!is.null(cc
> <- conditionCall(
> e))) paste(" in", deparse(cc)[1L]) else "" msg <-
> gettextf("package or namespace load failed for %s%s:\n %s",
> sQuote(package), P, conditionMessage(e)) if (logical.return)
> message(paste("Error:", msg), do
> main = NA) else stop(msg, call. = FALSE, domain = NA)})
> 8: library(pkg_name, lib.loc = lib, character.only = TRUE, logical.return =
> TRUE)
> 9: withCallingHandlers(expr, packageStartupMessage = function(c)
> tryInvokeRestart("muffleMessage"))
> 10: suppressPackageStartupMessages(library(pkg_name, lib.loc = lib,
> character.only = TRUE, logical.return = TRUE))
> 11: doTryCatch(return(expr), name, parentenv, handler)
> 12: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> 13: tryCatchList(expr, classes, parentenv, handlers)
> 14: tryCatch(expr, error = function(e) { call <- conditionCall(e) if
> (!is.null(call)) { if (identical(call[[1L]], quote(doTryCatch)))
> call <- sys.call(-4L) dcall <- deparse(call)[1L] prefix
> <- past
> e("Error in", dcall, ": ") LONG <- 75L sm <-
> strsplit(conditionMessage(e), "\n")[[1L]] w <- 14L + nchar(dcall, type
> = "w") + nchar(sm[1L], type = "w") if (is.na(w)) w <- 14L
> + nchar(dcall, type =
> "b") + nchar(sm[1L], type = "b") if (w > LONG)
> prefix <- paste0(prefix, "\n ") } else prefix <- "Error : " msg
> <- paste0(prefix, conditionMessage(e), "\n")
> .Internal(seterrmessage(msg[1L])
> ) if (!silent && isTRUE(getOption("show.error.messages"))) {
> cat(msg, file = outFile) .Internal(printDeferredWarnings()) }
> invisible(structure(msg, class = "try-error", condition = e))})
> 15: try(suppressPackageStartupMessages(library(pkg_name, lib.loc = lib,
> character.only = TRUE, logical.return = TRUE)))
> 16: tools:::.test_load_package("arrow",
> "/work/R/x86_64-redhat-linux-gnu-library/4.0/00LOCK-arrow/00new")
> An irrecoverable exception occurred. R is aborting now ...
> ERROR: loading failed
> {code}
> R version info:
> {code:java}
> R version 4.0.4 (2021-02-15) -- "Lost Library Book"
> Copyright (C) 2021 The R Foundation for Statistical Computing
> Platform: x86_64-redhat-linux-gnu (64-bit)
> {code}
> Any thoughts on where to look? (I can only get arrow to work with the latest
> development version of R and not the release version of 4.0.4). Thanks.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)