openSUSE:Packaging Ruby

跳转至: 导航, 搜索

Ruby 模块打包提示

Ruby 建议使用 gem 格式(Ruby 自有软件包格式)分发模块。在 openSUSE 下打包 gem 非常简单。

打包 gem 的诀窍

确保您添加并启用了 devel:languages:rubydevel:languages:ruby:extensions 仓库

zypper ar http://download.opensuse.org/repositories/devel:/languages:/ruby/openSUSE_12.2/devel:languages:ruby.repo
zypper ar http://download.opensuse.org/repositories/devel:/languages:/ruby:/extensions/openSUSE_12.2/devel:languages:ruby:extensions.repo
zypper ref
zypper in rubygem-gem2rpm

在您的家车库中添加一个新软件包(最好是一个子车库如 home:$USER:ruby):

osc mkpac rubygem-foo
cd rubygem-foo

如果您已经使用了 rvm,这样来让它别在下面步骤中捣乱,以保证您使用的是系统级别的 Ruby:

rvm use system

下载相应的 gem 文件并生成一个 RPM spec 文件:

gem fetch foo
gem2rpm foo-1.0.0.gem > rubygem-foo.spec

按需编辑 spec 文件:

vi rubygem-foo.spec

需要特别注意,请搞对 License: 字段。gem2rpm 故意省略了对其他 gem 的BuildRequires 依赖(见下)。RequiresProvides 字段也是从 $gem.gemspec 文件自动生成的,通过调用 ruby-common 软件包提供的 /usr/lib/rpm/rubygemsdeps.rb 来实现。(您需要 devel:languages:ruby 仓库的 1.0 版,而不是 12.2 主仓库的 1.9.3 版)。

添加一条修订日志,本地编译软件包,测试,然后提交您的软件包:

osc vc
....
osc build --local
osc vc
....
osc ci

如果您觉得您的软件包可以广泛应用了,提交一个 submitrequest 到 devel:languages:ruby:extensions 构建服务仓库:

osc sr devel:languages:ruby:extensions

BuildRequires 的省略

gem2rpm 故意省略了对其他 gem 的 BuildRequires 依赖以优化构建服务的编译速度 - 详情参考 这篇邮件列表

补足 BuildRequires

为了在 OBS 上检查依赖,您可以创建一个小软件包,它本身要求您的仓库的所有 gem 作为依赖。 devel:languages:ruby:extensions 里有个例子,叫做 all-good。意思是 rails 更新了之后,计划器只需要一轮更新:更新所有的 gem 然后计算 all-good 能够展开,不能的话就意味着有的软件包缺失了依赖。(all-good一个脚本来在添加了新 gem 之后更新编译依赖。)

历史

这个话题 详述了本打包策略的产生背景。