{"id":202,"date":"2012-01-31T10:34:12","date_gmt":"2012-01-31T15:34:12","guid":{"rendered":"http:\/\/blog.domb.net\/?p=202"},"modified":"2012-03-25T22:47:19","modified_gmt":"2012-03-26T02:47:19","slug":"rhel6-2-puppet-2-7-9-the-foreman-mcollective-rabbitmq","status":"publish","type":"post","link":"https:\/\/blog.domb.net\/?p=202","title":{"rendered":"EL 6.2 RHEL6.2 Puppet 2.7.9 The Foreman Mcollective RabbitMQ"},"content":{"rendered":"<p>This How to will walk you thru the steps of installing Pupppet, The Foreman, RabbitMQ, and MCollective:<\/p>\n<p><strong>1. Add your hostname to \/etc\/hosts.conf and \/etc\/sysconfig\/network<\/strong><\/p>\n<p>[root@puppet ~]# echo -e &#8220;127.0.0.1 puppet.${DOMAIN} puppet foreman.yourdomain.com foreman localhost&#8221; &gt; \/etc\/hosts<br \/>\n[root@puppet ~]# echo -e &#8220;NETWORKING=yes\\nHOSTNAME=puppet.yourdomain.com&#8221; &gt; \/etc\/sysconfig\/network<br \/>\n[root@puppet ~]# hostname foreman.yourdomain.com<\/p>\n<p><strong>2. First we need to add the repositories for the installation (you need to be root or have sudo permissions to do this:<\/strong><\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/yum.repos.d\/puppetlabs.repo &lt;&lt; &#8220;EOF&#8221;<br \/>\n[puppetlabsproduct]<br \/>\nname=Puppet Labs Packages<br \/>\nbaseurl=http:\/\/yum.puppetlabs.com\/el\/6\/products\/x86_64\/<br \/>\ngpgcheck=0<br \/>\nenabled=1<\/p>\n<p>[puppetlabsdeps]<br \/>\nname=Puppet Labs Packages<br \/>\nbaseurl=http:\/\/yum.puppetlabs.com\/el\/6\/dependencies\/x86_64\/<br \/>\ngpgcheck=0<br \/>\nenabled=1<br \/>\nEOF<\/p>\n<p># Foreman repository<br \/>\ncat &gt; \/etc\/yum.repos.d\/foreman.repo &lt;&lt; &#8220;EOF&#8221;<br \/>\n[foreman]<br \/>\nname=Foreman Repo<br \/>\nbaseurl=http:\/\/yum.theforeman.org\/stable<br \/>\ngpgcheck=0<br \/>\nenabled=1<br \/>\nEOF<\/p>\n<p># Epel Repo<br \/>\ncat &gt; \/etc\/yum.repos.d\/epel.repo &lt;&lt; &#8220;EOF&#8221;<br \/>\n[epel]<br \/>\nname=Extra Packages for Enterprise Linux 6 &#8211; $basearch<br \/>\n#baseurl=http:\/\/download.fedoraproject.org\/pub\/epel\/6\/$basearch<br \/>\nmirrorlist=https:\/\/mirrors.fedoraproject.org\/metalink?repo=epel-6&amp;arch=$basearch<br \/>\nfailovermethod=priority<br \/>\nenabled=1<br \/>\ngpgcheck=1<br \/>\ngpgkey=file:\/\/\/etc\/pki\/rpm-gpg\/RPM-GPG-KEY-EPEL-6<\/p>\n<p>[epel-debuginfo]<br \/>\nname=Extra Packages for Enterprise Linux 6 &#8211; $basearch &#8211; Debug<br \/>\n#baseurl=http:\/\/download.fedoraproject.org\/pub\/epel\/6\/$basearch\/debug<br \/>\nmirrorlist=https:\/\/mirrors.fedoraproject.org\/metalink?repo=epel-debug-6&amp;arch=$basearch<br \/>\nfailovermethod=priority<br \/>\nenabled=0<br \/>\ngpgkey=file:\/\/\/etc\/pki\/rpm-gpg\/RPM-GPG-KEY-EPEL-6<br \/>\ngpgcheck=1<\/p>\n<p>[epel-source]<br \/>\nname=Extra Packages for Enterprise Linux 6 &#8211; $basearch &#8211; Source<br \/>\n#baseurl=http:\/\/download.fedoraproject.org\/pub\/epel\/6\/SRPMS<br \/>\nmirrorlist=https:\/\/mirrors.fedoraproject.org\/metalink?repo=epel-source-6&amp;arch=$basearch<br \/>\nfailovermethod=priority<br \/>\nenabled=0<br \/>\ngpgkey=file:\/\/\/etc\/pki\/rpm-gpg\/RPM-GPG-KEY-EPEL-6<br \/>\ngpgcheck=1<br \/>\nEOF<\/p>\n<p><strong>3. Now we have to install all the packages<\/strong><\/p>\n<p>[root@puppet ~]# yum -y install rubygems ruby-devel rubygem-stomp httpd httpd-devel mod_ssl mysql mysql-server mysql-devel libcurl-devel openssl-devel openssl098e tcl tk unixODBC unixODBC-devel augeas gcc gcc-c++ zlib-devel rubygem-mime-types rubygem-json rubygem-rest-client<\/p>\n<p><strong>4. Install the rubygems. This is done with the ruby package manager<\/strong><\/p>\n<p>[root@puppet ~]# gem install &#8211;no-rdoc &#8211;no-ri puppet passenger rack mysql net-ping<br \/>\n[root@puppet ~]# gem install &#8211;no-rdoc &#8211;no-ri -v 3.0.10 rails activerecord<\/p>\n<p><strong>5. After a successful install we can add the user puppet to the system and create the main directories for it<\/strong><\/p>\n<p>[root@puppet ~]# useradd puppet<br \/>\n[root@puppet ~]# mkdir -p \/etc\/puppet\/{manifests,modules}<br \/>\n[root@puppet ~]# mkdir -p \/usr\/share\/puppet\/rack\/puppetmasterd\/{public,tmp}<br \/>\n[root@puppet ~]# mkdir -p \/var\/lib\/puppet\/{bucket,yaml,rrd,server_data,reports}<br \/>\n[root@puppet ~]# chown -R puppet:puppet \/etc\/puppet\/<br \/>\n[root@puppet ~]# chown -R puppet:puppet \/var\/lib\/puppet\/<br \/>\n[root@puppet ~]# chown -R puppet:puppet \/usr\/share\/puppet\/rack\/puppetmasterd\/<\/p>\n<p><strong>6. Copy the puppet RACK config to the puppetmasterd directory<\/strong><\/p>\n<p>[root@puppet ~]# cp \/usr\/lib\/ruby\/gems\/1.8\/gems\/puppet-2.7.9\/ext\/rack\/files\/config.ru \/usr\/share\/puppet\/rack\/puppetmasterd\/config.ru<br \/>\n[root@puppet ~]# chown puppet:puppet \/usr\/share\/puppet\/rack\/puppetmasterd\/config.ru<\/p>\n<p><strong>7. Installing Foreman and MCollective<\/strong><\/p>\n<p>[root@puppet ~]# yum -y install foreman mcollective mcollective-common mcollective-client<br \/>\n<strong><\/strong><\/p>\n<p><strong>8. Install latest mcollective plugins for puppet<\/strong><\/p>\n<p>[root@puppet ~]# cd \/usr\/libexec\/mcollective\/mcollective\/agent<br \/>\n[root@puppet ~]# for i in nettest filemgr puppetd puppetral puppetca; do<br \/>\nwget https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/$i\/agent\/$i.rb<br \/>\nwget https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/$i\/agent\/$i.ddl<br \/>\ndone<\/p>\n<p>[root@puppet ~]# wget -O package.rb https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/package\/agent\/puppet-package.rb<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/package\/agent\/package.ddl<br \/>\n[root@puppet ~]# wget -O service.rb https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/service\/agent\/puppet-service.rb<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/agent\/service\/agent\/service.ddl<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/etcfacts\/etc_facts.rb<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/etcfacts\/etc_facts.ddl<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/shellcmd\/shellcmd.rb<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/shellcmd\/shellcmd.ddl<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/yum\/yum.rb<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/phobos182\/mcollective-plugins\/master\/agent\/yum\/yum.ddl<br \/>\n[root@puppet ~]# cd \/usr\/libexec\/mcollective\/mcollective\/facts\/<br \/>\n[root@puppet ~]# wget https:\/\/raw.github.com\/puppetlabs\/mcollective-plugins\/master\/facts\/facter\/facter_facts.rb<\/p>\n<p><strong>9. Install erlang<\/strong><\/p>\n<p>[root@puppet ~]# ln -s \/usr\/lib64\/libodbc.so.2 \/usr\/lib64\/libodbc.so.1 ### ODBC fix<br \/>\n[root@puppet ~]# rpm -ivh http:\/\/rbel.frameos.org\/stable\/el6\/x86_64\/erlang-R12B-5.10.el6.x86_64.rpm &#8211;nodeps #this version runs with puppet!<\/p>\n<p><strong>10. Installing RabbitMQ<\/strong><\/p>\n<p>[root@puppet ~]# rpm -ivh http:\/\/www.rabbitmq.com\/releases\/rabbitmq-server\/v2.5.1\/rabbitmq-server-2.5.1-1.noarch.rpm<br \/>\n[root@puppet ~]# cd \/usr\/lib\/rabbitmq\/lib\/rabbitmq_server-2.5.1\/plugins<br \/>\n[root@puppet ~]# wget http:\/\/www.rabbitmq.com\/releases\/plugins\/v2.5.1\/amqp_client-2.5.1.ez<br \/>\n[root@puppet ~]# wget http:\/\/www.rabbitmq.com\/releases\/plugins\/v2.5.1\/rabbitmq_stomp-2.5.1.ez<br \/>\n[root@puppet ~]# \/etc\/init.d\/qpidd stop #Very important<br \/>\n[root@puppet ~]# chkconfig qpidd off<br \/>\n[root@puppet ~]# chkconfig rabbitmq-server on<br \/>\n[root@puppet ~]# service rabbitmq-server start<\/p>\n<p># Configure RabbitMQ User\/Privs<\/p>\n<p>Export these vars first<br \/>\n[root@puppet ~]# MYSQL_PASSWORD=&#8221;puppet2012&#8243;<br \/>\n[root@puppet ~]# RABBIT_USER=&#8221;mcollective&#8221;<br \/>\n[root@puppet ~]# RABBIT_PASSWORD=&#8221;rabbitmq&#8221;<br \/>\n[root@puppet ~]# MCOLLECTIVE_PSK=&#8221;mcollectivePSKmcollective&#8221;<br \/>\n[root@puppet ~]# FOREMAN_EMAIL=&#8221;root@mydomain.com&#8221;<br \/>\n[root@puppet ~]# DOMAIN=&#8221;mydomain.com&#8221;<\/p>\n<p># Configure RabbitMQ user\/privileges<br \/>\n[root@puppet ~]# rabbitmqctl add_user ${RABBIT_USER} ${RABBIT_PASSWORD}<br \/>\n[root@puppet ~]# rabbitmqctl set_permissions ${RABBIT_USER} &#8220;.*&#8221; &#8220;.*&#8221; &#8220;.*&#8221;<br \/>\n[root@puppet ~]# rabbitmqctl delete_user guest<\/p>\n<p><strong>11. Installing the Apache Passenger module<\/strong><\/p>\n<p>[root@puppet ~]# passenger-install-apache2-module -a<\/p>\n<p><strong>12. We are ready to apply the configuration for MCollective<\/strong><\/p>\n<p># Configuration files for mCollective<br \/>\n[root@puppet ~]# cat &gt; \/etc\/mcollective\/server.cfg &lt;&lt; &#8220;EOF&#8221;<br \/>\ntopicprefix = \/topic\/<br \/>\nmain_collective = mcollective<br \/>\ncollectives = mcollective<br \/>\nlibdir = \/usr\/libexec\/mcollective<br \/>\nlogfile = \/var\/log\/mcollective.log<br \/>\nloglevel = info<br \/>\ndaemonize = 1<\/p>\n<p>securityprovider = psk<br \/>\nplugin.psk = MCOLLECTIVE_PSK_PH<\/p>\n<p>connector = stomp<br \/>\nplugin.stomp.host = localhost<br \/>\nplugin.stomp.port = 61613<br \/>\nplugin.stomp.user = RABBIT_USER_PH<br \/>\nplugin.stomp.password = RABBIT_PASSWORD_PH<\/p>\n<p>factsource = facter<br \/>\nEOF<\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/mcollective\/client.cfg &lt;&lt; &#8220;EOF&#8221;<br \/>\ntopicprefix = \/topic\/<br \/>\nmain_collective = mcollective<br \/>\ncollectives = mcollective<br \/>\nlibdir = \/usr\/libexec\/mcollective<br \/>\nlogfile = \/dev\/null<br \/>\nloglevel = info<\/p>\n<p>securityprovider = psk<br \/>\nplugin.psk = MCOLLECTIVE_PSK_PH<\/p>\n<p>connector = stomp<br \/>\nplugin.stomp.host = localhost<br \/>\nplugin.stomp.port = 61613<br \/>\nplugin.stomp.user = RABBIT_USER_PH<br \/>\nplugin.stomp.password = RABBIT_PASSWORD_PH<\/p>\n<p>factsource = facter<br \/>\nEOF<br \/>\n<strong><\/strong><\/p>\n<p><strong>13. Lets create the MyDQL database for puppet and foreman<\/strong><\/p>\n<p>[root@puppet ~]# chkconfig mysqld on &amp;&amp; service mysqld start<br \/>\n[root@puppet ~]# mysql -u root -e &#8220;CREATE DATABASE puppet;&#8221;<br \/>\n[root@puppet ~]# mysql -u root -e &#8220;GRANT ALL PRIVILEGES ON puppet.* TO puppet@localhost IDENTIFIED BY &#8216;${MYSQL_PASSWORD}&#8217;;&#8221;<\/p>\n<p><strong>14. Puppet and Foreman Main configuration<\/strong><\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/puppet\/puppet.conf &lt;&lt; &#8220;EOF&#8221;<br \/>\n[main]<br \/>\nlogdir = \/var\/log\/puppet<br \/>\nrundir = \/var\/run\/puppet<br \/>\nssldir = $vardir\/ssl<br \/>\nfactpath = $vardir\/lib\/facter<br \/>\ntemplatedir = $confdir\/templates<br \/>\npluginsync = false<br \/>\nclassfile = $vardir\/classes.txt<br \/>\nenvironment = production<br \/>\nreportdir = \/var\/lib\/puppet\/reports<br \/>\nmodulepath = \/etc\/puppet\/modules<br \/>\ncertname = puppet.domb.com<\/p>\n<p>[agent]<br \/>\nreport = true<br \/>\nignorecache = true<br \/>\nlocalconfig = $vardir\/localconfig<br \/>\nserver = puppet.domb.com<\/p>\n<p>[master]<br \/>\nreports = http,store,log,foreman<br \/>\nssl_client_header = SSL_CLIENT_S_DN<br \/>\nssl_client_verify_header = SSL_CLIENT_VERIFY<br \/>\nstoreconfigs = true<br \/>\ndbadapter = mysql<br \/>\ndbuser = puppet<br \/>\ndbpassword = puppet2012<br \/>\ndbname = puppet<br \/>\ndbserver = localhost<br \/>\ndbsocket = \/var\/lib\/mysql\/mysql.sock<br \/>\nEOF<\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/httpd\/conf.d\/puppet.conf &lt;&lt; &#8220;EOF&#8221;<br \/>\nListen 8140<\/p>\n<p>&lt;VirtualHost *:8140&gt;<br \/>\nSSLEngine on<br \/>\nSSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA<br \/>\nSSLCertificateFile \/var\/lib\/puppet\/ssl\/certs\/puppet.domb.com.pem<br \/>\nSSLCertificateKeyFile \/var\/lib\/puppet\/ssl\/private_keys\/puppet.domb.com.pem<br \/>\nSSLCertificateChainFile \/var\/lib\/puppet\/ssl\/ca\/ca_crt.pem<br \/>\nSSLCACertificateFile \/var\/lib\/puppet\/ssl\/ca\/ca_crt.pem<br \/>\nSSLCARevocationFile \/var\/lib\/puppet\/ssl\/ca\/ca_crl.pem<br \/>\nSSLVerifyClient optional<br \/>\nSSLVerifyDepth 1<br \/>\nSSLOptions +StdEnvVars<\/p>\n<p>RackAutoDetect On<br \/>\nDocumentRoot \/usr\/share\/puppet\/rack\/puppetmasterd\/public\/<\/p>\n<p>&lt;Directory \/usr\/share\/puppet\/rack\/puppetmasterd\/public\/&gt;<br \/>\nOptions None<br \/>\nAllowOverride None<br \/>\nOrder allow,deny<br \/>\nallow from all<br \/>\n&lt;\/Directory&gt;<br \/>\n&lt;\/VirtualHost&gt;<br \/>\nEOF<br \/>\n[root@puppet ~]# cat &gt; \/etc\/httpd\/conf.d\/passenger.conf &lt;&lt; &#8220;EOF&#8221;<br \/>\nLoadModule passenger_module \/usr\/lib\/ruby\/gems\/1.8\/gems\/passenger-3.0.11\/ext\/apache2\/mod_passenger.so<br \/>\nPassengerRoot \/usr\/lib\/ruby\/gems\/1.8\/gems\/passenger-3.0.11<br \/>\nPassengerRuby \/usr\/bin\/ruby<br \/>\nEOF<\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/httpd\/conf.d\/foreman.conf &lt;&lt; &#8220;EOF&#8221;<br \/>\nListen 443<br \/>\nNameVirtualHost *:443<br \/>\nLoadModule ssl_module modules\/mod_ssl.so<br \/>\nAddType application\/x-x509-ca-cert .crt<br \/>\nAddType application\/x-pkcs7-crl .crl<\/p>\n<p>&lt;VirtualHost *:443&gt;<br \/>\nServerName foreman.domb.com<\/p>\n<p>RailsAutoDetect On<br \/>\nDocumentRoot \/usr\/share\/foreman\/public<\/p>\n<p>&lt;Directory \/usr\/share\/foreman\/public&gt;<br \/>\nOptions FollowSymLinks<br \/>\nDirectoryIndex index.html<br \/>\nAllowOverride None<br \/>\nOrder allow,deny<br \/>\nallow from all<br \/>\n&lt;\/Directory&gt;<\/p>\n<p>SSLEngine On<br \/>\nSSLCertificateFile \/var\/lib\/puppet\/ssl\/certs\/puppet.domb.com.pem<br \/>\nSSLCertificateKeyFile \/var\/lib\/puppet\/ssl\/private_keys\/puppet.domb.com.pem<br \/>\n&lt;\/VirtualHost&gt;<br \/>\nEOF<\/p>\n<p># Foreman configuration files (the are Whitespace sensitive!!!)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-211 alignleft\" src=\"http:\/\/blog.domb.net\/wp-content\/uploads\/Screen-shot-2012-01-31-at-10.26.05-AM.png\" alt=\"\" width=\"562\" height=\"1030\" \/><\/p>\n<p>[root@puppet ~]#\u00a0 ln -sf \/usr\/share\/foreman\/config\/database.yml \/etc\/foreman\/database.yml<br \/>\n[root@puppet ~]#\u00a0 ln -sf \/usr\/share\/foreman\/config\/settings.yaml \/etc\/foreman\/settings.yaml<br \/>\n[root@puppet ~]#\u00a0 ln -sf \/usr\/share\/foreman\/config\/email.yaml \/etc\/foreman\/email.yaml<br \/>\n<strong>15. Remove stock apache config<\/strong><\/p>\n<p>[root@puppet ~]# rm -f \/etc\/httpd\/conf.d\/ssl.conf<br \/>\n[root@puppet ~]# rm -f \/etc\/httpd\/conf.d\/welcome.conf<\/p>\n<p><strong>16. Configure IpTables<\/strong><\/p>\n<p>[root@puppet ~]# cat &gt; \/etc\/sysconfig\/iptables &lt;&lt; &#8220;EOF&#8221;<br \/>\n# Firewall configuration written by system-config-firewall<br \/>\n# Manual customization of this file is not recommended.<br \/>\n*filter<br \/>\n:INPUT ACCEPT [0:0]<br \/>\n:FORWARD ACCEPT [0:0]<br \/>\n:OUTPUT ACCEPT [0:0]<br \/>\n-A INPUT -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br \/>\n-A INPUT -p icmp -j ACCEPT<br \/>\n-A INPUT -i lo -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 22 -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 80 -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 443 -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 8140 -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state NEW -m tcp -p tcp &#8211;dport 61613 -j ACCEPT<br \/>\n-A INPUT -j REJECT &#8211;reject-with icmp-host-prohibited<br \/>\n-A FORWARD -j REJECT &#8211;reject-with icmp-host-prohibited<br \/>\nCOMMIT<br \/>\nEOF<\/p>\n<p>[root@puppet ~]# service iptables restart<br \/>\n<strong><\/strong><\/p>\n<p><strong>17. Replace placeholder values:<\/strong><\/p>\n<p>[root@puppet ~]# sed -i &#8220;s\/MYSQL_PASSWORD_PH\/${MYSQL_PASSWORD}\/g&#8221; \/etc\/puppet\/puppet.conf \/usr\/share\/foreman\/config\/database.yml<br \/>\n[root@puppet ~]# sed -i &#8220;s\/MCOLLECTIVE_PSK_PH\/${MCOLLECTIVE_PSK}\/g&#8221; \/etc\/mcollective\/server.cfg \/etc\/mcollective\/client.cfg<br \/>\n[root@puppet ~]# sed -i &#8220;s\/RABBIT_USER_PH\/${RABBIT_USER}\/g&#8221; \/etc\/mcollective\/server.cfg \/etc\/mcollective\/client.cfg<br \/>\n[root@puppet ~]# sed -i &#8220;s\/RABBIT_PASSWORD_PH\/${RABBIT_PASSWORD}\/g&#8221; \/etc\/mcollective\/server.cfg \/etc\/mcollective\/client.cfg<br \/>\n[root@puppet ~]# sed -i &#8220;s\/FOREMAN_EMAIL_PH\/${FOREMAN_EMAIL}\/g&#8221; \/usr\/share\/foreman\/config\/settings.yaml<br \/>\n[root@puppet ~]# sed -i &#8220;s\/DOMAIN_PH\/${DOMAIN}\/g&#8221; \/etc\/httpd\/conf.d\/puppet.conf<br \/>\n[root@puppet ~]# sed -i &#8220;s\/DOMAIN_PH\/${DOMAIN}\/g&#8221; \/etc\/httpd\/conf.d\/foreman.conf<br \/>\n[root@puppet ~]# sed -i &#8220;s\/DOMAIN_PH\/${DOMAIN}\/g&#8221; \/usr\/lib\/ruby\/gems\/1.8\/gems\/puppet-2.7.9\/lib\/puppet\/reports\/foreman.rb<br \/>\n[root@puppet ~]# sed -i &#8220;s\/DOMAIN_PH\/${DOMAIN}\/g&#8221; \/usr\/share\/foreman\/config\/email.yaml<br \/>\n[root@puppet ~]# sed -i &#8220;s\/DOMAIN_PH\/${DOMAIN}\/g&#8221; \/usr\/share\/foreman\/config\/settings.yaml<\/p>\n<p><strong>18. Start Services and create puppet Cert<\/strong><\/p>\n<p>[root@puppet ~]# chkconfig mcollective on<br \/>\n[root@puppet ~]# service mcollective start<br \/>\n[root@puppet ~]# chkconfig httpd on<br \/>\n[root@puppet ~]# service httpd start<br \/>\n[root@puppet ~]# puppet cert &#8211;generate puppet.${DOMAIN}<\/p>\n<p><strong>19. Migrate DB to Forman. You will need the add this to a Cronjob later<\/strong><\/p>\n<p>[root@puppet ~]#\u00a0 cd \/usr\/share\/foreman<br \/>\n[root@puppet ~]#\u00a0 RAILS_ENV=production rake db:migrate<\/p>\n<p><strong>20. Your Done<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This How to will walk you thru the steps of installing Pupppet, The Foreman, RabbitMQ, and MCollective: 1. Add your hostname to \/etc\/hosts.conf and \/etc\/sysconfig\/network [root@puppet ~]# echo -e &#8220;127.0.0.1 puppet.${DOMAIN} puppet foreman.yourdomain.com foreman localhost&#8221; &gt; \/etc\/hosts [root@puppet ~]# echo -e &#8220;NETWORKING=yes\\nHOSTNAME=puppet.yourdomain.com&#8221; &gt; \/etc\/sysconfig\/network [root@puppet ~]# hostname foreman.yourdomain.com 2. First we need to add the&#8230;<\/p>\n","protected":false},"author":2,"featured_media":166,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-202","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-puppet"],"_links":{"self":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=202"}],"version-history":[{"count":21,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":237,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/posts\/202\/revisions\/237"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=\/wp\/v2\/media\/166"}],"wp:attachment":[{"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.domb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}