如何通过 rbenv/ruby-build 在本地安装 ruby?

How to install ruby locally via rbenv/ruby-build?

我需要安装 ruby 无需互联网访问 。正如 ruby-build 文档建议的那样,我可以通过指定环境变量 RUBY_BUILD_MIRROR_URL 来更改镜像 URL。我这样做了,虽然它查看了我的本地仓库 ruby,但它仍然尝试连接到在线仓库以安装 yaml

env RUBY_BUILD_MIRROR_URL=http://10.10.161.39/platforms/common/ruby-2.0.0-p247.tar.gz#3e71042872c77726409460e8647a2f304083a15ae0defe90d8000a69917e20d3 /opt/rbenv/bin/rbenv install 2.0.0-p247
Downloading yaml-0.1.6.tar.gz...
-> http://10.152.161.39/platforms/proteus/common/ruby-2.0.0-p247.tar.gz#3e71042872c77726409460e8647a2f304083a15ae0defe90d8000a69917e20d3/7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749
-> http://pyyaml.org/download/libyaml/yaml-0.1.6.tar.gz
error: failed to download yaml-0.1.6.tar.gz

BUILD FAILED (RedHatEnterpriseServer 5.10 using ruby-build 20150928)

我尝试将 yaml-0.1.6.tar.gz 文件放在我的本地存储库中,但这没有任何区别,除了它会失败,因为 URL 中提供的 sha2 校验和用于 ruby-2.0.0-p247.tar.gz 文件。

如何使用 rbenv 离线安装 ruby?

更新 1

我发现您可以修改查找配置文件以改为指向本地镜像。即:/opt/rbenv/plugins/ruby-build/share/ruby-build/2.0.0-p247

install_package "yaml-0.1.6" "http://10.10.161.39/platforms/common/yaml-0.1.6.tar.gz#7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749"  --if needs_yaml
install_package "openssl-1.0.1p" "ttp://10.10.161.39/platforms/common/openssl-1.0.1p.tar.gz#bd5ee6803165c0fb60bbecbacacf244f1f90d2aa0d71353af610c29121e9b2f1" mac_openssl --if has_broken_mac_openssl
install_package "ruby-2.0.0-p247"  "http://10.10.161.39/platforms/common/ruby-2.0.0-p247.tar.gz#3e71042872c77726409460e8647a2f304083a15ae0defe90d8000a69917e20d3"

是否有更好的方法或者这是最好的方法?

所以我是这样工作的:

更新 /opt/rbenv/plugins/ruby-build/share/ruby-build/<ruby-version> 中下载文件的内容以指向您的本地存储库。

您还会注意到每个文件在 URL 中的“#”符号后有一个很长的散列值。例如:

install_package "yaml-0.1.6" "http://10.10.161.39/platforms/common/yaml-0.1.6.tar.gz#7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749" --if needs_yaml

此哈希值是 sha256sum 文件,rbenv 将使用该文件来验证它是否是预期文件。

因此您需要通过 运行 sha256sum <filename> 生成值并附加到 URL 路径中的每个文件。

完整示例如下:

install_package "yaml-0.1.6" "http://10.10.161.39/platforms/common/yaml-0.1.6.tar.gz#7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749"  --if needs_yaml
install_package "openssl-1.0.1p" "ttp://10.10.161.39/platforms/common/openssl-1.0.1p.tar.gz#bd5ee6803165c0fb60bbecbacacf244f1f90d2aa0d71353af610c29121e9b2f1" mac_openssl --if has_broken_mac_openssl
install_package "ruby-2.0.0-p247"  "http://10.10.161.39/platforms/common/ruby-2.0.0-p247.tar.gz#3e71042872c77726409460e8647a2f304083a15ae0defe90d8000a69917e20d3"

在上面的示例中,我们在 http://10.10.161.39/platforms/common 有一个专用的存储库服务器。如果您的包在本地可用,您将需要指向本地路径并验证它是否有效。