Friday, March 14, 2014

Puppet manifest PHP compilation (build) server


# PHP build and rpm packaging server
# Used for adding (compiling) extensions for PHP (ie: mysql native driver)
#
# Copy the php-5.3.28.tar.gz source to /BUILDS and extract
# Copy php_config_script to /BUILDS/php-5.3.28 and run to set compilation options
# Run /BUILDS/make_install_pkg.sh
# -- End result should be an rpm in /BUILDS
#
# 03/11/14 mfeenstra

node /mybuildserver0[1|2].yourdomain.net/ {

    class { "yum":
        enable_base_6_4    => '1',
        enable_updates_6_4 => '1',
        epel               => 'yes',
        sernet_samba       => 'yes'
    }

    class { "sudoers":
        sudoer => {
            "%ops"       => [ "ALL=(ALL) ALL" ],
            "%secteam"   => [ "ALL=(ALL) ALL" ],
            "%releng"    => [ "ALL=(ALL) ALL" ],
            "%dev"       => [ "ALL=(ALL) ALL" ],
            "%qa"        => [ "ALL=(ALL) ALL" ],
            "%qa-unix"   => [ "ALL=(ALL) ALL" ],
        }
    }

    class { "base": }
    class { "sites": }
    class { "motd": description => 'PHP build and rpm packaging server' }

    class { "ssh":
        pamsshd => {
            "dev"     => [ "account sufficient pam_succeed_if.so user ingroup" ],
            "releng"  => [ "account sufficient pam_succeed_if.so user ingroup" ],
            "qa"      => [ "account sufficient pam_succeed_if.so user ingroup" ],
            "qa-unix" => [ "account sufficient pam_succeed_if.so user ingroup" ],
        }
    }

    package { "gcc":
        ensure  =>  present
    }

    package { "httpd":
        ensure  =>  present
    }

    package { "httpd-devel":
        ensure  =>  present
    }

    package { "httpd-tools":
        ensure  =>  present
    }

    package { "libxml2-devel":
        ensure  =>  present
    }

    package { "openssl-devel":
        ensure  =>  '1.0.0-27.el6_4.2'
    }

    package { "bzip2-devel":
        ensure  =>  present
    }

    package { "libcurl-devel":
        ensure  =>  present
    }

    package { "gmp-devel":
        ensure  =>  present
    }

    package { "unixODBC":
        ensure  =>  present
    }

    package { "freetds":
        ensure  =>  present
    }
    
    file { '/usr/lib/libsybdb.so.5':
        ensure  =>  'link',
        target  =>  '/usr/lib64/libsybdb.so.5',
        require    =>  Package["freetds"]
    }

    file { '/usr/lib/libsybdb.so.5.0.0':
        ensure  =>  'link',
        target  =>  '/usr/lib64/libsybdb.so.5.0.0',
        require    =>  Package["freetds"]
    }

    package { "freetds-devel":
        ensure  =>  present,
        require    =>  Package["freetds"]
    }

    file { '/usr/lib/libsybdb.so':
        ensure  =>  'link',
        target  =>  '/usr/lib64/libsybdb.so',
        require    =>  Package["freetds-devel"]
    }

    package { "readline":
        ensure  =>  present
    }

    package { "readline-devel":
        ensure  =>  present
    }

    package { "pcre":
        ensure  =>  present
    }

    package { "pcre-devel":
        ensure  =>  present
    }



    # FPM is a super awesome and easy RPM packaging tool written in Ruby

    package { "ruby":
        ensure  =>  present
    }

    package { "ruby-devel":
        ensure  =>  present,
        require =>  Package["ruby"]
    }

    package { "ruby-irb":
        ensure  =>  present,
        require =>  Package["ruby"]
    }

    package { "ruby-libs":
        ensure  =>  present,
        require =>  Package["ruby"]
    }

    package {"ruby-rdoc":
        ensure  =>  present,
        require =>  Package["ruby"]
    }

    package {"rubygems":
        ensure  =>  present,
        require =>  Package["ruby"]
    }

    package { "rpm-build":
        ensure  =>  present
    }

    # ruby gem FPM for creating RPM packages

    package { "fpm":
        ensure  =>  'installed',
        provider => 'gem',
        require  => Package["rubygems"]
    }

    # build scripts

    file { "/BUILDS":
        ensure  =>  "directory"
    }

    file { "/BUILDS/make_install_pkg.sh":
        ensure  => present,
        owner   => root,
        group   => root,
        mode    => '0755',
        source  => 'puppet:///files/phpbuild/make_install_pkg.sh',
        path    => '/BUILDS/make_install_pkg.sh',
        require => File["/BUILDS"]
    }

    file { "/BUILDS/php_config_script":
        ensure  => present,
        owner   => root,
        group   => root,
        mode    => '0755',
        source  => 'puppet:///files/phpbuild/php_config_script',
        path    => '/BUILDS/php_config_script',
        require => File["/BUILDS"]
    }


}