openSUSE:Packaging Ruby
构建服务教学 - 技巧和花样 - 跨发行版打包 - Debian 打包指南 - 打包检查
桌面菜单分类 - 打包常用的 RPM 宏 - 小脚本片段 - SysVinit 脚本 - 源代码服务
OBS 打包互助问答 - 打包黑名单
Ruby 模块打包提示
Ruby 建议使用 gem 格式(Ruby 自有软件包格式)分发模块。在 openSUSE 下打包 gem 非常简单。
打包 gem 的诀窍
确保您添加并启用了 devel:languages:ruby 和 devel: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 依赖(见下)。Requires 和 Provides 字段也是从 $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 之后更新编译依赖。)
历史
这个话题 详述了本打包策略的产生背景。