Closed guidohooiveld closed 3 years ago
Thanks for the report. Can you confirm if you see the same behaviour from the release version here on GitHub:
BiocManager::install('grimbough/biomaRt', ref = 'RELEASE_3_12')
I suspect it's getting stuck inside a loop executed when the package is loaded, but I can't see why the loop wouldn't terminate. I just want to check the versions in BioC and GitHub behave the same.
Thanks for coming back to this so quickly. Installing the release version directly from GitHub per the command above gives the same problem. Installation hangs with ~43% CPU activity of a core, which indeed suggests that it is getting stuck in a loop...
> BiocManager::install('grimbough/biomaRt', ref = 'RELEASE_3_12')
Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)
Installing github package(s) 'grimbough/biomaRt'
Downloading GitHub repo grimbough/biomaRt@RELEASE_3_12
checking for file ‘/tmp/RtmpWSto9Y/remotesc4097756176a/grimbough-biomaRt-90d6✔ checking for file ‘/tmp/RtmpWSto9Y/remotesc4097756176a/grimbough-biomaRt-90d6abf/DESCRIPTION’
─ preparing ‘biomaRt’:
✔ checking DESCRIPTION meta-information ...
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
─ building ‘biomaRt_2.46.2.tar.gz’
* installing *source* package ‘biomaRt’ ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
converting help for package ‘biomaRt’
finding HTML links ... done
Mart-class html
NP2009code html
attributePages html
biomartCache html
exportFASTA html
filterOptions html
filterType html
getBM html
getBMlist html
getGene html
getLDS html
getSequence html
listAttributes html
listDatasets html
listEnsembl html
listEnsemblArchives html
listFilterValues html
listFilters html
listMarts html
select html
useDataset html
useEnsembl html
useMart html
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
^C
Possible SSL connectivity problems detected.
Please report this issue at https://github.com/grimbough/biomaRt/issues
Error in curl::curl_fetch_memory(url, handle = handle) :
Operation was aborted by an application callback
* removing ‘/usr/lib64/R/library/biomaRt’
* restoring previous ‘/usr/lib64/R/library/biomaRt’
Error: Failed to install 'biomaRt' from GitHub:
(converted from warning) installation of package ‘/tmp/RtmpWSto9Y/filec409601101cd/biomaRt_2.46.2.tar.gz’ had non-zero exit status
>
I've created a new branch that will return()
rather than break
- no idea if that will be sufficient. It should also print some more diagnostic information. Can you give it a try with this?
BiocManager::install('grimbough/biomaRt', ref = '3_12_testing')
I did, but unfortunately to no avail... However, after termination I saw tens of notifications that apparently were printed, and I did not observe this earlier. Hopefully these may provide some clues?
**<<snip above here many, many more of the exact notification below >>**
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Possible SSL connectivity problems detected.
Please report this issue at https://github.com/grimbough/biomaRt/issues
Error in curl::curl_fetch_memory(url, handle = handle) :
Operation was aborted by an application callback
* removing ‘/usr/lib64/R/library/biomaRt’
* restoring previous ‘/usr/lib64/R/library/biomaRt’
Error: Failed to install 'biomaRt' from GitHub:
(converted from warning) installation of package ‘/tmp/Rtmp4UhbHJ/filecb0d4b126274/biomaRt_2.46.2-1.tar.gz’ had non-zero exit status
>
Ok, I think I understand what's happening now. The code detects that error and tries to modify the HTTP settings to fix it, then tests again. However if the fix doesn't work it will still produce the same error and we'll go round in the loop. It hadn't occurred to me that the fix might not work! I've tested on various flavours of Ubuntu, but maybe something different is required for Fedora.
I can probably put a hard stop in the code so that it will at least load the package, but without addressing the root problem I'm not sure you (or maybe all Fedora users) will actually be able to use biomaRt. I'll have a look at what might be required.
Thanks a lot for try these diagnostics and reporting back.
FWIW: Googling with the error message pointed me to this post of you, which in turn mentioned this Github Issue https://github.com/Ensembl/ensembl-rest/issues/427#issue-614497457. In that thread, I saw Herve's post here https://github.com/Ensembl/ensembl-rest/issues/427#issuecomment-677902720, and indeed Fedora reports the same:
[guidoh@localhost ~]$ curl https://rest.ensembl.org
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Fedora 33 currently uses OpenSSL version 1.1.1i.
[guidoh@localhost ~]$ openssl version
OpenSSL 1.1.1i FIPS 8 Dec 2020
... but the fix you described in that thread https://github.com/Ensembl/ensembl-rest/issues/427#issuecomment-702044967 does indeed not work... ??? As was confirmed by the posts above...
> library(httr)
> url <- "https://rest.ensembl.org/"
> res <- GET(url)
Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
> httr_config <- config(ssl_cipher_list = "DEFAULT@SECLEVEL=1")
> res <- with_config(config = httr_config, GET(url))
Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
> sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Fedora 33 (Thirty Three)
Matrix products: default
BLAS/LAPACK: /usr/lib64/libflexiblas.so.3.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] httr_1.4.2
loaded via a namespace (and not attached):
[1] compiler_4.0.3 R6_2.5.0 curl_4.3
>
Cool, thanks for confirming that the fix doesn't work. I guess that "DEFAULT@SECLEVEL=1"
is somewhat Ubuntu/Debian specific. I'll see if I can find what "SECLEVEL=1" actually does in the background. Hopefully we can be more specific and get it working on Fedora.
I am not at all an expert on this, but I found this and this information.
In release 33 Fedora apparently also increased its security level (from 1 to 2 ??).
Now check this (run on command line and not in R):
Default setting thus gives an error!
[guidoh@localhost ~]$ curl https://rest.ensembl.org --verbose
* Trying 193.62.193.83:443...
* Connected to rest.ensembl.org (193.62.193.83) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS alert, handshake failure (552):
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
[guidoh@localhost ~]$
But after reducing level to "FEDORA32" not anymore!
[guidoh@localhost ~]$ update-crypto-policies --set DEFAULT:FEDORA32
[guidoh@localhost ~]$ curl https://rest.ensembl.org --verbose
* Trying 193.62.193.83:443...
* Connected to rest.ensembl.org (193.62.193.83) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: OU=Domain Control Validated; CN=*.ensembl.org
* start date: May 6 13:36:20 2020 GMT
* expire date: May 18 08:32:01 2022 GMT
* subjectAltName: host "rest.ensembl.org" matched cert's "*.ensembl.org"
* issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: rest.ensembl.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 31500
< Vary: Accept-Encoding,User-Agent
< X-Runtime: 0.732137
< X-RateLimit-Limit: 55000
< X-RateLimit-Reset: 3115
< X-RateLimit-Period: 3600
< X-RateLimit-Remaining: 54998
< Vary: Origin
< Date: Thu, 04 Feb 2021 23:08:05 GMT
<
<<snip>>
Idem for "LEGACY"
[guidoh@localhost ~]$ update-crypto-policies --set LEGACY
[guidoh@localhost ~]$ curl https://rest.ensembl.org --verbose
* Trying 193.62.193.83:443...
* Connected to rest.ensembl.org (193.62.193.83) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: OU=Domain Control Validated; CN=*.ensembl.org
* start date: May 6 13:36:20 2020 GMT
* expire date: May 18 08:32:01 2022 GMT
* subjectAltName: host "rest.ensembl.org" matched cert's "*.ensembl.org"
* issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: rest.ensembl.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 31500
< Vary: Accept-Encoding,User-Agent
< X-Runtime: 0.860186
< X-RateLimit-Limit: 55000
< X-RateLimit-Reset: 2970
< X-RateLimit-Period: 3600
< X-RateLimit-Remaining: 54997
< Vary: Origin
< Date: Thu, 04 Feb 2021 23:10:30 GMT
<
<< snip >>
Thus, this line in R:
httr_config <- config(ssl_cipher_list = "DEFAULT@SECLEVEL=1")
doesn't work with Fedora (is Ubuntu/Debian specific?!), but how then to adapt it in order to set the equivalent of LEGACY or FEDORA32. Or maybe I am too naive on this... :)
Thanks for the links. This looks tricky to fix. I've haven't managed to find something we can pass to ssl_cipher_list
that is sufficient. It's not totally clear to me, but it looks like since the FEDORA33
crypto policy is system wide, this takes precedence over an OpenSSL solution like DEFAULT@SECLEVEL=1
. I'm guessing a bit, but it seem like the system policy prevents you using certain ciphers, even if you try to explicitly.
I presume if you run update-crypto-policies --set DEFAULT:FEDORA32
then httr::GET("https://rest.ensembl.org")
wil works in an R session? It doesn't seem ideal to lower the system security policy permanently, but it might be useful to know if that works.
Ideally Ensembl would get rid of the outdated certificate that seems to be causing this issue, but that GitHub issue is over a year old and doesn't seem to have got any traction.
As a work around for now, I've added a rule that it should only tests for connection problems once, and if the fix doesn't work then stop trying. If you could again trying installing the test branch, I'm hoping that you'll only see the error message once:
BiocManager::install('grimbough/biomaRt', ref = '3_12_testing')
That doesn't solve the really problem, but at least it should stop the infinite waiting for package installation. Assuming it works I'll push that workaround to Bioconductor.
It indeed seems a complicated thing to fix, so thanks for spending so much time on this.
I can confirm that there is no infinite waiting anymore when installing your latest test release:
> BiocManager::install('grimbough/biomaRt', ref = '3_12_testing')
Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)
Installing github package(s) 'grimbough/biomaRt'
Downloading GitHub repo grimbough/biomaRt@3_12_testing
checking for file ‘/tmp/RtmpOOyX2p/remotes2c93961375925/grimbough-biomaRt-5e89cce/DESCRIPTI
✔ checking for file ‘/tmp/RtmpOOyX2p/remotes2c93961375925/grimbough-biomaRt-5e89cce/DESCRIPTION’
─ preparing ‘biomaRt’:
✔ checking DESCRIPTION meta-information ...
─ checking for LF line-endings in source and make files and shell scripts
─ checking for empty or unneeded directories
─ building ‘biomaRt_2.46.2-1.tar.gz’
* installing *source* package ‘biomaRt’ ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
converting help for package ‘biomaRt’
finding HTML links ... done
Mart-class html
NP2009code html
attributePages html
biomartCache html
exportFASTA html
filterOptions html
filterType html
getBM html
getBMlist html
getGene html
getLDS html
getSequence html
listAttributes html
listDatasets html
listEnsembl html
listEnsemblArchives html
listFilterValues html
listFilters html
listMarts html
select html
useDataset html
useEnsembl html
useMart html
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Possible SSL connectivity problems detected.
Please report this issue at https://github.com/grimbough/biomaRt/issues
Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
** testing if installed package can be loaded from final location
Failed test 1: Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Possible SSL connectivity problems detected.
Please report this issue at https://github.com/grimbough/biomaRt/issues
Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
** testing if installed package keeps a record of temporary installation path
* DONE (biomaRt)
Making 'packages.html' ... done
>
Connecting the ENSEMBL site indeed does not work:
> httr::GET("https://rest.ensembl.org")
Error in curl::curl_fetch_memory(url, handle = handle) :
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
>
It does, however, after 'a system-wide downgrading' of the security level (as expected):
# First; at linux command line, before starting R
[guidoh@localhost ~]$ sudo update-crypto-policies --set DEFAULT:FEDORA32
Setting system policy to DEFAULT:FEDORA32
# Next start R
[guidoh@localhost ~]$ R
# in R:
> httr::GET("https://rest.ensembl.org")
Response [https://rest.ensembl.org/]
Date: 2021-02-05 16:24
Status: 200
Content-Type: text/html; charset=utf-8
Size: 31.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<script src="/static/js/20-prettify.js"></script>
<script src="/static/js/30-jquery-1.11.1.min.js"></script>
...
>
Note that biomaRt
is then also working (checked using the code in the vignette), despite the error below when loading the library
> library(biomaRt)
Failed test 2: Error in curl::curl_fetch_memory(url, handle = handle) :
SSL certificate problem: unable to get local issuer certificate
Great. I'll suppress most of the message printing and make that change in the version on Bioconductor so at least other users don't get bitten with a frozen upgrade of the of package. I'll also add something in the vignette about downgrading the crypto level. At least that gets the package working, even if it's not a solution I particularly like.
Thanks for being willing to test all the prototypes and giving such informative reports back. If I come across a working solution I'll update here again.
Version 2.46.3 is now in the Bioconductor repository and should be available in a few days. Hopefully it will install for you, but please let me know if it continues to be a problem.
Hi Mike, just to let you know that after the update of the certificates at ENSEMBL, biomaRt
is installing and running fine in R on Fedora 33.
https://github.com/Ensembl/ensembl-rest/issues/427#issuecomment-800969390
#First confirm default security level is indeed set/used
# 'DEFAULT' level was previously incompatible with biomaRt.
#
#Linux command line
[guidoh@localhost ~]$ update-crypto-policies --show
DEFAULT
[guidoh@localhost ~]$
Now in R/Bioconductor:
> BiocManager::install('biomaRt')
Bioconductor version 3.12 (BiocManager 1.30.12), ?BiocManager::install for help
Bioconductor version 3.12 (BiocManager 1.30.12), R 4.0.4 (2021-02-15)
Installing package(s) 'biomaRt'
trying URL 'https://bioconductor.org/packages/3.12/bioc/src/contrib/biomaRt_2.46.3.tar.gz'
Content type 'application/x-gzip' length 671575 bytes (655 KB)
==================================================
downloaded 655 KB
* installing *source* package ‘biomaRt’ ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
converting help for package ‘biomaRt’
finding HTML links ... done
Mart-class html
NP2009code html
attributePages html
biomartCache html
exportFASTA html
filterOptions html
filterType html
getBM html
getBMlist html
getGene html
getLDS html
getSequence html
listAttributes html
listDatasets html
listEnsembl html
listEnsemblArchives html
listFilterValues html
listFilters html
listMarts html
select html
useDataset html
useEnsembl html
useMart html
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (biomaRt)
Making 'packages.html' ... done
The downloaded source packages are in
‘/tmp/RtmpR1UmM7/downloaded_packages’
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
>
>
> library(biomaRt) #note: NO message on failed test 2!
>
>
> sessionInfo()
R version 4.0.4 (2021-02-15)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Fedora 33 (Thirty Three)
Matrix products: default
BLAS/LAPACK: /usr/lib64/libflexiblas.so.3.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] biomaRt_2.46.3
loaded via a namespace (and not attached):
[1] Rcpp_1.0.6 pillar_1.5.1 compiler_4.0.4
[4] BiocManager_1.30.12 dbplyr_2.1.1 prettyunits_1.1.1
[7] tools_4.0.4 progress_1.2.2 bit_4.0.4
[10] tibble_3.1.0 RSQLite_2.2.5 memoise_2.0.0
[13] BiocFileCache_1.14.0 lifecycle_1.0.0 pkgconfig_2.0.3
[16] rlang_0.4.10 DBI_1.1.1 curl_4.3
[19] parallel_4.0.4 fastmap_1.1.0 dplyr_1.0.5
[22] stringr_1.4.0 httr_1.4.2 xml2_1.3.2
[25] rappdirs_0.3.3 generics_0.1.0 S4Vectors_0.28.1
[28] vctrs_0.3.7 askpass_1.1 IRanges_2.24.1
[31] hms_1.0.0 tidyselect_1.1.0 stats4_4.0.4
[34] bit64_4.0.5 glue_1.4.2 Biobase_2.50.0
[37] R6_2.5.0 fansi_0.4.2 AnnotationDbi_1.52.0
[40] XML_3.99-0.6 purrr_0.3.4 blob_1.2.1
[43] magrittr_2.0.1 ellipsis_0.3.1 BiocGenerics_0.36.0
[46] assertthat_0.2.1 utf8_1.2.1 stringi_1.5.3
[49] openssl_1.4.3 cachem_1.0.4 crayon_1.4.1
Hi,
BiocManager
indicated an update ofbiomaRt
is available for my system (Fedora 33). Unfortunately I cannot get it installed; the installation procedure stalls at "testing if installed package can be loaded from temporary location". After 1hr I decided to abort the R-session with ctrl-c (indicated by^C
in code below) to be able to continue. Then this error is reported:Any idea on what goes wrong? Thanks! Guido
NB: after this, biomaRt version 2.46.0 (which was already installed) still loads fine.
Full output: