如何在Android的Termux中安装指定版本ruby 2.1.10的ruby-dev
在Termux中安装Ruby 2.1.10的可行方案
因为Ruby 2.1.10属于比较老旧的版本,Termux官方源里已经没有这个版本的预编译包了,所以得通过源码编译+版本管理器的方式来安装,我推荐用rbenv来实现多版本管理,具体步骤如下:
1. 安装编译依赖
首先得把编译Ruby所需的工具和依赖库装全,在Termux里执行这条命令:
pkg install git clang make libssl-dev libreadline-dev zlib-dev pkg-config
这些包分别负责版本控制、编译执行、SSL加密支持、命令行交互优化和压缩库支持,都是编译老版本Ruby必不可少的基础。
2. 安装rbenv和ruby-build插件
rbenv是轻量型的Ruby版本管理器,ruby-build插件则是帮我们下载、编译指定Ruby版本的核心组件:
- 先把rbenv克隆到用户目录:
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
- 把rbenv添加到Shell的环境变量里(如果用的是bash就编辑
~/.bashrc,用zsh就编辑~/.zshrc):
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc
- 重启Shell或者执行下面的命令让配置立即生效:
source ~/.bashrc
- 最后安装ruby-build插件:
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
3. 编译安装Ruby 2.1.10
Ruby 2.1.10和新版OpenSSL存在兼容性问题,所以需要指定用OpenSSL 1.0版本来编译:
先安装OpenSSL 1.0的开发包:
pkg install libssl1.0-dev
然后执行编译安装命令,指定OpenSSL的路径:
RUBY_CONFIGURE_OPTS="--with-openssl-dir=$PREFIX" rbenv install 2.1.10
注:
$PREFIX是Termux的系统路径别名,指向/data/data/com.termux/files/usr,libssl1.0-dev的文件会默认安装在这里。如果这条命令报错,试试把路径改成/system/lib再尝试。
4. 设置使用Ruby 2.1.10
安装完成后,你可以设置全局默认使用这个版本:
rbenv global 2.1.10
或者只在当前目录下使用:
rbenv local 2.1.10
最后执行ruby -v验证版本是否正确:
ruby -v
正常情况下会输出类似ruby 2.1.10p492 (2016-04-01 revision 54464) [aarch64-linux-android]的内容(架构会根据你的设备有所不同)。
可能遇到的问题及解决
- 如果编译时提示"openssl/ssl.h not found",先确认已经安装了
libssl1.0-dev,再检查RUBY_CONFIGURE_OPTS里的路径是否正确。 - 如果编译失败,可以先清理编译缓存再重新安装:
rm -rf ~/.rbenv/sources/2.1.10 rbenv install 2.1.10
内容的提问来源于stack exchange,提问作者Omar




