ports/169481: [patch] sysutils/puppet fails to install packages
Romain Tartiere
romain at FreeBSD.org
Wed Jun 27 09:40:09 UTC 2012
>Number: 169481
>Category: ports
>Synopsis: [patch] sysutils/puppet fails to install packages
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jun 27 09:40:08 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Romain Tartiere
>Release: FreeBSD 9.0-STABLE amd64
>Organization:
>Environment:
System: FreeBSD marvin.blogreen.org 9.0-STABLE FreeBSD 9.0-STABLE #31 r237367: Thu Jun 21 11:52:53 CEST 2012 root at marvin.blogreen.org:/usr/obj/usr/src/sys/MARVIN amd64
>Description:
When using puppet with the default options, trying to install a package with a
manifest including for example the following lines will fail:
------ [beginning of manifest] ------
[...]
package { "sysutils/tmux":
ensure => installed,
}
[...]
--------- [end of manifest] ---------
------ [beginning of failure details] ------
# puppet agent --test --debug
[...]
debug: Prefetching freebsd resources for package
debug: Puppet::Type::Package::ProviderFreebsd: Executing '/usr/sbin/pkg_info -aoQ'
debug: Puppet::Type::Package::ProviderFreebsd: Executing '/usr/sbin/pkg_info -aoQ'
debug: Package: sysutils/tmux: origin => {:port_category=>"sysutils", :port_name=>"tmux"}
debug: Package: sysutils/tmux: source => #<URI::HTTP:0x805cf55f0 URL:http://packages.blogreen.org/>
debug: Fetching INDEX: #<URI::HTTP:0x805cf4290 URL:http://packages.blogreen.org/INDEX.bz2>
err: /Stage[main]/XXXX/Package[sysutils/tmux]/ensure: change from absent to present failed: Could not set 'present on ensure: can't convert nil into String at /usr/local/etc/puppet/manifests/site.pp:27
--------- [end of failure details] ---------
The file /usr/local/lib/ruby/site_ruby/1.8/puppet/provider/package/freebsd.rb
is patched from the origninal one by the port, but the error is tied into it.
Relevant code:
------ [beginning of failing code] ------
77 Puppet.debug "Fetching INDEX: #{uri.inspect}"
78 begin
79 open(uri, "r") do |f|
80 Bzip2::Reader.open(f.path) do |f|
81 while (line = f.gets)
82 fields = line.split("|")
83 pkg_info = self.class.parse_pkg_string(fields[0])
84 origin = self.class.parse_origin(fields[1])
85 @@ports_index[origin] = pkg_info
86 end
87 end
88 end
89 rescue IOError, OpenURI::HTTPError, Net::FTPError
90 @@ports_index = nil
91 raise Puppet::Error.new "Could not fetch ports INDEX: #{$!}"
92 end
--------- [end of failing code] ---------
>From IRB, the object provided by open at line 79 has no #path::
------ [beginning of failing code] ------
irb(main):001:0> require 'open-uri'
=> true
irb(main):002:0> open("http://packages.blogreen.org/INDEX-9.bz2", "r") do |f|
irb(main):003:1* f.path
irb(main):004:1> end
=> nil
--------- [end of failing code] ---------
Maybe this is a regression or something... AFAICR, this code used to work a
while ago.
>How-To-Repeat:
Try to install a package.
>Fix:
Bzip2::Reader.open seems to accept URIs, so we can just apply this change:
------ [beginning of fix] ------
--- files/optpatch-package_origin.orig 2012-06-27 11:34:23.466621862 +0200
+++ files/optpatch-package_origin 2012-06-27 11:34:53.903314301 +0200
@@ -96,14 +96,12 @@
+ uri = source.merge "INDEX.bz2"
+ Puppet.debug "Fetching INDEX: #{uri.inspect}"
+ begin
-+ open(uri, "r") do |f|
-+ Bzip2::Reader.open(f.path) do |f|
-+ while (line = f.gets)
-+ fields = line.split("|")
-+ pkg_info = self.class.parse_pkg_string(fields[0])
-+ origin = self.class.parse_origin(fields[1])
-+ @@ports_index[origin] = pkg_info
-+ end
++ Bzip2::Reader.open(uri) do |f|
++ while (line = f.gets)
++ fields = line.split("|")
++ pkg_info = self.class.parse_pkg_string(fields[0])
++ origin = self.class.parse_origin(fields[1])
++ @@ports_index[origin] = pkg_info
+ end
+ end
+ rescue IOError, OpenURI::HTTPError, Net::FTPError
--------- [end of fix] ---------
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list