jbrown, Sorry for not posting my solution. I've been working on this install for weeks, and I *did* overcome this error, but I've had to overcome so many errors, I can't recall the exact fix. iirc, the solution might have been installing rubygem-rack through yum as opposed to gems.
In any case, here's the commands I have come up with to successfully install Puppet Master & puppet-dashboard on CentOS 6.2. (Note: this is incomplete: I'm still working on getting the Inventory Service up and running, and this install procedure still needs some hardening). FWIW: # run this on just the Puppet Master, which should be running CentOS 6 # Generate Entropy for random-seed from Gold Image for Cert Generation wget -O /var/lib/random-seed http://www.random.org/cgi-bin/randbyte?nbytes=200 # Configure DNS echo "10.10.10.2 dashboard puppet" >> /etc/hosts # skip this if DNS is setup properly echo "10.10.10.3 puppetnode-01 puppetnode-01.mydomain.com" >> /etc/hosts echo "10.10.10.4 puppetnode-02 puppetnode-02.mydomain.com" >> /etc/hosts # … # Add Repository - yum.puppetlabs.com cat > /etc/yum.repos.d/puppetlabs.repo <<DELIM [puppetlabs] name=puppetlabs enabled=1 baseurl=http://yum.puppetlabs.com/el/6/products/x86_64/ gpgcheck=0 DELIM # Add Repository - EPEL rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm # Apply Changes to yum yum -y update # Install Dependencies - yum yum -y install gcc-c++ make httpd httpd-devel mod_ssl puppet ruby-devel rubygem-rack curl-devel openssl-devel zlib-devel # Install Dependencies - passenger # this next command tends to fail 10% of the time with "ERROR: http://rubygems.org/ does not appear to be a repository". If this happens, just try again in a few minutes. The website is probably experiencing overload. gem install passenger passenger-install-apache2-module -a # Configure Puppet # create backup cp /etc/puppet/puppet.conf /etc/puppet/puppet.conf.`date "+%Y%m%d%H%M%S"`.orig # clobber old puppet.conf cat > /etc/puppet/puppet.conf << DELIM [main] logdir = /var/log/puppet vardir = /var/lib/puppet confdir = /etc/puppet ssldir = /var/lib/puppet/ssl rundir = /var/run/puppet factpath = $vardir/lib/facter templatedir = $confdir/templates [master] certname = 12345 dns_alt_names = puppet,dashboard,1234,12345 ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY reports = store, http reporturl = http://12345:8080/reports/upload [agent] server = dashboard report = true [cert] autosign = false DELIM # replace all instances of 12345 in puppet.conf with the FQDN sed -e s,12345,`hostname`,g -i /etc/puppet/puppet.conf # Puppet Master config.ru - Create mkdir -p /usr/share/puppet/rack/puppetmasterd mkdir /usr/share/puppet/rack/puppetmasterd/public mkdir /usr/share/puppet/rack/puppetmasterd/tmp cat > /usr/share/puppet/rack/puppetmasterd/config.ru <<DELIM ARGV << "--rack" require 'puppet/application/master' run Puppet::Application[:master].run #eof DELIM # Puppet Master config.ru - Permissons chown puppet /usr/share/puppet/rack/puppetmasterd/config.ru # Configure puppet-master.conf - Apache vhost cat > /etc/httpd/conf.d/puppet-master.conf << DELIM ## Puppetmaster Apache Vhost Configuration # Update the paths of the next 2 lines to match your installed version of passenger LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.13/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.13 PassengerRuby /usr/bin/ruby ## Passenger Limits PassengerHighPerformance On PassengerMaxPoolSize 12 PassengerPoolIdleTime 1500 PassengerMaxRequests 1000 PassengerStatThrottleRate 120 RackAutoDetect Off RailsAutoDetect Off Listen 8140 <VirtualHost *:8140> ServerName puppetmaster-01.mydomain.com SSLEngine on SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA SSLCertificateFile /var/lib/puppet/ssl/certs/12345.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/12345.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem ## CRL checking should be enabled; if you have problems with ## Apache complaining about the CRL, disable the next line SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +StdEnvVars ## The following client headers allow the same configuration ## to work with Pound. RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e RackAutoDetect On DocumentRoot /usr/share/puppet/rack/puppetmasterd/public <Directory "/usr/share/puppet/rack/puppetmasterd"> Options None AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> DELIM # replace all instances of 12345 in puppet-master.conf with the hostname sed -e s,12345,`hostname`,g -i /etc/httpd/conf.d/puppet-master.conf # Generate Puppet Master Certificates # run this command to generate the puppet master certificates. Once you see the line: # "notice: Signed certificate request for puppetmaster-01.mydomain.com" # you should press ctrl+c to shutdown the WEBrick-powered puppet master process # and proceed with the installation below puppet master --verbose --no-daemonize --debug # Start Puppet Master in Apache service httpd start # Install puppet-dashboard Dependencies yum -y install ruby-mysql rubygem-rake mysql mysql-server # Install puppet-dashboard yum -y install puppet-dashboard # Start mysql server service mysqld start # Set mysql server's root password mysqladmin -u root password 'password' # Create production/development DB mysql -u root -p << DELIM CREATE DATABASE dashboard CHARACTER SET utf8; CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON dashboard.* to 'dashboard'@'localhost'; DELIM # Configure puppet-dashboard - database.yml cd /usr/share/puppet-dashboard # create backup cp /usr/share/puppet-dashboard/config/database.yml /usr/share/puppet-dashboard/config/database.yml.`date "+%Y%m%d%H%M%S"`.orig # clobber old database.yml cat > /usr/share/puppet-dashboard/config/database.yml << DELIM production: adapter: mysql database: dashboard username: dashboard password: password encoding: utf8 development: adapter: mysql database: dashboard username: dashboard password: password encoding: utf8 test: adapter: mysql database: dashboard_test username: dashboard_test password: password encoding: utf8 DELIM # create DB tables rake db:migrate # Create settings.yml # create from example cp config/settings.yml.example config/settings.yml # modify sed "s^cn_name:.*^cn_name: 'dashboard'^" -i config/settings.yml #sed "s^ca_crl_path:.*^#ca_crl_path: ''^" -i config/settings.yml #sed "s^ca_certificate_path:.*^#ca_certificate_path: ''^" -i config/settings.yml #sed "s^certificate_path:.*^certificate_path: 'certs/puppet-dashboard.crt'^" -i config/settings.yml #sed "s^private_key_path:.*^private_key_path: 'certs/puppet-dashboard.prv'^" -i config/settings.yml #sed "s^public_key_path:.*^#public_key_path: ''^" -i config/settings.yml sed "s^ca_server:.*^ca_server: '`hostname`'^" -i config/settings.yml # Generate puppet-dashboard Keypair # TODO: min permissions chmod -R 777 /usr/lib/ruby/gems/1.8/gems/rake-* chmod 755 /usr/lib/ruby/gems/1.8/specifications/*.gemspec mkdir certs chown puppet-dashboard certs sudo -u puppet-dashboard rake cert:create_key_pair # Request puppet-dashboard Cert Signature from the Puppet Master # set some necessary permissions first chmod -R 755 /usr/share/puppet chown -R puppet:puppet-dashboard /usr/lib/ruby/gems/1.8/gems/passenger-* rake cert:request # Sign the puppet`hostname`-dashboard certs puppet cert sign dashboard # Retrieve remaining certificate files sudo -u puppet-dashboard rake cert:retrieve # Update external_node script (see Configuring puppet-dashboard) # create backup cp bin/external_node bin/external_node.`date "+%Y%m%d%H%M%S"`.orig # modify sed 's%^DASHBOARD_URL.*:.*%DASHBOARD_URL = "https://localhost:443"%' -i bin/external_node sed 's%^CERT_PATH.*%CERT_PATH = "/var/lib/puppet/ssl/certs/12345.pem"%' -i bin/external_node sed 's%^PKEY_PATH.*%PKEY_PATH = "/var/lib/puppet/ssl/private_keys/12345.pem"%' -i bin/external_node sed 's%^CA_PATH.*%CA_PATH = "/var/lib/puppet/ssl/certs/ca.pem"%' -i bin/external_node # replace all instances of 12345 with the hostname sed -e s,12345,`hostname`,g -i bin/external_node # Disable ssl.conf vhost so that puppet-dashboard is the only *:443 vhost # remove the <VritualHost … </VirtualHost> stanza entirely cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.`date "+%Y%m%d%H%M%S"`.orig vim /etc/httpd/conf.d/ssl.conf # Configure puppet-dashboard.conf - Apache vhost cat > /etc/httpd/conf.d/puppet-dashboard.conf << DELIM ## puppet-dashboard Apache Vhost Configuration <VirtualHost *:443> SSLEngine On SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP SSLCertificateFile /usr/share/puppet-dashboard/certs/dashboard.cert.pem SSLCertificateKeyFile /usr/share/puppet-dashboard/certs/dashboard.private_key.pem SSLCACertificateFile /usr/share/puppet-dashboard/certs/dashboard.ca_cert.pem # If Apache complains about invalid signatures on the CRL, you can try disabling # CRL checking by commenting the next line, but this is not recommended SSLCARevocationFile /usr/share/puppet-dashboard/certs/dashboard.ca_crl.pem SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +StdEnvVars RackAutoDetect On RackBaseURI / # If debugging, comment this next line to use the "development" env SetEnv RAILS_ENV production ServerName puppetmaster-01.mydomain.com DocumentRoot /usr/share/puppet-dashboard/public/ <Directory /usr/share/puppet-dashboard/public/> Options None AllowOverride None Order allow,deny Allow from all </Directory> # For report submission from masters. <Location /reports/upload> <Limit POST> # Configuration restricts HTTP actions to POST only Order allow,deny Allow from 127.0.0.1 Allow from all Satisfy any </Limit> </Location> # For node definitions from masters. <Location /nodes> <Limit GET> # Configuration restricts HTTP actions to GET only Order allow,deny Allow from 127.0.0.1 Allow from all Satisfy any </Limit> </Location> # For web access by humans. <Location / > Order allow,deny Satisfy any AuthName "Puppet Dashboard" AuthType Basic AuthUserFile /usr/share/puppet-dashboard/.htpasswd Require valid-user </Location> ServerSignature On # Logs ErrorLog /var/log/httpd/puppet-dashboard_error.log LogLevel warn CustomLog /var/log/httpd/puppet-dashboard_access.log combined CustomLog /var/log/httpd/puppet-dashboard_ssl-request.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> # This redundant vhost is a hack that allows the puppet master to submit reports # over http (see this thread for more info: # https://groups.google.com/forum/?fromgroups#!topic/puppet-users/7EmUtw87-pw/discussion ) # DO NOT USE THIS CONFIGURATION IF YOUR PUPPET MASTER IS NOT ON THE SAME SERVER # AS PUPPET-DASHBOARD! If these 2 services are on different machines, you will # be sending all your report data unencrypted across the network. # Also, DON'T FORGET TO CONFIGURE YOUR LOCAL FIREWALL to block all access to # port 8080, except from 127.0.0.1 Listen 8080 <VirtualHost *:8080> RackAutoDetect On RackBaseURI / # If debugging, comment this next line to use the "development" env SetEnv RAILS_ENV production ServerName puppetmaster-01.mydomain.com DocumentRoot /usr/share/puppet-dashboard/public/ <Directory /usr/share/puppet-dashboard/public/> Options None AllowOverride None Order allow,deny Allow from all </Directory> ServerSignature On # Logs ErrorLog /var/log/httpd/puppet-dashboard-8080.log LogLevel warn CustomLog /var/log/httpd/puppet-dashboard-8080.log combined CustomLog /var/log/httpd/puppet-dashboard-8080-request.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> DELIM # Create .htpasswd file for Basic Apache Auth to puppet-dashboard htpasswd -c /usr/share/puppet-dashboard/.htpasswd hosting # puppet-dashboard config.ru # TODO: determine if this is necessary cp /usr/share/puppet-dashboard/vendor/rails/railties/dispatches/config.ru /usr/share/puppet-dashboard/ chown puppet-dashboard:puppet-dashboard /usr/share/puppet-dashboard/config.ru # Optimize - mysql # (increase mysql's max_allowed_packet to 32 megabytes) see official puppet-dashboard install guide sed 's/\[mysqld_safe\]/max_allowed_packet = 32M\n\n\[mysql_safe\]/' --in-place=.`date "+%Y%m%d%H%M%S"`.orig /etc/my.cnf # apply configuration changes service mysqld restart # Configure iptables # TODO iptables -F # Disable Puppet-related Daemons /etc/init.d/puppet stop /etc/init.d/puppet-dashboard stop /etc/init.d/httpd stop # Prevent WEBrick-powered services from starting on boot chkconfig puppet off chkconfig puppet-dashboard off # Make necessary services start on boot chkconfig puppet-dashboard-workers on chkconfig httpd on # Restart Apache to start puppet-dashboard service httpd restart # Start the puppet-dashboard-workers process service puppet-dashboard-workers start # Finally, Start the Puppet Master's own Puppet Node process service puppet start On Monday, June 18, 2012 12:11:38 PM UTC-4, jbrown wrote: > > I'm having the same problem, but I never saw a solution in this thread. > I've been over the permissions for config.ru and /var/lib/puppet about a > 1000 times and can't see any permissions problems. > > -rw-------. 1 puppet puppet 431 Jun 18 00:07 /etc/puppet/rack/config.ru > (I've also tried 700, 770, 777, and 660. I tried changing ownership to > apache.apache, puppet.apache, and apache.puppet.) > > $~ ll /var/lib/puppet/ > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:21 bucket > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:09 facts > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:09 lib > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:21 reports > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:21 rrd > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:21 server_data > drwxrwx---. 8 puppet puppet 4096 Jun 18 00:09 ssl > drwxrwx---. 2 puppet puppet 4096 Jun 18 00:09 state > drwxrwx---. 4 puppet puppet 4096 Jun 18 01:12 yaml > > Setenforce is 0. > > I even went so far as to use "PassengerUser puppet" and "PaasengerGroup > puppet" in my vhost, but that didn't help (and has been removed). > > Could someone please help me? > > Thanks, > Justin > > On Wednesday, May 30, 2012 12:17:59 PM UTC-5, Michael Altfield wrote: >> >> Hello Puppet gurus, >> >> I'm trying to setup a Puppet environment on CentOS 6. I got it working >> using WEBrick, but when I finally got Puppet running through Apache using >> Passenger, my Puppet node gets this "403 Forbidden" response (full output >> is attached as node.txt): >> >> [root@puppetnode-01 ~]# puppetd --waitforcert 30 --server >>>> puppetmaster.mydomain.com --debug --verbose --test >>> >>> ... >>> >>> warning: peer certificate won't be verified in this SSL session >>> >>> err: Could not request certificate: Error 403 on SERVER: <!DOCTYPE HTML >>>> PUBLIC "-//IETF//DTD HTML 2.0//EN"> >>> >>> <html><head> >>> >>> <title>403 Forbidden</title> >>> >>> </head><body> >>> >>> <h1>Forbidden</h1> >>> >>> <p>You don't have permission to access /production/certificate/ca >>> >>> on this server.</p> >>> >>> <hr> >>> >>> <address>Apache/2.2.15 (CentOS) Server at puppetmaster.mydomain.comPort >>> 8140</address> >>> >>> </body></html> >>> >>> >> At the same time, the httpd logs show this: >> >> [root@dx-puppetmaster-01 ~]# tail -f /var/log/httpd/* >>> >>> ... >>> >>> ==> /var/log/httpd/error_log <== >>> >>> [Wed May 30 12:46:21 2012] [error] [client 10.230.100.155] >>>> (13)Permission denied: access to /production/certificate/ca denied >>> >>> >>>> ==> /var/log/httpd/access_log <== >>> >>> 10.230.100.155 - - [30/May/2012:12:46:21 -0400] "GET >>>> /production/certificate/ca? HTTP/1.1" 403 325 "-" "-" >>> >>> >> The steps I used to install Puppet mostly followed the attached >> install.sh script (with slight modifications). I've also tried to follow >> this >> install >> guide<http://www.tomhayman.co.uk/linux/install-puppet-passenger-centos-6-part/> >> to >> no avail. >> >> Although I have not modified my /etc/httpd/conf/httpd.conf file, I've >> attached it for reference. I've also attached >> /etc/httpd/conf.d/passenger.conf and /usr/share/puppet/rack/puppetmasterd/ >> config.ru. config.ru's perms are 600 puppet:root. >> >> Both of these machines are virtualized using Citrix XenServer. Here's >> some more info on these boxes: >> >> [root@puppetmaster-01 ~]# cat /etc/redhat-release >> CentOS release 6.2 (Final) >> >> [root@puppetmaster-01 ~]# uname -a >> Linux puppetmaster-01.datalex.com 2.6.32-220.7.1.el6.x86_64 #1 SMP Wed >> Mar 7 00:52:02 GMT 2012 x86_64 x86_64 x86_64 GNU/Linux >> >> Any help will be greatly appreciated! :) >> > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/XjTBWzNFyhsJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.