MSYS2 based RubyInstaller for Windows
RubyInstaller2
本项目基于 MSYS2 工具链,为 Windows 系统提供 Ruby-2.4 及更高版本的安装程序。 它是基于 MSYS1 的 RubyInstaller 的继任者,后者用于 Ruby-2.3 及更低版本。 本项目采用 3 条款修改版 BSD 许可证授权。
与旧版 RubyInstaller 不同,它不提供自己的 DevKit,而是利用 MSYS2 项目 中丰富的 MINGW 库。 因此,在目标系统上安装后,它能很好地与 MSYS2 集成,为安装带有 C 扩展的 gems 提供构建和运行时环境。 此变更及其他更多变更记录在 CHANGELOG 中。
在目标系统上使用安装程序
- 下载并安装最新的 RubyInstaller2:https://github.com/oneclick/rubyinstaller2/releases
非 Devkit 安装程序文件足以使用纯 Ruby gems 或适用于 x64-mingw-ucrt 或 aarch64-mingw-ucrt 的胖二进制 gems。 为了安装基于 C 的源码 gems,建议使用 Devkit 安装程序版本。 它会在 ruby 目录中安装一个 MSYS2/MINGW 构建环境,其中包含常用的构建工具和库。
某些 gems 需要额外的软件包,这些软件包可以通过 pacman 安装,详见下文。
也可以从 https://msys2.org/ 手动安装 MSYS2,然后运行 ridk install 来添加非默认但必需的开发工具。
有关 Ruby 和 MSYS2 的无人值守安装,请参阅 FAQ chocolatey install。
ridk 命令
ridk 是一个 cmd/powershell 脚本,可用于安装 MSYS2 组件、执行 pacman 等 MSYS 命令,或设置环境变量以便从当前 shell 使用 MSYS2 开发工具。
有关更多选项,请参见 ridk help:
Usage:
C:/Ruby24-x64/bin/ridk.cmd [option]
Option:
install Install MSYS2 and MINGW dev tools
exec <command> Execute a command within MSYS2 context
enable Set environment variables for MSYS2
disable Unset environment variables for MSYS2
version Print RubyInstaller and MSYS2 versions
use Switch to a different ruby version
help | --help | -? | /? Display this help and exit
ridk enable 可用于在当前运行的控制台中启用 MSYS2 开发工具。
这使得 sh、pacman、make 等命令可在命令行中使用。
有关 ridk 命令的更多说明,请参见维基。
安装带有 C 扩展和额外库依赖的 gems
基础 MSYS2 设置包含编译器和其他构建工具,但不包含某些 gems 所需的库或 DLL 作为其依赖项。
幸运的是,许多所需的库都可以通过 MSYS2 仓库获取。
它们可以通过 ridk exec pacman -S mingw-w64-x86_64-libraryname 命令安装,类似于 Linux 上的 apt-get。
对于 32 位 RubyInstaller,请将前缀 mingw-w64-x86_64 替换为 mingw-w64-i686。
例如,这些常用的 gems 可以从源码 gem 像这样安装:
- 要安装
sqlite3gem:ridk exec pacman -S mingw-w64-x86_64-sqlite3 gem install sqlite3 --platform ruby - 要安装
nokogirigem:ridk exec pacman -S mingw-w64-x86_64-libxslt gem install nokogiri --platform ruby -- --use-system-libraries
有些 gems 已正确标记,可以通过 pacman 安装依赖库。 有关如何将此类标记添加到 gems 的信息,请参见维基。 另请参考 FAQ 以获取其他安装建议。
构建安装程序
此仓库提供了用于构建 RubyInstaller 安装程序可执行文件和 7zip 文件的打包任务。 它不编译任何源代码,而是利用 MSYS2-MINGW 仓库 和 RubyInstaller2 pacman 仓库 来下载二进制文件和依赖库。
在 Github Actions 上自动构建
每次推送到 github 仓库时,安装程序都会在 Github Actions 上定期构建。 运行器还会执行安装程序,并在其上运行所有 RubyInstaller 测试和 ruby-spec,以便我们能收到有关破坏性更改的通知。 除此之外,每天还会编译最新的 Ruby 开发快照,并将其打包为 RubyInstaller 文件。 可以从 github releases 下载。 有关如何在 CI 构建中使用 ruby-head 版本,请查看维基。
在本地计算机上构建 RubyInstaller2:
- 确保已安装可用的 RubyInstaller-2.4+ 和 Git
- 确保已安装 MSYS2,可通过 RubyInstaller-Devkit 版本安装,或使用默认选项执行
ridk install进行安装 - 从 http://www.jrsoftware.org/isdl.php 安装最新的 Inno-Setup(unicode 版本)
- 运行 cmd.exe 并将 iscc.exe 添加到 PATH:
set PATH=%PATH%;"c:\Program Files (x86)\Inno Setup 6" - 克隆 RubyInstaller2 并安装依赖项:
git clone https://github.com/oneclick/rubyinstaller2 cd rubyinstaller2 bundle install rake -T - 最后一条命令会列出所有可用的 RubyInstaller 构建目标。
构建目标由以下部分组成:
rake ri:ruby-3.4.1-x86-msvcrt:archive-7z ^ ^ ^ ^ ^- "archive-7z" => rubyinstaller 文件的 7z 归档 | | | | "installer-inno" => 可执行安装程序文件 | | | '------- "msvcrt" => 旧版 C 标准库 | | | "ucrt" => 新版 C 标准库 | | '------- "x86" => 32 位 x86 ruby 和 MSYS2 版本 | | "x64" => 64 位 x86_64 版本 | | "arm" => ARM64 版本 | '------ "x.x.x" => 要构建的 ruby 版本 | "head" => ruby 的最新开发快照 '------ "ri" => 不带 Devkit 的 RubyInstaller "ri-msys" => 带基于 MSYS2 的 Devkit 的 RubyInstaller - 将所需的构建目标复制粘贴到命令行。
- 如果一切顺利,您将在以下位置找到最终的安装程序和归档文件:
packages/ri-msys/recipes/installer-inno/rubyinstaller-devkit-<VERSION>-<ARCH>.exepackages/ri/recipes/archive-7z/rubyinstaller-<VERSION>-<ARCH>.7z
已知问题
- 最好避免安装到包含空格或非 ASCII 字符的 PATH 中。某些 gem 在路径有空格时无法安装,且旧版 ruby 版本(<= 3.0.x)的 ridk 在路径包含特殊字符时甚至根本无法运行。
- 另请参阅 问题列表。