sysutils/openvox-server8: New port

Copied from sysutils/puppetserver8

With hat:	puppet
This commit is contained in:
Romain Tartière
2025-05-23 15:11:34 -10:00
parent 75f3c9f1b4
commit 49bf5bb2f3
17 changed files with 428 additions and 1 deletions
+1
View File
@@ -800,6 +800,7 @@
SUBDIR += opentofu
SUBDIR += openupsd
SUBDIR += openvox-agent8
SUBDIR += openvox-server8
SUBDIR += osinfo-db-tools
SUBDIR += p5-App-Regather
SUBDIR += p5-App-RunCron
+95
View File
@@ -0,0 +1,95 @@
PORTNAME= openvox-server
PORTVERSION= 8.8.1
CATEGORIES= sysutils java
MASTER_SITES= https://artifacts.voxpupuli.org/${PORTNAME}/${PORTVERSION}/
PKGNAMESUFFIX= 8
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= aarch64 amd64
ONLY_FOR_ARCHS_REASON=Bundled JNI only support some architectures
RUN_DEPENDS= bash>=0:shells/bash \
openvox-agent8>=8.0:sysutils/openvox-agent8 \
rubygem-openvoxserver-ca>=1:sysutils/rubygem-openvoxserver-ca \
rubygem-semantic_puppet>=1:devel/rubygem-semantic_puppet \
sudo>=1:security/sudo
USES= ruby java shebangfix
JAVA_VERSION= 11+
USE_RC_SUBR= puppetserver
WRKSRC= ${WRKDIR}/puppetserver-${PORTVERSION}
NO_ARCH= yes
NO_BUILD= yes
CONFLICTS_INSTALL= openvox-server[0-9] puppetserver[0-9]
SHEBANG_FILES= ext/bin/puppetserver
USERS= puppet
GROUPS= puppet
DATADIR= ${PREFIX}/share/puppetserver
ETCDIR= ${PREFIX}/etc/puppetserver
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>
+3
View File
@@ -0,0 +1,3 @@
TIMESTAMP = 1748051578
SHA256 (openvox-server-8.8.1.tar.gz) = de3314abf1aadea3d304e65992e586a6895ec9998dacf17ab099acbb0f1ca8e2
SIZE (openvox-server-8.8.1.tar.gz) = 64708317
@@ -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
@@ -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} \
${@}"
@@ -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/*"
@@ -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
}
@@ -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
@@ -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
@@ -0,0 +1,31 @@
--- ext/config/logback.xml.orig 2023-10-19 16:09:06 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>
@@ -23,11 +22,11 @@
</appender>
<appender name="STATUS" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>/var/log/puppetlabs/puppetserver/puppetserver-status.log</file>
+ <file>/var/log/puppetserver/puppetserver-status.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
- <fileNamePattern>/var/log/puppetlabs/puppetserver/puppetserver-status-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
+ <fileNamePattern>/var/log/puppetserver/puppetserver-status-%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>
@@ -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>
@@ -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
@@ -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
}
]
@@ -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} -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -Dlogappender=F1 ${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"
+11
View File
@@ -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.
+29
View File
@@ -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
+1 -1
View File
@@ -26,7 +26,7 @@ USE_RC_SUBR= puppetserver
NO_ARCH= yes
NO_BUILD= yes
CONFLICTS_INSTALL= puppetserver[0-9]
CONFLICTS_INSTALL= openvox-server[0-9] puppetserver[0-9]
SHEBANG_FILES= ext/bin/puppetserver