git: e9c5ed32578f - main - sysutils/puppetserver8: New port

From: Romain Tartière <romain_at_FreeBSD.org>
Date: Sat, 29 Apr 2023 01:36:28 UTC
The branch main has been updated by romain:

URL: https://cgit.FreeBSD.org/ports/commit/?id=e9c5ed32578f79b7324aab9ba9fe5d2b76a089a2

commit e9c5ed32578f79b7324aab9ba9fe5d2b76a089a2
Author:     Romain Tartière <romain@FreeBSD.org>
AuthorDate: 2023-04-28 21:00:54 +0000
Commit:     Romain Tartière <romain@FreeBSD.org>
CommitDate: 2023-04-29 01:36:10 +0000

    sysutils/puppetserver8: New port
    
    Puppet master is a Ruby application that compiles configurations
    for any number of Puppet agent nodes, using Puppet code and various
    other data sources. (For more info, see Overview of Puppet's
    Architecture.)
    
    Puppet Server is an application that runs on the Java Virtual Machine
    (JVM) and provides the same services as the classic Puppet master
    application. It mostly does this by running the existing Puppet
    master code in several JRuby interpreters, but it replaces some
    parts of the classic application with new services written in
    Clojure.
---
 sysutils/Makefile                                  |  1 +
 sysutils/puppetserver6/Makefile                    |  2 +-
 sysutils/puppetserver7/Makefile                    |  2 +-
 sysutils/puppetserver8/Makefile                    | 93 +++++++++++++++++++++
 sysutils/puppetserver8/distinfo                    |  3 +
 .../files/patch-ext__bin__puppetserver             | 15 ++++
 .../puppetserver8/files/patch-ext__cli__foreground | 19 +++++
 .../files/patch-ext__cli_defaults__cli-defaults.sh | 12 +++
 .../files/patch-ext__config__conf.d__global.conf   |  9 ++
 .../patch-ext__config__conf.d__puppetserver.conf   | 55 +++++++++++++
 .../patch-ext__config__conf.d__webserver.conf      |  9 ++
 .../files/patch-ext__config__logback.xml           | 17 ++++
 .../files/patch-ext__config__request-logging.xml   | 15 ++++
 .../files/patch-ext__ezbake-functions.sh           | 11 +++
 sysutils/puppetserver8/files/pkg-message.in        | 17 ++++
 sysutils/puppetserver8/files/puppetserver.in       | 95 ++++++++++++++++++++++
 sysutils/puppetserver8/pkg-descr                   | 11 +++
 sysutils/puppetserver8/pkg-plist                   | 29 +++++++
 18 files changed, 413 insertions(+), 2 deletions(-)

diff --git a/sysutils/Makefile b/sysutils/Makefile
index b083a01344eb..4335459241c2 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -1061,6 +1061,7 @@
     SUBDIR += puppet8
     SUBDIR += puppetserver6
     SUBDIR += puppetserver7
+    SUBDIR += puppetserver8
     SUBDIR += pv
     SUBDIR += pwd_unmkdb
     SUBDIR += pwgen
diff --git a/sysutils/puppetserver6/Makefile b/sysutils/puppetserver6/Makefile
index 751c3609d699..e3d21abf31be 100644
--- a/sysutils/puppetserver6/Makefile
+++ b/sysutils/puppetserver6/Makefile
@@ -31,7 +31,7 @@ NO_ARCH=	yes
 NO_BUILD=	yes
 JAVA_VERSION=	8+
 
-CONFLICTS_INSTALL=	puppetserver7
+CONFLICTS_INSTALL=	puppetserver[0-9]
 
 SHEBANG_FILES=	ext/bin/puppetserver
 
diff --git a/sysutils/puppetserver7/Makefile b/sysutils/puppetserver7/Makefile
index c73024cdc921..f88f4174befc 100644
--- a/sysutils/puppetserver7/Makefile
+++ b/sysutils/puppetserver7/Makefile
@@ -28,7 +28,7 @@ NO_ARCH=	yes
 NO_BUILD=	yes
 JAVA_VERSION=	8+
 
