define source_package ($cfgopts = "", $makeopts = "", $postcmd = ":") {
file {
"/usr/src/$name":
ensure => "directory",
recurse => "true",
source => "puppet://$server/files/src/$name";
"/usr/src/$name/build.sh":
ensure => "present",
mode => "755",
content => template("build_source_package.sh.erb");
}
exec {
"/usr/src/$name/build.sh":
require => File["/usr/src/$name/build.sh"],
onlyif => "/usr/bin/test [ ! -e /usr/src/.$name.built ]";
"$postcmd":
command => "/bin/bash -c $postcmd && /usr/bin/touch /usr/src/.$name.postcmd_executed",
require => File["/usr/src/$name/build.sh"],
onlyif => "/usr/bin/test [ ! -e /usr/src/.$name.postcmd_executed ]";
}
}
build_source_package.sh.erb:
pushd /usr/src/<%= name %>
./configure <%= cfgopts %> || exit -1
make clean
make || exit -2
<% [ makeopts ].flatten.each_with_index do |opt,index| -%>
make <%= opt %> || exit <%= index + 1 %>
<% end -%>
touch /usr/src/.<%= name %>.built && exit 0
exit 42