Index: admin/puppet/Makefile
===================================================================
--- admin/puppet/Makefile	(revision 0)
+++ admin/puppet/Makefile	(working copy)
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2013 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=puppet
+PKG_VERSION:=3.1.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=${PKG_NAME}-${PKG_VERSION}.tar.gz
+PKG_SOURCE_URL:=http://downloads.puppetlabs.com/puppet/
+PKG_MD5SUM:=4cbdcc9dfcda677c820175375a500651
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/puppet
+  SECTION:=admin
+  CATEGORY:=Administration
+  DEPENDS:= +libruby +ruby-core +ruby-enc +facter +ruby-yaml +ruby-gems +ruby-cgi +ruby-openssl +shadow-useradd +ruby-xmlrpc \
+            +shadow-useradd +shadow-userdel +shadow-usermod +shadow-groups +shadow-groupmod +shadow-groupdel +shadow-groupadd +net-tools-hostname
+
+  TITLE:=Centralized configuration management
+  URL:=http://projects.puppetlabs.com/projects/puppet
+endef
+
+define Package/puppet/description
+ 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.
+
+ Puppet's simple declarative specification language provides powerful
+ classing abilities for drawing out the similarities between hosts while
+ allowing them to be as specific as necessary, and it handles dependency
+ and prerequisite relationships between objects clearly and explicitly.
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/puppet/install
+	$(INSTALL_DIR) $(1)/usr/bin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/$(PKG_NAME) $(1)/usr/bin/
+	$(INSTALL_DIR) $(1)/usr/lib/ruby/1.9/puppet
+	$(CP) $(PKG_BUILD_DIR)/lib/* $(1)/usr/lib/ruby/1.9/
+
+	$(INSTALL_DIR) $(1)/etc/
+	$(INSTALL_DIR) $(1)/etc/puppet
+	$(INSTALL_DATA) ./files/puppet.conf $(1)/etc/puppet/puppet.conf
+	$(INSTALL_BIN) ./files/etckeeper-commit-post $(1)/etc/puppet/etckeeper-commit-post
+	$(INSTALL_BIN) ./files/etckeeper-commit-pre  $(1)/etc/puppet/etckeeper-commit-pre
+	$(INSTALL_DIR) $(1)/etc/puppet/manifests
+	$(INSTALL_DIR) $(1)/etc/puppet/modules
+	$(INSTALL_DIR) $(1)/etc/puppet/templates
+	$(INSTALL_DIR) $(1)/etc/init.d/
+	$(INSTALL_BIN) ./files/puppet.init $(1)/etc/init.d/puppet
+
+endef
+
+define Package/puppet/postinst
+#!/bin/sh
+grep -q '^puppet:' /etc/passwd && exit 0
+group=$$(grep '^puppet:' /etc/group | cut -f3 -d:)
+if [ -z "$${group}" ] ; then
+        group=1000
+        tst=$$(cat /etc/group | grep ":$${group}:")
+        while [ -n "$${tst}" ] ; do
+                group=$$(($${group}+1))
+                tst=$$(cat /etc/group | grep ":$${group}:")
+        done
+        echo "puppet:x:$${group}:" >>/etc/group
+fi
+
+user=$$(cat /etc/passwd | grep "^puppet:")
+if [ -z "$${user}" ] ; then
+        num="$${group}"
+        tst=$$(cat /etc/passwd | grep ":.*:$${num}:")
+        while [ -n "$${tst}" ] ; do
+                num=$$(($${num}+1))
+                tst=$$(cat /etc/passwd | grep ":.*:$${num}:")
+        done
+        echo "puppet:*:$${num}:$${group}:Puppet configuration management daemon:/var/lib/puppet:/bin/ash" >>/etc/passwd
+fi
+endef
+
+define Package/puppet/conffiles
+/etc/puppet/
+endef
+
+$(eval $(call BuildPackage,puppet))
+
Index: admin/puppet/files/etckeeper-commit-post
===================================================================
--- admin/puppet/files/etckeeper-commit-post	(revision 0)
+++ admin/puppet/files/etckeeper-commit-post	(working copy)
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+which etckeeper > /dev/null 2>&1 || exit 0
+
+etckeeper commit "committing changes in /etc after puppet catalog run"
+
+# Failure of etckeeper should not be fatal.
+exit 0

Property changes on: admin/puppet/files/etckeeper-commit-post
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: admin/puppet/files/puppet.conf
===================================================================
--- admin/puppet/files/puppet.conf	(revision 0)
+++ admin/puppet/files/puppet.conf	(working copy)
@@ -0,0 +1,17 @@
+[main]
+# Careful as /var is ephemeral on OpenWrt.
+logdir=/var/log/puppet
+vardir=/etc/puppet
+ssldir=/etc/puppet/ssl
+rundir=/var/run/puppet
+factpath=$vardir/lib/facter
+templatedir=$confdir/templates
+prerun_command=/etc/puppet/etckeeper-commit-pre
+postrun_command=/etc/puppet/etckeeper-commit-post
+
+[master]
+# These are needed when the puppetmaster is run by passenger
+# and can safely be removed if webrick is used.
+ssl_client_header = SSL_CLIENT_S_DN 
+ssl_client_verify_header = SSL_CLIENT_VERIFY
+
Index: admin/puppet/files/etckeeper-commit-pre
===================================================================
--- admin/puppet/files/etckeeper-commit-pre	(revision 0)
+++ admin/puppet/files/etckeeper-commit-pre	(working copy)
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+which etckeeper > /dev/null 2>&1 || exit 0
+
+etckeeper commit "saving uncommitted changes in /etc prior to puppet catalog run"
+
+# Failure of etckeeper should not be fatal.
+exit 0

Property changes on: admin/puppet/files/etckeeper-commit-pre
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: admin/puppet/files/puppet.init
===================================================================
--- admin/puppet/files/puppet.init	(revision 0)
+++ admin/puppet/files/puppet.init	(working copy)
@@ -0,0 +1,12 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013 OpenWrt.org
+
+START=70
+
+start() {
+	service_start /usr/bin/ruby /usr/bin/puppet agent
+}
+
+stop() {
+	service_stop /usr/bin/ruby /usr/bin/puppet agent
+}
