summaryrefslogtreecommitdiff
path: root/sysutils
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils')
-rw-r--r--sysutils/puppet26/Makefile103
-rw-r--r--sysutils/puppet26/distinfo2
-rw-r--r--sysutils/puppet26/files/optpatch-package_origin202
-rw-r--r--sysutils/puppet26/files/patch-demote_ports_provider13
-rw-r--r--sysutils/puppet26/files/patch-fix_password_provider42
-rw-r--r--sysutils/puppet26/files/pkg-deinstall.in14
-rw-r--r--sysutils/puppet26/files/pkg-install.in54
-rw-r--r--sysutils/puppet26/files/pkg-message.in14
-rw-r--r--sysutils/puppet26/files/puppet.in32
-rw-r--r--sysutils/puppet26/files/puppetmaster.in57
-rw-r--r--sysutils/puppet26/pkg-descr7
-rw-r--r--sysutils/puppet26/pkg-plist14
12 files changed, 554 insertions, 0 deletions
diff --git a/sysutils/puppet26/Makefile b/sysutils/puppet26/Makefile
new file mode 100644
index 000000000000..4e52d44f56bc
--- /dev/null
+++ b/sysutils/puppet26/Makefile
@@ -0,0 +1,103 @@
+# New ports collection makefile for: rubygem-puppet
+# Date created: 2007-03-03
+# Whom: Tomoyuki Sakurai <cherry@trombik.mine.nu>
+#
+# $FreeBSD$
+#
+
+PORTNAME= puppet
+PORTVERSION= 2.6.7
+CATEGORIES= sysutils
+MASTER_SITES= http://www.puppetlabs.com/downloads/puppet/
+
+MAINTAINER= anders@FreeBSD.org
+COMMENT= A configuration management framework written in Ruby
+
+RUN_DEPENDS= ${RUBY_SITELIBDIR}/facter.rb:${PORTSDIR}/sysutils/facter \
+ rubygem-ruby-augeas>=0:${PORTSDIR}/textproc/rubygem-augeas \
+ ${RUBY_ARCHLIBDIR}/iconv.so:${PORTSDIR}/converters/ruby-iconv
+
+CONFLICTS= puppet-[0-9]*
+
+NO_BUILD= yes
+USE_RUBY= yes
+USE_RC_SUBR= puppet puppetmaster
+PORTDOCS= CHANGELOG README LICENSE COPYING
+PORTEXAMPLES= *
+PUPPET_USER:= puppet
+PUPPET_GROUP:= ${PUPPET_USER}
+PUPPET_VARDIR:= /var/${PORTNAME}
+PUPPET_RUNDIR:= /var/run/${PORTNAME}
+SUB_FILES+= pkg-install pkg-message pkg-deinstall
+SUB_LIST+= PUPPET_USER="${PUPPET_USER}" \
+ PUPPET_GROUP="${PUPPET_GROUP}" \
+ PUPPET_VARDIR="${PUPPET_VARDIR}" \
+ PUPPET_RUNDIR="${PUPPET_RUNDIR}"
+
+MANCOMPRESSED= yes
+MAN5= puppet.conf.5
+MAN8= filebucket.8 pi.8 puppet.8 puppetca.8 puppetd.8 \
+ puppetdoc.8 puppetmasterd.8 puppetrun.8 ralsh.8 puppetqd.8
+
+OPTIONS= MONGREL "Run puppet server as a mongrel service" Off \
+ PACKAGE_ORIGIN "Use port origin as package name" On
+
+.include <bsd.port.options.mk>
+
+.if defined(WITH_MONGREL)
+RUN_DEPENDS+= rubygem-mongrel>=0:${PORTSDIR}/www/rubygem-mongrel
+.endif
+
+.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>
+
+post-patch:
+ @${REINPLACE_CMD} -e "s|/etc/puppet|${ETCDIR}|" \
+ ${WRKSRC}/install.rb \
+ ${WRKSRC}/lib/puppet/reference/configuration.rb \
+ ${WRKSRC}/lib/puppet/defaults.rb \
+ ${WRKSRC}/lib/puppet/util/run_mode.rb
+ @${REINPLACE_CMD} -e "s|/var/lib/puppet|${PUPPET_VARDIR}|" \
+ ${WRKSRC}/lib/puppet/reference/configuration.rb \
+ ${WRKSRC}/lib/puppet/util/run_mode.rb
+ @${REINPLACE_CMD} -e "s|\$$vardir/run|${PUPPET_RUNDIR}|" \
+ ${WRKSRC}/lib/puppet/util/run_mode.rb
+ @${REINPLACE_CMD} -e "s|\$$confdir/ssl|${PUPPET_VARDIR}/ssl|" \
+ ${WRKSRC}/lib/puppet/defaults.rb
+
+pre-install:
+ @${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
+
+do-install:
+ @cd ${WRKSRC} && ${SETENV} PREFIX=${PREFIX} ${RUBY} ${WRKSRC}/install.rb --no-configs
+
+post-install:
+ ${INSTALL} -d ${ETCDIR}
+ ${INSTALL} -m 0644 ${WRKSRC}/conf/auth.conf ${ETCDIR}/auth.conf-dist
+ ${RUBY} -I ${RUBY_SITELIBDIR} ${PREFIX}/sbin/puppetmasterd \
+ --confdir=${ETCDIR} \
+ --rundir=${PUPPET_RUNDIR} \
+ --genconfig | \
+ ${SED} -e 's/genconfig = true/# genconfig = false/' \
+ > ${ETCDIR}/puppet.conf-dist
+ @${ECHO} ${RUBY_SITELIBDIR}/puppet.rb | \
+ ${SED} 's,^${PREFIX}/,,' >> ${TMPPLIST}
+ @${FIND} ${RUBY_SITELIBDIR}/${PORTNAME} -type f | \
+ ${SED} 's,^${PREFIX}/,,' >> ${TMPPLIST}
+ @${FIND} ${RUBY_SITELIBDIR}/${PORTNAME} -type d | ${SORT} -r | \
+ ${SED} 's,^${PREFIX}/,@dirrm ,' >> ${TMPPLIST}
+ @${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
+.if !defined(NOPORTDOCS)
+ ${INSTALL} -d ${DOCSDIR}
+ cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCS} ${DOCSDIR}
+.endif
+.if !defined(NOPORTEXAMPLES)
+ cd ${WRKSRC}/examples/ && ${COPYTREE_SHARE} . ${EXAMPLESDIR}
+.endif
+ @${CAT} ${PKGMESSAGE}
+
+.include <bsd.port.post.mk>
diff --git a/sysutils/puppet26/distinfo b/sysutils/puppet26/distinfo
new file mode 100644
index 000000000000..17dcc99b92e7
--- /dev/null
+++ b/sysutils/puppet26/distinfo
@@ -0,0 +1,2 @@
+SHA256 (puppet-2.6.7.tar.gz) = 90c0741f66d15716cfd76f0b8cd15f5b867056f0180ba160ce868350c6dd4ddc
+SIZE (puppet-2.6.7.tar.gz) = 1530756
diff --git a/sysutils/puppet26/files/optpatch-package_origin b/sysutils/puppet26/files/optpatch-package_origin
new file mode 100644
index 000000000000..e1cef54cfb52
--- /dev/null
+++ b/sysutils/puppet26/files/optpatch-package_origin
@@ -0,0 +1,202 @@
+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,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."
++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>."
++
++ commands :pkginfo => "/usr/sbin/pkg_info",
++ :pkgadd => "/usr/sbin/pkg_add",
++ :pkgdelete => "/usr/sbin/pkg_delete"
+
+ confine :operatingsystem => :freebsd
++ defaultfor :operatingsystem => :freebsd
++
++ @@lock = Mutex.new
++ @@ports_index = nil
+
+- def self.listcmd
+- command(:pkginfo)
++ # 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)
++ def self.parse_pkg_string(pkg_string)
++ {
++ :pkg_name => pkg_string.split("-").slice(0..-2).join("-"),
++ :pkg_version => pkg_string.split("-")[-1],
++ }
++ end
++
++ 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]
++ 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)
++
++ 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
+- else
+- Puppet::Util::Execution::withenv :PKG_PATH => @resource[:source] do
+- pkgadd @resource[:name]
++ end
++ end
++ @@ports_index
++ end
++
++ 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]
++ pkgadd "-f", package_uri.to_s
+ end
++ nil
+ end
+
+ def query
+@@ -44,7 +172,7 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
+ end
+
+ def uninstall
+- pkgdelete "#{@resource[:name]}-#{@resource.should(:ensure)}"
++ output = pkginfo "-qO", @resource[:name]
++ output.split("\n").each { |pkg_name| pkgdelete([pkg_name]) }
+ end
+ end
+-
diff --git a/sysutils/puppet26/files/patch-demote_ports_provider b/sysutils/puppet26/files/patch-demote_ports_provider
new file mode 100644
index 000000000000..6e5245f4c44c
--- /dev/null
+++ b/sysutils/puppet26/files/patch-demote_ports_provider
@@ -0,0 +1,13 @@
+diff --git a/lib/puppet/provider/package/ports.rb b/lib/puppet/provider/package/ports.rb
+index c802092..1f2ed43 100755
+--- lib/puppet/provider/package/ports.rb
++++ lib/puppet/provider/package/ports.rb
+@@ -6,8 +6,6 @@ Puppet::Type.type(:package).provide :ports, :parent => :freebsd, :source => :fre
+ :portuninstall => "/usr/local/sbin/pkg_deinstall",
+ :portinfo => "/usr/sbin/pkg_info"
+
+- defaultfor :operatingsystem => :freebsd
+-
+ # I hate ports
+ %w{INTERACTIVE UNAME}.each do |var|
+ ENV.delete(var) if ENV.include?(var)
diff --git a/sysutils/puppet26/files/patch-fix_password_provider b/sysutils/puppet26/files/patch-fix_password_provider
new file mode 100644
index 000000000000..8fd0e20fac78
--- /dev/null
+++ b/sysutils/puppet26/files/patch-fix_password_provider
@@ -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
+
diff --git a/sysutils/puppet26/files/pkg-deinstall.in b/sysutils/puppet26/files/pkg-deinstall.in
new file mode 100644
index 000000000000..695acf2661ef
--- /dev/null
+++ b/sysutils/puppet26/files/pkg-deinstall.in
@@ -0,0 +1,14 @@
+#!/bin/sh
+# $FreeBSD$
+
+PATH="/bin:/sbin:/usr/bin:/usr/sbin"
+
+RUNDIR=%%PUPPET_RUNDIR%%
+VARDIR=%%PUPPET_VARDIR%%
+
+if [ "$2" = "POST-DEINSTALL" ]; then
+ echo "=> Deleting ${RUNDIR} if empty..."
+ rm -d ${RUNDIR} 2>/dev/null || true
+ echo "=> Deleting ${VARDIR} if empty..."
+ rm -d ${VARDIR} 2>/dev/null || true
+fi
diff --git a/sysutils/puppet26/files/pkg-install.in b/sysutils/puppet26/files/pkg-install.in
new file mode 100644
index 000000000000..9aad2d58e591
--- /dev/null
+++ b/sysutils/puppet26/files/pkg-install.in
@@ -0,0 +1,54 @@
+#!/bin/sh
+# $FreeBSD$
+PATH="/bin:/sbin:/usr/bin:/usr/sbin"
+
+PUPPET_USER=%%PUPPET_USER%%
+PUPPET_GROUP=%%PUPPET_GROUP%%
+UID=814
+GID=$UID
+
+RUNDIR=%%PUPPET_RUNDIR%%
+VARDIR=%%PUPPET_VARDIR%%
+
+PW="pw"
+CHOWN="chown"
+INSTALL_DIR="install -d -o ${PUPPET_USER} -g ${PUPPET_GROUP} -m 0755"
+
+if [ "$2" = "PRE-INSTALL" ]; then
+
+ if ! ${PW} groupshow ${PUPPET_GROUP} 2>/dev/null 1>&2; then
+ if ${PW} groupadd ${PUPPET_GROUP} -g $GID; then
+ echo "=> Added group \"${PUPPET_GROUP}\"."
+ else
+ echo "=> Adding group \"${PUPPET_GROUP}\" failed..."
+ exit 1
+ fi
+ fi
+
+ if ! ${PW} usershow ${PUPPET_USER} 2>/dev/null 1>&2; then
+ if ${PW} useradd ${PUPPET_USER} -u $UID -g ${PUPPET_GROUP} -h - \
+ -s "/sbin/nologin" -d "/nonexistent" \
+ -c "Puppet Daemon"; then
+ echo "=> Added user \"${PUPPET_USER}\"."
+ else
+ echo "=> Adding user \"${PUPPET_USER}\" failed..."
+ exit 1
+ fi
+ fi
+
+elif [ "$2" = "POST-INSTALL" ]; then
+ if [ -d ${RUNDIR} ]; then
+ echo "=> ${RUNDIR} already exists."
+ else
+ echo -n "=> Creating RUNDIR ${RUNDIR}... "
+ ${INSTALL_DIR} ${RUNDIR} || echo "failed"
+ fi
+ if [ -d ${VARDIR} ]; then
+ echo "=> ${VARDIR} already exists."
+ else
+ echo -n "=> Creating VARDIR ${VARDIR}... "
+ ${INSTALL_DIR} ${VARDIR} || echo "failed"
+ fi
+fi
+
+exit 0
diff --git a/sysutils/puppet26/files/pkg-message.in b/sysutils/puppet26/files/pkg-message.in
new file mode 100644
index 000000000000..1ba663e6a5fe
--- /dev/null
+++ b/sysutils/puppet26/files/pkg-message.in
@@ -0,0 +1,14 @@
+
+To enable the puppet agent, add the following to /etc/rc.conf:
+
+ puppet_enable="YES"
+
+To enable the puppetmaster, add the following to /etc/rc.conf:
+
+ puppetmaster_enable="YES"
+
+Individual config files such as %%PREFIX%%/etc/puppetmasterd.conf are
+deprecated. Use a single file, %%ETCDIR%%/puppet.conf.
+
+The default PID directory is %%PUPPET_RUNDIR%%.
+
diff --git a/sysutils/puppet26/files/puppet.in b/sysutils/puppet26/files/puppet.in
new file mode 100644
index 000000000000..7ffa33d40404
--- /dev/null
+++ b/sysutils/puppet26/files/puppet.in
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: puppet
+# REQUIRE: NETWORK
+
+#
+# Add the following lines to /etc/rc.conf to enable the puppet agent:
+#
+# puppet_enable="YES"
+
+. /etc/rc.subr
+
+name="puppet"
+rcvar=`set_rcvar`
+
+load_rc_config "$name"
+
+: ${puppet_enable="NO"}
+: ${puppet_rundir="%%PUPPET_RUNDIR%%"}
+: ${puppet_flags="--rundir=${puppet_rundir}"}
+
+command_interpreter="%%PREFIX%%/bin/ruby18"
+command="%%PREFIX%%/bin/puppet"
+command_args="agent ${puppet_flags}"
+unset puppet_flags
+
+pidfile="${puppet_rundir}/agent.pid"
+
+run_rc_command "$1"
diff --git a/sysutils/puppet26/files/puppetmaster.in b/sysutils/puppet26/files/puppetmaster.in
new file mode 100644
index 000000000000..9cf60b580000
--- /dev/null
+++ b/sysutils/puppet26/files/puppetmaster.in
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: puppetmaster
+# REQUIRE: NETWORK
+
+# Add the following lines to /etc/rc.conf to enable the puppetmaster:
+#
+# puppetmaster_enable="YES"
+#
+
+. /etc/rc.subr
+
+name="puppetmaster"
+rcvar=`set_rcvar`
+
+load_rc_config "${name}"
+
+: ${puppetmaster_enable="NO"}
+: ${puppetmaster_rundir="%%PUPPET_RUNDIR%%"}
+: ${puppetmaster_flags="--rundir=${puppetmaster_rundir}"}
+: ${puppetmaster_mongrel_ports=""}
+
+command_interpreter="%%PREFIX%%/bin/ruby18"
+command="%%PREFIX%%/bin/puppet"
+command_args="master ${puppetmaster_flags}"
+unset puppetmaster_flags
+
+pidfile="${puppetmaster_rundir}/master.pid"
+
+start_precmd="puppetmaster_checkconfig"
+restart_precmd="puppetmaster_checkconfig"
+puppetmaster_checkconfig() {
+ echo -n "Performing sanity check of ${name} configuration: "
+ ${command} ${command_args} --parseonly >/dev/null 2>&1
+ rv=$?
+ if [ $rv != 0 ]; then
+ echo "FAILED, ${name} exited with status ${rv}"
+ ${command} ${command_args} --parseonly
+ return 1
+ else
+ echo "OK"
+ fi
+}
+
+if [ -z "${puppetmaster_mongrel_ports}" ]; then
+ run_rc_command "$1"
+else
+ for port in ${puppetmaster_mongrel_ports}; do
+ pidfile="${puppetmaster_rundir}/mongrel.${port}.pid"
+ command_args="master --pidfile=${pidfile} --servertype=mongrel --masterport=${port}"
+ run_rc_command "$1"
+ _rc_restart_done="false"
+ done
+fi
diff --git a/sysutils/puppet26/pkg-descr b/sysutils/puppet26/pkg-descr
new file mode 100644
index 000000000000..a29c19f53ba8
--- /dev/null
+++ b/sysutils/puppet26/pkg-descr
@@ -0,0 +1,7 @@
+Puppet lets you centrally manage every important aspect of your system using
+a cross-platform specification language that manages all the separate
+elements normally aggregated in different files, like users, cron jobs, and
+hosts, along with obviously discrete elements like packages, services, and
+files.
+
+WWW: http://www.puppetlabs.com
diff --git a/sysutils/puppet26/pkg-plist b/sysutils/puppet26/pkg-plist
new file mode 100644
index 000000000000..5fe745387d77
--- /dev/null
+++ b/sysutils/puppet26/pkg-plist
@@ -0,0 +1,14 @@
+@comment $FreeBSD$
+bin/filebucket
+bin/pi
+bin/puppet
+bin/puppetdoc
+bin/ralsh
+sbin/puppetca
+sbin/puppetd
+sbin/puppetmasterd
+sbin/puppetqd
+sbin/puppetrun
+%%ETCDIR%%/puppet.conf-dist
+%%ETCDIR%%/auth.conf-dist
+@dirrmtry etc/puppet