mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-22 00:35:15 +00:00
- Update to 2.6.7
- Updates optional patch to use improved package provider - Adds patch to fix user/password provider hash usage PR: ports/156239 Submitted by: Russell Jackson <raj at csub.edu> (maintainer)
This commit is contained in:
parent
11afc57bb2
commit
bfb2d080be
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=272469
@ -6,7 +6,7 @@
|
||||
#
|
||||
|
||||
PORTNAME= puppet
|
||||
PORTVERSION= 2.6.6
|
||||
PORTVERSION= 2.6.7
|
||||
CATEGORIES= sysutils
|
||||
MASTER_SITES= http://www.puppetlabs.com/downloads/puppet/
|
||||
|
||||
@ -50,6 +50,7 @@ RUN_DEPENDS+= rubygem-mongrel>=0:${PORTSDIR}/www/rubygem-mongrel
|
||||
|
||||
.if defined(WITH_PACKAGE_ORIGIN)
|
||||
EXTRA_PATCHES+= ${FILESDIR}/optpatch-package_origin
|
||||
RUN_DEPENDS+= ${RUBY_SITEARCHLIBDIR}/bz2.so:${PORTSDIR}/archivers/ruby-bz2
|
||||
.endif
|
||||
|
||||
.include <bsd.port.pre.mk>
|
||||
|
@ -1,2 +1,2 @@
|
||||
SHA256 (puppet-2.6.6.tar.gz) = bc613c2764345947268a080ca0595aa6d4dbb0b9eab65d1476ff6542caf1647a
|
||||
SIZE (puppet-2.6.6.tar.gz) = 1514638
|
||||
SHA256 (puppet-2.6.7.tar.gz) = 90c0741f66d15716cfd76f0b8cd15f5b867056f0180ba160ce868350c6dd4ddc
|
||||
SIZE (puppet-2.6.7.tar.gz) = 1530756
|
||||
|
@ -1,19 +1,24 @@
|
||||
diff --git a/lib/puppet/provider/package/freebsd.rb b/lib/puppet/provider/package/freebsd.rb
|
||||
index e10a20b..fbda52d 100755
|
||||
diff --git lib/puppet/provider/package/freebsd.rb lib/puppet/provider/package/freebsd.rb
|
||||
index e10a20b..f36e29e 100755
|
||||
--- lib/puppet/provider/package/freebsd.rb
|
||||
+++ lib/puppet/provider/package/freebsd.rb
|
||||
@@ -1,36 +1,79 @@
|
||||
Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
|
||||
@@ -1,37 +1,165 @@
|
||||
-Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
|
||||
- desc "The specific form of package management on FreeBSD. This is an
|
||||
- extremely quirky packaging system, in that it freely mixes between
|
||||
- ports and packages. Apparently all of the tools are written in Ruby,
|
||||
- so there are plans to rewrite this support to directly use those
|
||||
- libraries."
|
||||
+ include Puppet::Util::Execution
|
||||
+require 'open-uri'
|
||||
+require 'net/ftp'
|
||||
+require 'bz2'
|
||||
|
||||
- commands :pkginfo => "/usr/sbin/pkg_info",
|
||||
- :pkgadd => "/usr/sbin/pkg_add",
|
||||
- :pkgdelete => "/usr/sbin/pkg_delete"
|
||||
+Puppet::Type.type(:package).provide :freebsd, :parent => Puppet::Provider::Package do
|
||||
+ include Puppet::Util::Execution
|
||||
+
|
||||
+ desc "The specific form of package management on FreeBSD. Resource names must be
|
||||
+ specified as the port origin: <port_category>/<port_name>."
|
||||
+
|
||||
@ -24,84 +29,168 @@ index e10a20b..fbda52d 100755
|
||||
confine :operatingsystem => :freebsd
|
||||
+ defaultfor :operatingsystem => :freebsd
|
||||
+
|
||||
+ def self.instances
|
||||
+ packages = []
|
||||
+
|
||||
+ output = pkginfo "-aoQ"
|
||||
+ output.split("\n").each do |data|
|
||||
+ lhs, pkg_origin = data.split(":")
|
||||
+ pkg_name = lhs.split("-").slice(0..-2).join("-")
|
||||
+ pkg_version = lhs.split("-")[-1]
|
||||
+
|
||||
+ packages << new({
|
||||
+ :provider => self.name,
|
||||
+ :name => pkg_origin,
|
||||
+ :ensure => pkg_version,
|
||||
+ })
|
||||
+ end
|
||||
+ @@lock = Mutex.new
|
||||
+ @@ports_index = nil
|
||||
|
||||
- def self.listcmd
|
||||
- command(:pkginfo)
|
||||
+ packages
|
||||
+ # fix bug in URI::FTP merge method that tries to set typecode
|
||||
+ # even when other is a string.
|
||||
+ class URI::FTP
|
||||
+ def merge(other)
|
||||
+ tmp = super(other)
|
||||
+ if self != tmp
|
||||
+ tmp.set_typecode(other.typecode) rescue NoMethodError
|
||||
+ end
|
||||
+ return tmp
|
||||
+ end
|
||||
end
|
||||
|
||||
def install
|
||||
should = @resource.should(:ensure)
|
||||
+
|
||||
+ origin = {}
|
||||
+ [:category, :name].zip(@resource[:name].split("/")).each { |a,b| origin[a] = b }
|
||||
+ Puppet.debug "origin => #{origin.inspect}"
|
||||
+ if origin[:name] == nil
|
||||
+ raise Puppet::Error.new "package name must be in origin format: <category>/<name>"
|
||||
+ end
|
||||
- def install
|
||||
- should = @resource.should(:ensure)
|
||||
+ def self.parse_pkg_string(pkg_string)
|
||||
+ {
|
||||
+ :pkg_name => pkg_string.split("-").slice(0..-2).join("-"),
|
||||
+ :pkg_version => pkg_string.split("-")[-1],
|
||||
+ }
|
||||
+ end
|
||||
+
|
||||
+ # source parameter is set
|
||||
+ if @resource[:source]
|
||||
+ source = URI.parse(@resource[:source])
|
||||
+ Puppet.debug "source => #{source.inspect}"
|
||||
+ def self.unparse_pkg_info(pkg_info)
|
||||
+ [:pkg_name, :pkg_version].map { |key| pkg_info[key] }.join("-")
|
||||
+ end
|
||||
+
|
||||
+ def self.parse_origin(origin_path)
|
||||
+ begin
|
||||
+ origin = {
|
||||
+ :port_category => origin_path.split("/").fetch(-2),
|
||||
+ :port_name => origin_path.split("/").fetch(-1),
|
||||
+ }
|
||||
+ rescue IndexError
|
||||
+ raise Puppet::Error.new "#{origin_path}: not in required origin format: .*/<port_category>/<port_name>"
|
||||
+ end
|
||||
+ origin
|
||||
+ end
|
||||
|
||||
- if @resource[:source] =~ /\/$/
|
||||
- if @resource[:source] =~ /^(ftp|https?):/
|
||||
- Puppet::Util::Execution::withenv :PACKAGESITE => @resource[:source] do
|
||||
- pkgadd "-r", @resource[:name]
|
||||
+ # URI is for local file path.
|
||||
+ if (source.scheme == "file" || source.scheme == nil) && source.path
|
||||
+ # Pass pkg_add only the URI path.
|
||||
+ pkgadd source.path
|
||||
+ def self.instances
|
||||
+ packages = []
|
||||
+ output = pkginfo "-aoQ"
|
||||
+ output.split("\n").each do |data|
|
||||
+ pkg_string, pkg_origin = data.split(":")
|
||||
+ pkg_info = self.parse_pkg_string(pkg_string)
|
||||
+
|
||||
+ # URI scheme is something other than 'file'.
|
||||
+ elsif source.scheme && source.host && source.path
|
||||
+ if source.path.end_with?(".tbz") # URI references a package.
|
||||
+ # Pass pkg_add the entire URI.
|
||||
+ pkgadd source.to_s
|
||||
+ else # Assume URI references a directory.
|
||||
+ # Set PACKAGESITE in execution environment to source URI.
|
||||
+ # Pass pkg_add the origin name.
|
||||
+ withenv :PACKAGESITE => source.path.end_with?("/") ? source.to_s : source.to_s << "/" do
|
||||
+ Puppet.debug "ENV['PACKAGESITE'] => #{ENV['PACKAGESITE']}"
|
||||
+ pkgadd "-rf", origin[:name]
|
||||
+ packages << new({
|
||||
+ :provider => self.name,
|
||||
+ :name => pkg_origin,
|
||||
+ :ensure => pkg_info[:pkg_version],
|
||||
+ })
|
||||
+ end
|
||||
+ packages
|
||||
+ end
|
||||
+
|
||||
+ def ports_index
|
||||
+ @@lock.synchronize do
|
||||
+ if @@ports_index.nil?
|
||||
+ @@ports_index = {}
|
||||
+ uri = source.merge "INDEX.bz2"
|
||||
+ Puppet.debug "Fetching INDEX: #{uri.inspect}"
|
||||
+ begin
|
||||
+ open(uri, "r") do |f|
|
||||
+ BZ2::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
|
||||
+ end
|
||||
+ end
|
||||
+ rescue IOError, OpenURI::HTTPError, Net::FTPError
|
||||
+ @@ports_index = nil
|
||||
+ raise Puppet::Error.new "Could not fetch ports INDEX: #{$!}"
|
||||
end
|
||||
+
|
||||
+ # URI is not usable by pkg_add
|
||||
else
|
||||
- else
|
||||
- Puppet::Util::Execution::withenv :PKG_PATH => @resource[:source] do
|
||||
- pkgadd @resource[:name]
|
||||
- end
|
||||
+ raise Puppet::Error.new "source URI is inappropriate: #{source.inspect}"
|
||||
end
|
||||
+ end
|
||||
+ end
|
||||
+ @@ports_index
|
||||
+ end
|
||||
+
|
||||
+ # source parameter is not set.
|
||||
+ def uri_path
|
||||
+ Facter.loadfacts
|
||||
+ File.join(
|
||||
+ "/", "pub", "FreeBSD", "ports",
|
||||
+ Facter.value(:hardwareisa),
|
||||
+ [
|
||||
+ "packages",
|
||||
+ Facter.value(:kernelmajversion).split(".")[0],
|
||||
+ "stable",
|
||||
+ ].join("-")
|
||||
+ ) << "/"
|
||||
+ end
|
||||
+
|
||||
+ def source
|
||||
+ if !defined? @source
|
||||
+ if @resource[:source]
|
||||
+ @source = URI.parse(@resource[:source])
|
||||
+ if @source.path.empty?
|
||||
+ @source.merge! uri_path
|
||||
end
|
||||
+ else # source parameter not set; build default source URI
|
||||
+ @source = URI::FTP.build({
|
||||
+ :host => "ftp.freebsd.org",
|
||||
+ :path => uri_path,
|
||||
+ })
|
||||
end
|
||||
+ Puppet.debug "Package: #{@resource[:name]}: source => #{@source.inspect}"
|
||||
+ end
|
||||
+ @source
|
||||
+ end
|
||||
+
|
||||
+ def origin
|
||||
+ if !defined? @origin
|
||||
+ @origin = self.class.parse_origin(@resource[:name])
|
||||
+ Puppet.debug "Package: #{@resource[:name]}: origin => #{@origin.inspect}"
|
||||
+ end
|
||||
+ @origin
|
||||
+ end
|
||||
+
|
||||
+ def package_uri
|
||||
+ begin
|
||||
+ pkg_name = self.class.unparse_pkg_info(ports_index.fetch(origin))
|
||||
+ rescue IndexError
|
||||
+ raise Puppet::Error.new "package not found in INDEX"
|
||||
+ end
|
||||
+ uri = source.merge File.join("All", pkg_name + ".tbz")
|
||||
+ Puppet.debug "Package: #{@resource[:name]}: package_uri => #{uri.inspect}"
|
||||
+ uri
|
||||
+ end
|
||||
+
|
||||
+ def install
|
||||
+ should = @resource.should(:ensure)
|
||||
+ origin # call origin so we check the package name for correctness early
|
||||
+
|
||||
+ # Source URI is for local file path.
|
||||
+ if !source.absolute? or source.scheme == "file"
|
||||
+ pkgadd source.path
|
||||
+ # Source URI is to specific package file
|
||||
+ elsif source.absolute? && source.path.end_with?(".tbz")
|
||||
+ pkgadd source.to_s
|
||||
+ # Source URI is to a package repository
|
||||
else
|
||||
- Puppet.warning "source is defined but does not have trailing slash, ignoring #{@resource[:source]}" if @resource[:source]
|
||||
- pkgadd "-r", @resource[:name]
|
||||
+ # fetch package using default PACKAGESITE directory logic.
|
||||
+ # Pass pkg_add the origin name.
|
||||
+ pkgadd "-rf", origin[:name]
|
||||
+ pkgadd "-f", package_uri.to_s
|
||||
end
|
||||
+ nil
|
||||
end
|
||||
|
||||
@@ -44,7 +87,7 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
|
||||
def query
|
||||
@@ -44,7 +172,7 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
|
||||
end
|
||||
|
||||
def uninstall
|
||||
|
42
sysutils/puppet/files/patch-fix_password_provider
Normal file
42
sysutils/puppet/files/patch-fix_password_provider
Normal file
@ -0,0 +1,42 @@
|
||||
diff --git lib/puppet/provider/user/pw.rb lib/puppet/provider/user/pw.rb
|
||||
index a5988ca..c2fff37 100644
|
||||
--- lib/puppet/provider/user/pw.rb
|
||||
+++ lib/puppet/provider/user/pw.rb
|
||||
@@ -1,10 +1,11 @@
|
||||
require 'puppet/provider/nameservice/pw'
|
||||
+require 'open3'
|
||||
|
||||
Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::PW do
|
||||
desc "User management via `pw` on FreeBSD."
|
||||
|
||||
commands :pw => "pw"
|
||||
- has_features :manages_homedir, :allows_duplicates
|
||||
+ has_features :manages_homedir, :allows_duplicates, :manages_passwords
|
||||
|
||||
defaultfor :operatingsystem => :freebsd
|
||||
|
||||
@@ -37,5 +38,24 @@ Puppet::Type.type(:user).provide :pw, :parent => Puppet::Provider::NameService::
|
||||
|
||||
cmd
|
||||
end
|
||||
+
|
||||
+ # use pw to update password hash
|
||||
+ def password=(cryptopw)
|
||||
+ Puppet.debug "change password for user '#{@resource[:name]}' method called with hash '#{cryptopw}'"
|
||||
+ stdin, stdout, stderr = Open3.popen3("pw user mod #{@resource[:name]} -H 0")
|
||||
+ stdin.puts(cryptopw)
|
||||
+ stdin.close
|
||||
+ Puppet.debug "finished password for user '#{@resource[:name]}' method called with hash '#{cryptopw}'"
|
||||
+ end
|
||||
+
|
||||
+ # get password from /etc/master.passwd
|
||||
+ def password
|
||||
+ Puppet.debug "checking password for user '#{@resource[:name]}' method called"
|
||||
+ current_passline = `getent passwd #{@resource[:name]}`
|
||||
+ current_password = current_passline.chomp.split(':')[1] if current_passline
|
||||
+ Puppet.debug "finished password for user '#{@resource[:name]}' method called : '#{current_password}'"
|
||||
+ current_password
|
||||
+ end
|
||||
+
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user