Configuring puppet master ubuntu/debian

Sep 14, 2011   #howto  #puppet  #sysadmin 

Installing puppet version 2.7.3

I will be installing the package via ruby gems. I do not like it all but the packages available in the apt repository are to old.

Install ruby, rubygems and dependencies

apt-get install ruby rubygems libopenssl-ruby

Install puppet via gem

gem install puppet --version=2.7.3

Puppet executables

You have to options here:

Add the gem bin path to your .profile

echo export PATH="$PATH:/var/lib/gems/1.8/bin" >> /root/.profile
cd /root && . .profile

or run the install.rb for puppet and facter:

/var/lib/gems/1.8/gems/puppet-2.7.3/install.rb
/var/lib/gems/1.8/gems/facter-1.6.0/install.rb

Create puppet users

The no-daemonize option keeps puppet in the foreground. CTRL-c to exit once puppet is done adding users. The verbose option will help you see when it is done.

puppet master --mkusers --no-daemonize --verbose

Puppet configuration file

If you want a template puppet.conf use genconfig to make one:

puppet master --genconfig > /etc/puppet/puppet.conf

If you choose to use puppet to generate you configuration file be aware you will have to comment out the following the line /var/lib/puppet/facts/ in the puppet.conf configuration file. I have created a bug with puppet labs on this.

# factdest = /var/lib/puppet/facts/

Configuring puppet to use passenger

Edit the /etc/init.d/pupppet.conf and set the ssl_client_header and ssl_client_verify_header under the [master] section.

ssl_client_verify_header = SSL_CLIENT_VERIFY
ssl_client_header = SSL_CLIENT_S_DN

Install and configure rack

gem install rack
mkdir -p /etc/puppet/rack/public
cp /var/lib/gems/1.8/gems/puppet-2.7.3/ext/rack/files/config.ru /etc/puppet/rack/
chown puppet /etc/puppet/rack/config.ru

Passenger dependencies

apt-get install build-essential libcurl4-openssl-dev libssl-dev zlib1g-dev apache2 apache2-prefork-dev libapr1-dev libaprutil1-dev ruby-dev

Install passenger

gem install passenger --version=3.0.9

Install Passenger Module

/var/lib/gems/1.8/bin/passenger-install-apache2-module --auto
a2enmod ssl
cat > /etc/apache2/mods-available/passenger.conf <<EOF
PassengerHighPerformance on
PassengerMaxPoolSize 12
PassengerPoolIdleTime 1500
PassengerStatThrottleRate 120
RackAutoDetect Off
RailsAutoDetect Off
EOF
cat > /etc/apache2/mods-available/passenger.load <<EOF
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.9/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.9
PassengerRuby /usr/bin/ruby1.8
EOF
a2enmod passenger

Configure apache to listen on port 8140

cat >> /etc/apache2/ports.conf <<EOF
<IfModule passenger_module>
    Listen 8140
</IfModule>
EOF

Setup puppetmaster virtual site

PUPPETHOST=`facter fqdn`
cat > /etc/apache2/sites-available/puppetmasterd <<EOF
<VirtualHost *:8140>
        SSLEngine on
        SSLProtocol -ALL +SSLv3 +TLSv1
        SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP

        SSLCertificateFile      /etc/puppet/ssl/certs/$PUPPETHOST.pem
        SSLCertificateKeyFile   /etc/puppet/ssl/private_keys/$PUPPETHOST.pem
        SSLCertificateChainFile /etc/puppet/ssl/ca/ca_crt.pem
        SSLCACertificateFile    /etc/puppet/ssl/ca/ca_crt.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     /etc/puppet/ssl/ca/ca_crl.pem
        SSLVerifyClient optional
        SSLVerifyDepth  1
        SSLOptions +StdEnvVars

        DocumentRoot /etc/puppet/rack/public/
        RackBaseURI /
        <Directory /etc/puppet/rack/>
                Options None
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>
EOF
a2ensite puppetmasterd
service apache2 restart