配置 GEM 仓库
使用另外的不兼容的包系统是每个系统管理员的梦想。 如果你要管理 Ruby 或 Rails 应用程序,就需要处理 Rubygems。 与维护自己的 APT 仓库一样,维护你自己的 gem 仓库 会有很多优点。 你可以控制包的可用性和包的版本,也可以根据需要发布你自己的 Rubygems。
操作步骤
使用如下内容创建 /etc/puppet/modules/repo/manifests/gem-server.pp 文件:
class repo::gem-server { include apache file { "/etc/apache2/sites-available/gemrepo": source => "puppet:///modules/repo/gemrepo.conf", require => Package["apache2-mpm-worker"], notify => Service["apache2"], } file { "/etc/apache2/sites-enabled/gemrepo": ensure => symlink, target => "/etc/apache2/sites-available/gemrepo", require => File["/etc/apache2/sites-available/gemrepo"], notify => Service["apache2"], } file { "/var/gemrepo": ensure => directory, } }
使用如下内容创建 /etc/puppet/modules/repo/files/gemrepo.conf 文件:
<VirtualHost *:80> ServerAdmin [email protected] ServerName gems.bitfieldconsulting.com ErrorLog logs/gems.bitfieldconsulting.com-error_log CustomLog logs/gems.bitfieldconsulting.com-access_log common Alias / /var/gemrepo/ <Location /> Options Indexes </Location> </VirtualHost>
在配置清单的节点中添加如下代码:
node cookbook { include repo::gem-server }
运行 Puppet:
# puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1304949279' notice: /Stage[main]/Repo::Gem-server/File[/etc/apache2/ sites-available/gemrepo]/ensure: defined content as '{md5} ae1fd948098f14503de02441d02a825d' info: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesavailable/ gemrepo]: Scheduling refresh of Service[apache2] notice: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesenabled/ gemrepo]/ensure: created info: /Stage[main]/Repo::Gem-server/File[/etc/apache2/sitesenabled/ gemrepo]: Scheduling refresh of Service[apache2] notice: /Stage[main]/Apache/Service[apache2]: Triggered 'refresh' from 2 events notice: /Stage[main]/Repo::Gem-server/File[/var/gemrepo]/ensure: created notice: Finished catalog run in 6.52 seconds
工作原理
其原理与 APT 仓库的例子是完全一样的。我们首先定义了一个 gem 仓库的存放目录, 然后定义了一个 Apache 的虚拟主机,使其能够响应 gems.bitfieldconsulting.com 的请求。
更多用法
与 APT 仓库类似,仅有空仓库是无用的,下面将演示如何将 gem 包纳入仓库, 以及如何配置你的节点访问自己的 gem 仓库。
添加 gem 仓库
向你的仓库添加新的 gems 包很简单。将 gem 文件存入 /var/gemrepo/gems 目录, 然后在 /var/gemrepo 目录下运行如下命令即可:
# gem generate_index
使用 gem 仓库
像使用 APT 仓库一样,首先确保你的节点能够解析主机名 gems.bitfieldconsulting.com, 既可以使用 Puppet 部署 host 资源,也可以通过配置 DNS 实现。
然后在 Puppet 中使用如下代码指定一个 gem 软件包:
package { "json":
provider => "gem",
source => "http://gems.bitfieldconsulting.com ",
}