web-dev-qa-db-fra.com

L'installation de Ruby 2.3.x sur Ubuntu 18.04 provoque une erreur à la fin du processus d'installation

J'ai récemment mis à jour mon système vers Ubuntu 18.04 LTS, et depuis lors, la version de Ruby semble avoir été mise à jour à la version 2.5. Le problème est que, lors de la tentative de déploiement d'un projet utilisant Capistrano, il se plaindra maintenant que Ruby 2.3 n'a pas été trouvé.

La version qu’il essaie d’installer lors de l’exécution de rvm install 2.3 est 2.3.4, et la première erreur affichée est "Error running '__rvm_make -j4'". J'ai essayé de retirer RVM et d'installer à nouveau, mais rien ne résout ce problème. Le journal est un fichier énorme qui ne me dit rien.

Ensuite, j'ai essayé d'utiliser rbenv, ce qui provoque également une erreur:

Installing Ruby-2.3.4...

BUILD FAILED (Ubuntu 18.04 using Ruby-build 20180424)

Inspect or clean up the working tree at /tmp/Ruby-build.20180429172721.16258
Results logged to /tmp/Ruby-build.20180429172721.16258.log

Last 10 log lines:
installing default nkf libraries
linking shared-object objspace.so
make[2]: Leaving directory '/tmp/Ruby-build.20180429172721.16258/Ruby-2.3.4/ext/objspace'
linking shared-object pathname.so
make[2]: Leaving directory '/tmp/Ruby-build.20180429172721.16258/Ruby-2.3.4/ext/pathname'
linking shared-object nkf.so
make[2]: Leaving directory '/tmp/Ruby-build.20180429172721.16258/Ruby-2.3.4/ext/nkf'
make[1]: Leaving directory '/tmp/Ruby-build.20180429172721.16258/Ruby-2.3.4'
uncommon.mk:203: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

Le fichier journal contient également un fichier journal géant stupide.

La tentative suivante consistait à installer à partir du source. Après l'exécution de make dans le dossier, l'erreur:

openssl_missing.h:78:35: error: macro "EVP_MD_CTX_create" passed 1 arguments, but takes just 0
 EVP_MD_CTX *EVP_MD_CTX_create(void);
                                   ^
In file included from /usr/include/openssl/x509.h:23:0,
                 from /usr/include/openssl/x509_vfy.h:17,
                 from openssl_missing.c:15:
openssl_missing.h:82:6: error: expected declaration specifiers or ‘...’ before ‘(’ token
 void EVP_MD_CTX_init(EVP_MD_CTX *ctx);
      ^
openssl_missing.h:90:6: error: expected declaration specifiers or ‘...’ before ‘(’ token
 void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);
      ^
openssl_missing.c:39:23: error: macro "EVP_MD_CTX_create" passed 1 arguments, but takes just 0
 EVP_MD_CTX_create(void)
                       ^
openssl_missing.c:40:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
 {
 ^
openssl_missing.c: In function ‘EVP_MD_CTX_cleanup’:
openssl_missing.c:55:27: error: invalid application of ‘sizeof’ to incomplete type ‘EVP_MD_CTX {aka struct evp_md_ctx_st}’
     memset(ctx, 0, sizeof(EVP_MD_CTX));
                           ^~~~~~~~~~
In file included from /usr/include/openssl/x509.h:23:0,
                 from /usr/include/openssl/x509_vfy.h:17,
                 from openssl_missing.c:15:
openssl_missing.c: At top level:
openssl_missing.c:63:1: error: expected declaration specifiers or ‘...’ before ‘(’ token
 EVP_MD_CTX_destroy(EVP_MD_CTX *ctx)
 ^
openssl_missing.c:72:1: error: expected declaration specifiers or ‘...’ before ‘(’ token
 EVP_MD_CTX_init(EVP_MD_CTX *ctx)
 ^
openssl_missing.c: In function ‘HMAC_CTX_init’:
openssl_missing.c:82:25: error: dereferencing pointer to incomplete type ‘HMAC_CTX {aka struct hmac_ctx_st}’
     EVP_MD_CTX_init(&ctx->i_ctx);
                         ^
openssl_missing.c: In function ‘HMAC_CTX_cleanup’:
openssl_missing.c:95:27: error: invalid application of ‘sizeof’ to incomplete type ‘HMAC_CTX {aka struct hmac_ctx_st}’
     memset(ctx, 0, sizeof(HMAC_CTX));
                           ^~~~~~~~
Makefile:301: recipe for target 'openssl_missing.o' failed
make[2]: *** [openssl_missing.o] Error 1
make[2]: Leaving directory '/home/gabriel/Downloads/Ruby-2.3.7/ext/openssl'
exts.mk:212: recipe for target 'ext/openssl/all' failed
make[1]: *** [ext/openssl/all] Error 2
make[1]: Leaving directory '/home/gabriel/Downloads/Ruby-2.3.7'
uncommon.mk:203: recipe for target 'build-ext' failed
make: *** [build-ext] Error 2

Qu'est-ce qu'il y a à faire pour l'installer? Ou il n'est plus possible d'installer ces anciennes versions?

9
gamofe

J'ai eu le même problème, même s'il semblait être dans gcc, dans mon cas, dans libssl-dev, voici ce qui m'a aidé:

Sudo apt purge libssl-dev && Sudo apt install libssl1.0-dev

J'utilise rbenv. Si vous utilisez rvm, vous pouvez rencontrer un problème après avoir exécuté la commande précédente:

/usr/share/rvm/scripts/base: No such file or directory

Je recommande d'essayer rbenv. Après avoir installé libssl1.0-dev, tout était parfait.

30
guitarman

Résolu ce problème en mettant à jour rvm rvm get head

4
SERGHII

Je travaille aussi avec RVM:

1. Sudo apt purge libssl-dev && Sudo apt install libssl1.0-dev 2. rvm install 2.3.5 --autolibs=disable

Vous devez installer les dépendances RVM manuellement, sinon, avec les bibliothèques automatiques activées, RVM tentera de mettre à jour les dépendances système ainsi que libssl-dev (que vous avez dégradé à la première étape). Si vous ne souhaitez pas installer manuellement les dépendances, vous pouvez essayer d'installer Ruby avec les bibliothèques automatiques activées. L'installation échouera. À ce stade, les dépendances sont installées afin que vous puissiez rétrograder libssl en répétant tout à partir de l'étape 1.

2

J'ai le même problème. Apparemment, la version <2.3 de Ruby est incompatible avec openssl 1.1, qui est fourni avec les dernières versions d’Ubuntu. Ici, j’ai trouvé une solution pour ArchLinux , j’ai essayé cette solution et Ruby a bien compilé, mais j’avais beaucoup de problèmes de mémoire dans Rails, ma solution unique pour l’instant consiste à utiliser Ruby> 2.4 jusqu’à ce que je trouve une autre solution.

0
Armando