Michael, Thanks for the quick response. I'll take a closer look at the instructions and see if they work in my environment.
I appreciate the thoughtful reply. Cheers, Justin On Monday, June 18, 2012 12:31:28 PM UTC-5, Michael Altfield wrote: > > 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/-/lFs7oF4dnZMJ. 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.