在Ubuntu 18.04上安装Ruby 2.3.x会在安装过程结束时导致错误

时间:2018-04-29 09:43:29

标签: ruby ruby-2.3 ubuntu-18.04

我最近将我的系统更新为Ubuntu 18.04 LTS,从那时起,Ruby版本似乎已更新到2.5。问题在于,当尝试部署使用Capistrano的项目时,它现在会抱怨找不到Ruby 2.3。

运行rvm install 2.3时尝试安装的版本是2.3.4,显示的第一个错误是“Error running '__rvm_make -j4'”。我尝试删除RVM并再次安装,但没有解决这个问题。日志是一个巨大的文件,它什么也没告诉我。

然后,我尝试使用rbenv,这也会导致错误:

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

日志文件也有一个愚蠢的巨型日志文件。

下一次尝试是从源代码安装,在文件夹中运行make之后,出现错误:

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

安装它有什么作用?或者不可能再安装这些旧版本了?

7 个答案:

答案 0 :(得分:35)

我有同样的问题,虽然问题出现在gcc,我的案例问题出现在libssl-dev,这对我有帮助:

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

我使用rbenv。如果您使用rvm,则在运行上一个命令后可能遇到问题:

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

我建议您尝试rbenv。安装libssl1.0-dev后,一切都完美无瑕。

答案 1 :(得分:5)

通过更新rvm解决了这个问题 rvm get head

答案 2 :(得分:3)

还可以使用RVM:

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

您必须手动安装RVM依赖项,否则,在启用autolibs的情况下,RVM将尝试更新系统依赖项以及libssl-dev(您在第一步中降级)。如果您不想手动安装依赖项,可以尝试安装启用了autolibs的Ruby,安装将失败,此时您已安装依赖项,因此您可以降级libssl,重复步骤1中的所有内容。

答案 3 :(得分:1)

cd ~/src
 wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz
 tar xvzf openssl-1.0.2s.tar.gz
 cd openssl-1.0.2s
 mkdir ~/.rubies/openssl-1.0.2s
 ./config --prefix=$HOME/.rubies/openssl-1.0.2s --shared
 make
 make install
 RUBY_CONFIGURE_OPTS=--with-openssl-dir=$HOME/.rubies/openssl-1.0.2s rbenv install 2.3.1

为我工作

答案 4 :(得分:1)

为了在Ubuntu 20.04上安装libssl-dev。使用此命令可以做到这一点。它为我工作: sudo apt install libssl-dev/focal

答案 5 :(得分:0)

我有类似的问题。显然是ruby版本< 2.3与openssl 1.1不兼容,它带有最新版本的Ubuntu。在这里我找到了ArchLinux的解决方案,我尝试了这个解决方案并且ruby编译得很好,但我在rails中有很多内存错误,那么我现在的独特解决方案是使用ruby> 2.4直到我找到其他解决方案。

答案 6 :(得分:-1)

尝试使用rvm

rvm install ruby-2.3.4

或者尝试https://gorails.com/setup/ubuntu/18.04

您可能缺少必需的库,因此请先尝试运行这些库:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt-get update
sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs yarn