-CONFLICTS_INSTALL=	puppetserver5 puppetserver6
+CONFLICTS_INSTALL=	puppetserver[0-9]
 
 SHEBANG_FILES=	ext/bin/puppetserver
 
diff --git a/sysutils/puppetserver8/Makefile b/sysutils/puppetserver8/Makefile
new file mode 100644
index 000000000000..7b38e8445f60
--- /dev/null
+++ b/sysutils/puppetserver8/Makefile
@@ -0,0 +1,93 @@
+PORTNAME=	puppetserver
+PORTVERSION=	8.0.0
+CATEGORIES=	sysutils java
+MASTER_SITES=	https://downloads.puppetlabs.com/puppet/
+PKGNAMESUFFIX=	8
+DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
+EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER=	puppet@FreeBSD.org
+COMMENT=	Puppet Server running in the JVM
+WWW=		https://docs.puppetlabs.com/puppetserver/latest/services_master_puppetserver.html
+
+LICENSE=	APACHE20
+
+ONLY_FOR_ARCHS=	amd64
+
+RUN_DEPENDS=	bash>=0:shells/bash \
+		puppet8>=8.0:sysutils/puppet8 \
+		rubygem-puppetserver-ca>=1:sysutils/rubygem-puppetserver-ca \
+		rubygem-semantic_puppet>=1:devel/rubygem-semantic_puppet \
+		sudo>=1:security/sudo
+
+USES=		ruby shebangfix
+USE_RC_SUBR=	puppetserver
+
+USE_JAVA=	yes
+NO_ARCH=	yes
+NO_BUILD=	yes
+JAVA_VERSION=	8+
+
+CONFLICTS_INSTALL=	puppetserver[0-9]
+
+SHEBANG_FILES=	ext/bin/puppetserver
+
+USERS=		puppet
+GROUPS=		puppet
+
+SUB_LIST=	JAVA_HOME=${JAVA_HOME}
+SUB_FILES=	pkg-message
+
+post-patch:
+.for file in ext/config/logback.xml ext/config/request-logging.xml \
+	ext/config/conf.d/global.conf ext/config/conf.d/puppetserver.conf \
+	ext/config/conf.d/web-routes.conf ext/config/conf.d/webserver.conf \
+	ext/config/conf.d/auth.conf ext/config/services.d/ca.cfg \
+	ext/system-config/services.d/bootstrap.cfg ext/bin/puppetserver \
+	ext/cli_defaults/cli-defaults.sh ext/cli/foreground
+	@${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|' \
+		-e 's|%%RUBY_SITELIBDIR%%|${RUBY_SITELIBDIR}|' \
+		-e 's|%%RUBY_VER%%|${RUBY_VER}|' \
+		-e 's|%%JAVA%%|${JAVA}|' \
+		-e 's|%%ETCDIR%%|${ETCDIR}|' \
+		-e 's|%%DATADIR%%|${DATADIR}|' \
+		${WRKSRC}/${file}
+.endfor
+	@${REINPLACE_CMD} -e 's|#!/opt/puppetlabs/puppet/bin/ruby|#!${RUBY}|' \
+		${WRKSRC}/ext/cli/ca \
+		${WRKSRC}/ext/cli/dropsonde
+
+do-install:
+	@${MKDIR} ${STAGEDIR}${DATADIR}/cli/apps
+	@${MKDIR} ${STAGEDIR}${ETCDIR}/conf.d
+	@${MKDIR} ${STAGEDIR}${ETCDIR}/services.d
+	@${MKDIR} ${STAGEDIR}${PREFIX}/etc/puppet/code
+	@${MKDIR} ${STAGEDIR}/var/log/puppetserver
+	@${MKDIR} ${STAGEDIR}/var/puppet/server
+	@${MKDIR} ${STAGEDIR}/var/puppet/server/data
+	@${MKDIR} ${STAGEDIR}/var/puppetserver
+	@${MKDIR} ${STAGEDIR}/var/run/puppetserver
+	${INSTALL_DATA} ${WRKSRC}/puppet-server-release.jar ${STAGEDIR}${DATADIR}/puppet-server-release.jar
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/global.conf ${STAGEDIR}${ETCDIR}/conf.d/global.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/logback.xml ${STAGEDIR}${ETCDIR}/logback.xml.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/request-logging.xml ${STAGEDIR}${ETCDIR}/request-logging.xml.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/puppetserver.conf ${STAGEDIR}${ETCDIR}/conf.d/puppetserver.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/web-routes.conf ${STAGEDIR}${ETCDIR}/conf.d/web-routes.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/webserver.conf ${STAGEDIR}${ETCDIR}/conf.d/webserver.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/auth.conf ${STAGEDIR}${ETCDIR}/conf.d/auth.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/conf.d/metrics.conf ${STAGEDIR}${ETCDIR}/conf.d/metrics.conf.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/config/services.d/ca.cfg ${STAGEDIR}${ETCDIR}/services.d/ca.cfg.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/system-config/services.d/bootstrap.cfg ${STAGEDIR}${ETCDIR}/services.d/bootstrap.cfg.sample
+	${INSTALL_DATA} ${WRKSRC}/ext/bin/puppetserver ${STAGEDIR}${PREFIX}/bin/puppetserver
+	${INSTALL_DATA} ${WRKSRC}/ext/ezbake-functions.sh ${STAGEDIR}${DATADIR}/ezbake-functions.sh
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/ca ${STAGEDIR}${DATADIR}/cli/apps/ca
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/foreground ${STAGEDIR}${DATADIR}/cli/apps/foreground
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/gem ${STAGEDIR}${DATADIR}/cli/apps/gem
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/irb ${STAGEDIR}${DATADIR}/cli/apps/irb
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/reload ${STAGEDIR}${DATADIR}/cli/apps/reload
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/ruby ${STAGEDIR}${DATADIR}/cli/apps/ruby
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/start ${STAGEDIR}${DATADIR}/cli/apps/start
+	${INSTALL_DATA} ${WRKSRC}/ext/cli/stop ${STAGEDIR}${DATADIR}/cli/apps/stop
+	${INSTALL_DATA} ${WRKSRC}/ext/cli_defaults/cli-defaults.sh ${STAGEDIR}${DATADIR}/cli/cli-defaults.sh
+
+.include <bsd.port.mk>
diff --git a/sysutils/puppetserver8/distinfo b/sysutils/puppetserver8/distinfo
new file mode 100644
index 000000000000..714022b2eed1
--- /dev/null
+++ b/sysutils/puppetserver8/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1682476133
+SHA256 (puppetserver-8.0.0.tar.gz) = 645308576da1a7eadc2553dac9cc7da8f3ad6c22a49a08f19153f5a21bb2fd84
+SIZE (puppetserver-8.0.0.tar.gz) = 60976845
diff --git a/sysutils/puppetserver8/files/patch-ext__bin__puppetserver b/sysutils/puppetserver8/files/patch-ext__bin__puppetserver
new file mode 100644
index 000000000000..fb17e51c6fde
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__bin__puppetserver
@@ -0,0 +1,15 @@
+--- ext/bin/puppetserver.orig	2018-10-03 16:18:58 UTC
++++ ext/bin/puppetserver
+@@ -15,6 +15,12 @@ elif [ `uname` == "OpenBSD" ] ; then
+     USER="_puppet"
+     INSTALL_DIR="/opt/puppetlabs/server/apps/puppetserver"
+     CONFIG="/etc/puppetlabs/puppetserver/conf.d"
++elif [ `uname` == "FreeBSD" ] ; then
++    JAVA_BIN="%%JAVA%%"
++    JAVA_ARGS="-Xms2g -Xmx2g"
++    USER="puppet"
++    INSTALL_DIR="%%DATADIR%%"
++    CONFIG="%%ETCDIR%%/conf.d"
+ else
+     echo "You seem to be missing some important configuration files; could not find /etc/default/puppetserver or /etc/sysconfig/puppetserver" >&2
+     exit 1
diff --git a/sysutils/puppetserver8/files/patch-ext__cli__foreground b/sysutils/puppetserver8/files/patch-ext__cli__foreground
new file mode 100644
index 000000000000..a4a4a5ad6649
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__cli__foreground
@@ -0,0 +1,19 @@
+--- ext/cli/foreground.orig	2019-09-17 14:05:56 UTC
++++ ext/cli/foreground
+@@ -1,6 +1,6 @@
+ #!/usr/bin/env bash
+ 
+-restartfile="/opt/puppetlabs/server/data/puppetserver/restartcounter"
++restartfile="/var/puppet/server/data/puppetserver/restartcounter"
+ cli_defaults=${INSTALL_DIR}/cli/cli-defaults.sh
+ 
+ if [ ! -e "${INSTALL_DIR}/ezbake-functions.sh" ]; then
+@@ -30,7 +30,7 @@ fi
+ COMMAND="${JAVA_BIN} ${JAVA_ARGS} ${LOG_APPENDER} \
+          -cp "$CLASSPATH" \
+          clojure.main -m puppetlabs.trapperkeeper.main \
+-         --config ${CONFIG} --bootstrap-config ${BOOTSTRAP_CONFIG} \
++         --config ${CONFIG} --bootstrap-config %%ETCDIR%%/services.d \
+          --restart-file "${restartfile}" \
+          ${TK_ARGS} \
+          ${@}"
diff --git a/sysutils/puppetserver8/files/patch-ext__cli_defaults__cli-defaults.sh b/sysutils/puppetserver8/files/patch-ext__cli_defaults__cli-defaults.sh
new file mode 100644
index 000000000000..85febc64943c
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__cli_defaults__cli-defaults.sh
@@ -0,0 +1,12 @@
+--- ext/cli_defaults/cli-defaults.sh.orig	2019-09-17 14:05:56 UTC
++++ ext/cli_defaults/cli-defaults.sh
+@@ -1,7 +1,7 @@
+-INSTALL_DIR="/opt/puppetlabs/server/apps/puppetserver"
++INSTALL_DIR="%%DATADIR%%"
+ 
+ if [ -n "$JRUBY_JAR" ]; then
+   echo "Warning: the JRUBY_JAR setting is no longer needed and will be ignored." 1>&2
+ fi
+ 
+-CLASSPATH="${CLASSPATH}:/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/facter.jar:/opt/puppetlabs/server/data/puppetserver/jars/*"
++CLASSPATH="${CLASSPATH}:/usr/local/lib/ruby/vendor_ruby/facter.jar:/opt/puppetlabs/server/data/puppetserver/jars/*"
diff --git a/sysutils/puppetserver8/files/patch-ext__config__conf.d__global.conf b/sysutils/puppetserver8/files/patch-ext__config__conf.d__global.conf
new file mode 100644
index 000000000000..5fc83d8e0ae8
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__config__conf.d__global.conf
@@ -0,0 +1,9 @@
+--- ext/config/conf.d/global.conf.orig	2018-10-01 20:36:05 UTC
++++ ext/config/conf.d/global.conf
+@@ -1,5 +1,5 @@
+ global: {
+     # Path to logback logging configuration file; for more
+     # info, see http://logback.qos.ch/manual/configuration.html
+-    logging-config: /etc/puppetlabs/puppetserver/logback.xml
++    logging-config: %%PREFIX%%/etc/puppetserver/logback.xml
+ }
diff --git a/sysutils/puppetserver8/files/patch-ext__config__conf.d__puppetserver.conf b/sysutils/puppetserver8/files/patch-ext__config__conf.d__puppetserver.conf
new file mode 100644
index 000000000000..335690c0d1cb
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__config__conf.d__puppetserver.conf
@@ -0,0 +1,55 @@
+--- ext/config/conf.d/puppetserver.conf.orig	2021-03-12 18:01:54 UTC
++++ ext/config/conf.d/puppetserver.conf
+@@ -2,16 +2,20 @@
+ jruby-puppet: {
+     # Where the puppet-agent dependency places puppet, facter, etc...
+     # Puppet server expects to load Puppet from this location
+-    ruby-load-path: [/opt/puppetlabs/puppet/lib/ruby/vendor_ruby]
++    ruby-load-path: [
++        %%PREFIX%%/share/puppetserver/lib,
++        %%RUBY_SITELIBDIR%%,
++        %%PREFIX%%/lib/ruby/vendor_ruby,
++    ]
+ 
+     # This setting determines where JRuby will install gems.  It is used for loading gems,
+     # and also by the `puppetserver gem` command line tool.
+-    gem-home: /opt/puppetlabs/server/data/puppetserver/jruby-gems
++    gem-home: /var/puppet/server/data/puppetserver/jruby-gems
+ 
+     # This setting defines the complete "GEM_PATH" for jruby.  If set, it should include
+     # the gem-home directory as well as any other directories that gems can be loaded
+     # from (including the vendored gems directory for gems that ship with puppetserver)
+-    gem-path: [${jruby-puppet.gem-home}, "/opt/puppetlabs/server/data/puppetserver/vendored-jruby-gems", "/opt/puppetlabs/puppet/lib/ruby/vendor_gems"]
++    gem-path: [${jruby-puppet.gem-home}, "/var/puppet/server/data/puppetserver/vendored-jruby-gems", "%%PREFIX%%/lib/ruby/gems/%%RUBY_VER%%"]
+ 
+     # PLEASE NOTE: Use caution when modifying the below settings. Modifying
+     # these settings will change the value of the corresponding Puppet settings
+@@ -26,23 +30,23 @@ jruby-puppet: {
+ 
+     # (optional) path to puppet conf dir; if not specified, will use
+     # /etc/puppetlabs/puppet
+-    server-conf-dir: /etc/puppetlabs/puppet
++    server-conf-dir: %%PREFIX%%/etc/puppet
+ 
+     # (optional) path to puppet code dir; if not specified, will use
+     # /etc/puppetlabs/code
+-    server-code-dir: /etc/puppetlabs/code
++    server-code-dir: %%PREFIX%%/etc/puppet/code
+ 
+     # (optional) path to puppet var dir; if not specified, will use
+     # /opt/puppetlabs/server/data/puppetserver
+-    server-var-dir: /opt/puppetlabs/server/data/puppetserver
++    server-var-dir: /var/puppet/server/data/puppetserver
+ 
+     # (optional) path to puppet run dir; if not specified, will use
+     # /var/run/puppetlabs/puppetserver
+-    server-run-dir: /var/run/puppetlabs/puppetserver
++    server-run-dir: /var/run/puppetserver
+ 
+     # (optional) path to puppet log dir; if not specified, will use
+     # /var/log/puppetlabs/puppetserver
+-    server-log-dir: /var/log/puppetlabs/puppetserver
++    server-log-dir: /var/log/puppetserver
+ 
+     # (optional) maximum number of JRuby instances to allow
+     #max-active-instances: 1
diff --git a/sysutils/puppetserver8/files/patch-ext__config__conf.d__webserver.conf b/sysutils/puppetserver8/files/patch-ext__config__conf.d__webserver.conf
new file mode 100644
index 000000000000..21e4c5e6d868
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__config__conf.d__webserver.conf
@@ -0,0 +1,9 @@
+--- ext/config/conf.d/webserver.conf.orig	2018-10-01 20:36:05 UTC
++++ ext/config/conf.d/webserver.conf
+@@ -1,5 +1,5 @@
+ webserver: {
+-    access-log-config: /etc/puppetlabs/puppetserver/request-logging.xml
++    access-log-config: %%PREFIX%%/etc/puppetserver/request-logging.xml
+     client-auth: want
+     ssl-host: 0.0.0.0
+     ssl-port: 8140
diff --git a/sysutils/puppetserver8/files/patch-ext__config__logback.xml b/sysutils/puppetserver8/files/patch-ext__config__logback.xml
new file mode 100644
index 000000000000..278ccaf5f825
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__config__logback.xml
@@ -0,0 +1,17 @@
+--- ext/config/logback.xml.orig	2018-09-18 17:16:33 UTC
++++ ext/config/logback.xml
+@@ -6,12 +6,11 @@
+     </appender>
+ 
+     <appender name="F1" class="ch.qos.logback.core.rolling.RollingFileAppender">
+-        <!-- TODO: this path should not be hard-coded -->
+-        <file>/var/log/puppetlabs/puppetserver/puppetserver.log</file>
++        <file>/var/log/puppetserver/puppetserver.log</file>
+         <append>true</append>
+         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+             <!-- rollover daily -->
+-            <fileNamePattern>/var/log/puppetlabs/puppetserver/puppetserver-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
++            <fileNamePattern>/var/log/puppetserver/puppetserver-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+             <!-- each file should be at most 200MB, keep 90 days worth of history, but at most 1GB total-->
+             <maxFileSize>200MB</maxFileSize>
+             <maxHistory>90</maxHistory>
diff --git a/sysutils/puppetserver8/files/patch-ext__config__request-logging.xml b/sysutils/puppetserver8/files/patch-ext__config__request-logging.xml
new file mode 100644
index 000000000000..4358008fdb47
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__config__request-logging.xml
@@ -0,0 +1,15 @@
+--- ext/config/request-logging.xml.orig	2018-09-18 17:16:33 UTC
++++ ext/config/request-logging.xml
+@@ -1,10 +1,10 @@
+ <configuration debug="false">
+     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+-        <file>/var/log/puppetlabs/puppetserver/puppetserver-access.log</file>
++        <file>/var/log/puppetserver/puppetserver-access.log</file>
+         <append>true</append>
+         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+             <!-- rollover daily -->
+-            <fileNamePattern>/var/log/puppetlabs/puppetserver/puppetserver-access-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
++            <fileNamePattern>/var/log/puppetserver/puppetserver-access-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
+             <!-- each file should be at most 200MB, keep 90 days worth of history, but at most 1GB total-->
+             <maxFileSize>200MB</maxFileSize>
+             <maxHistory>90</maxHistory>
diff --git a/sysutils/puppetserver8/files/patch-ext__ezbake-functions.sh b/sysutils/puppetserver8/files/patch-ext__ezbake-functions.sh
new file mode 100644
index 000000000000..bd4d0a1c26b7
--- /dev/null
+++ b/sysutils/puppetserver8/files/patch-ext__ezbake-functions.sh
@@ -0,0 +1,11 @@
+--- ext/ezbake-functions.sh.orig	2019-09-17 14:05:56 UTC
++++ ext/ezbake-functions.sh
+@@ -126,7 +126,7 @@ init_restart_file()
+     local group="${GROUP:-puppet}"
+ 
+     if [ ! -e "$restartfile" ]; then
+-        /usr/bin/install --directory --owner=$user --group=$group --mode=755 "$restart_file_base_dir"
++        /usr/bin/install -d -o $user -g $group -m 755 "$restart_file_base_dir"
+         if [ $? -ne 0 ]; then
+             echo "Unable to create or set permissions for restart file at ${restart_file_base_dir}" 1>&2
+             return 1
diff --git a/sysutils/puppetserver8/files/pkg-message.in b/sysutils/puppetserver8/files/pkg-message.in
new file mode 100644
index 000000000000..0635f9786fce
--- /dev/null
+++ b/sysutils/puppetserver8/files/pkg-message.in
@@ -0,0 +1,17 @@
+[
+{ type: install
+  message: <<EOM
+Remember to run:
+
+sysrc puppetserver_enable=yes
+
+A note to users upgrading to 2.6 who have also modified bootstrap.cfg, please
+see the release notes for breaking changes in 2.5.
+
+https://docs.puppet.com/puppetserver/latest/release_notes.html#puppet-server-25
+
+The file bootstrap.cfg has been removed and ca configuration has been moved out
+to its own file in ca.cfg.
+EOM
+}
+]
diff --git a/sysutils/puppetserver8/files/puppetserver.in b/sysutils/puppetserver8/files/puppetserver.in
new file mode 100644
index 000000000000..e32698e335cc
--- /dev/null
+++ b/sysutils/puppetserver8/files/puppetserver.in
@@ -0,0 +1,95 @@
+#!/bin/sh
+
+# PROVIDE: puppetserver
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Configuration settings for puppetserver in /etc/rc.conf:
+#
+# puppetserver_enable (bool):
+#   Set to "NO" by default.
+#   Set it to "YES" to enable puppetserver
+#
+# puppetserver_args (str):
+#   Extra arguments passed to start command
+#
+# puppetserver_java_home (str):
+#   Set to "%%JAVA_HOME%%" by default.
+#   Set the Java virtual machine to run puppetserver
+#
+# puppetserver_java_opts (str):
+#   Set to "" by default.
+#   Java VM args to use.
+#
+# puppetserver_user (str):
+#   Set to "puppet" by default.
+#   User to run puppetserver as.
+#
+# puppetserver_group (str):
+#   Set to "puppet" by default.
+#   Group for data file ownership.
+#
+# puppetserver_log_file (str):
+#   Set to "/var/log/puppetserver/puppetserver.log" by default.
+#   Log file location.
+#
+
+. /etc/rc.subr
+
+name="puppetserver"
+rcvar=puppetserver_enable
+
+load_rc_config "${name}"
+
+: ${puppetserver_enable="NO"}
+: ${puppetserver_args="--config %%PREFIX%%/etc/puppetserver/conf.d -b %%PREFIX%%/etc/puppetserver/services.d"}
+: ${puppetserver_java_home="%%JAVA_HOME%%"}
+: ${puppetserver_java_opts=""}
+: ${puppetserver_user="puppet"}
+: ${puppetserver_group="puppet"}
+: ${puppetserver_log_file="/var/log/puppetserver/puppetserver.log"}
+
+pidfile="/var/run/puppetserver/puppetserver.pid"
+command="/usr/sbin/daemon"
+java_cmd="${puppetserver_java_home}/bin/java"
+procname="${java_cmd}"
+command_args="-f -p ${pidfile} ${java_cmd} ${puppetserver_java_opts} -cp %%DATADIR%%/puppet-server-release.jar:%%PREFIX%%/lib/ruby/vendor_ruby/facter.jar clojure.main -m puppetlabs.trapperkeeper.main ${puppetserver_args}"
+
+
+required_files="${java_cmd}"
+
+start_precmd="puppetserver_prestart"
+
+# An UTF-8 locale is required
+: LC_ALL=${LC_ALL:=C.UTF-8}
+case $LC_ALL in
+    *.UTF-8)
+        ;;
+    *.*)
+        LC_ALL="${LC_ALL%.*}.UTF-8"
+        ;;
+    *)
+        LC_ALL=C.UTF-8
+        ;;
+esac
+export LC_ALL
+
+puppetserver_prestart() {
+  if [ ! -f "${puppetserver_log_file}" ]; then
+    touch "${puppetserver_log_file}"
+    chown "${puppetserver_user}:${puppetserver_group}" "${puppetserver_log_file}"
+    chmod 640 "${puppetserver_log_file}"
+  fi
+  if [ ! -d "/var/run/puppetserver" ]; then
+    install -d -o "${puppetserver_user}" -g "${puppetserver_group}" -m 750 "/var/run/puppetserver"
+  fi
+
+  chown -R "root:${puppetserver_group}" "%%PREFIX%%/etc/puppetserver/conf.d"
+  chmod 0750 "%%PREFIX%%/etc/puppetserver/conf.d"
+
+  chown "root:${puppetserver_group}" "%%PREFIX%%/etc/puppetserver/logback.xml"
+  chmod 0640 "%%PREFIX%%/etc/puppetserver/logback.xml"
+}
+
+run_rc_command "$1"
diff --git a/sysutils/puppetserver8/pkg-descr b/sysutils/puppetserver8/pkg-descr
new file mode 100644
index 000000000000..73a974443f9f
--- /dev/null
+++ b/sysutils/puppetserver8/pkg-descr
@@ -0,0 +1,11 @@
+Puppet master is a Ruby application that compiles configurations
+for any number of Puppet agent nodes, using Puppet code and various
+other data sources. (For more info, see Overview of Puppet's
+Architecture.)
+
+Puppet Server is an application that runs on the Java Virtual Machine
+(JVM) and provides the same services as the classic Puppet master
+application. It mostly does this by running the existing Puppet
+master code in several JRuby interpreters, but it replaces some
+parts of the classic application with new services written in
+Clojure.
diff --git a/sysutils/puppetserver8/pkg-plist b/sysutils/puppetserver8/pkg-plist
new file mode 100644
index 000000000000..329a3c5f8901
--- /dev/null
+++ b/sysutils/puppetserver8/pkg-plist
@@ -0,0 +1,29 @@
+@(,,750) bin/puppetserver
+@sample %%ETCDIR%%/logback.xml.sample
+@sample %%ETCDIR%%/request-logging.xml.sample
+@sample %%ETCDIR%%/conf.d/auth.conf.sample
+@sample %%ETCDIR%%/conf.d/global.conf.sample
+@sample %%ETCDIR%%/conf.d/metrics.conf.sample
+@sample %%ETCDIR%%/conf.d/puppetserver.conf.sample
+@sample %%ETCDIR%%/conf.d/web-routes.conf.sample
+@sample %%ETCDIR%%/conf.d/webserver.conf.sample
+@sample %%ETCDIR%%/services.d/bootstrap.cfg.sample
+@sample %%ETCDIR%%/services.d/ca.cfg.sample
+@dir(,puppet,750) etc/puppet/code
+%%DATADIR%%/puppet-server-release.jar
+@(,,755) %%DATADIR%%/cli/apps/ca
+@(,,755) %%DATADIR%%/cli/apps/foreground
+@(,,755) %%DATADIR%%/cli/apps/gem
+@(,,755) %%DATADIR%%/cli/apps/irb
+@(,,755) %%DATADIR%%/cli/apps/reload
+@(,,755) %%DATADIR%%/cli/apps/ruby
+@(,,755) %%DATADIR%%/cli/apps/start
+@(,,755) %%DATADIR%%/cli/apps/stop
+@(,,755) %%DATADIR%%/cli/cli-defaults.sh
+@(,,755) %%DATADIR%%/ezbake-functions.sh
+@dir(puppet,puppet,750) /var/log/puppetserver
+@dir(puppet,puppet,755) /var/puppet
+@dir(puppet,puppet,750) /var/puppet/server
+@dir(puppet,puppet,750) /var/puppet/server/data
+@dir(puppet,puppet,750) /var/puppetserver
+@dir(puppet,puppet,750) /var/run/puppetserver