class git { package { zlib-devel: ensure => installed } package { openssl-devel: ensure => installed } package { curl-devel: ensure => installed } package { expat-devel: ensure => installed } package { gettext-devel: ensure => installed } package { wget: ensure => installed } $version = '1.6.0.4' file { "/usr/local/src": ensure => directory } exec { "download-git-tgz": cwd => "/usr/local/src", path => "/bin:/usr/bin", command => "wget http://kernel.org/pub/software/scm/git/git-$version.tar.gz", creates => "/usr/local/src/git-$version.tar.gz", unless => "git --version | grep '$version'", before => Exec["untar-git-source"], require => [Package[wget]] } exec { "untar-git-source": command => "tar xzf git-$version.tar.gz", path => "/bin:/usr/bin", cwd => "/usr/local/src", creates => "/usr/local/src/git-$version", unless => "git --version | grep '$version'", subscribe => Exec["download-git-tgz"], before => Exec["make-install-git"] } exec { "make-install-git": cwd => "/usr/local/src/git-$version", path => "/bin:/usr/bin", command => "make prefix=/usr all && make prefix=/usr install", creates => [ "/usr/bin/git" ], unless => "git --version | grep '$version'", subscribe => Exec["untar-git-source"], require => [Exec["untar-git-source"],Package[gcc],Package[make],Package[gettext-devel],Package[expat-devel],Package[curl-devel],Package[openssl-devel],Package[zlib-devel]] } }