221 lines
4.8 KiB
Puppet
221 lines
4.8 KiB
Puppet
# Extract tar package.
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $name:
|
|
# Destination directory.
|
|
#
|
|
# $ensure:
|
|
# If 'latest', remove target and re-extract when source file changes.
|
|
#
|
|
# $source:
|
|
# File to extract.
|
|
#
|
|
# $strip:
|
|
# Remove the specified number of leading path elements.
|
|
# Defaults to 0.
|
|
#
|
|
# $preserve:
|
|
# Preserve owner and permissions. Defaults to false.
|
|
#
|
|
# $pattern:
|
|
# The pathnames or shell-style globbing patterns indicate which
|
|
# items in the archive should be processed.
|
|
#
|
|
# $user:
|
|
# User to extract the files as.
|
|
#
|
|
# $group:
|
|
# Group to extract the files as.
|
|
#
|
|
# === Sample usage
|
|
#
|
|
# util::extract::tar { "/usr/local/src/moin-1.8.8":
|
|
# strip => 1,
|
|
# source => "/usr/local/src/moin-1.8.8.tar.gz",
|
|
# }
|
|
#
|
|
define util::extract::tar(
|
|
$source,
|
|
$ensure=present,
|
|
$strip=0,
|
|
$preserve=false,
|
|
$pattern="",
|
|
$user=undef,
|
|
$group=undef
|
|
) {
|
|
|
|
if $user {
|
|
$user_real = $user
|
|
} else {
|
|
$user_real = "root"
|
|
}
|
|
|
|
if $group {
|
|
$group_real = $group
|
|
} else {
|
|
$group_real = $::operatingsystem ? {
|
|
"openbsd" => "wheel",
|
|
default => "root",
|
|
}
|
|
}
|
|
|
|
require gnu::tar
|
|
|
|
case $ensure {
|
|
latest: {
|
|
exec { "tar-rmdir-${name}":
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
command => "rm -fr ${name}",
|
|
before => File[$name],
|
|
subscribe => File[$source],
|
|
refreshonly => true,
|
|
}
|
|
}
|
|
default: { }
|
|
}
|
|
|
|
file { $name:
|
|
ensure => directory,
|
|
mode => "0755",
|
|
owner => $user,
|
|
group => $group,
|
|
}
|
|
|
|
case regsubst($source, '.*\.([^.]+)$', '\1') {
|
|
"tar": {
|
|
$cat = "cat"
|
|
}
|
|
"gz","tgz": {
|
|
$cat = "zcat"
|
|
}
|
|
"bz2","tbz": {
|
|
$cat = "bzcat"
|
|
}
|
|
"xz": {
|
|
$cat = "xzcat"
|
|
}
|
|
default: {
|
|
fail("unknown file type")
|
|
}
|
|
}
|
|
|
|
$tar = $::operatingsystem ? {
|
|
"openbsd" => "gtar",
|
|
default => "tar",
|
|
}
|
|
|
|
if $preserve {
|
|
$command = "/bin/sh -c 'umask 022; ${cat} ${source} | ${tar} xf - --strip-components=${strip} -C ${name} ${pattern}'"
|
|
} else {
|
|
$command = "/bin/sh -c 'umask 022; ${cat} ${source} | ${tar} xf - --strip-components=${strip} -C ${name} ${pattern} --no-same-owner --no-same-permissions'"
|
|
}
|
|
|
|
exec { "tar-extract-${name}":
|
|
path => "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin",
|
|
command => $command,
|
|
unless => "test -n \"$(ls -A ${name})\"",
|
|
user => $user,
|
|
group => $group,
|
|
require => File[$name],
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Extract tar package.
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $name:
|
|
# Destination directory.
|
|
# $ensure:
|
|
# If 'latest', remove target and re-extract when source file changes.
|
|
# $source:
|
|
# File to extract.
|
|
#
|
|
# === Sample usage
|
|
#
|
|
#util::extract::zip { "/usr/lib/firefox-addons/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}":
|
|
# source => "/usr/local/src/noscript.xpi",
|
|
#}
|
|
#
|
|
define util::extract::zip($source, $ensure=present) {
|
|
|
|
case $ensure {
|
|
latest: {
|
|
exec { "zip-rmdir-${name}":
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
command => "rm -fr ${name}",
|
|
before => File[$name],
|
|
subscribe => File[$source],
|
|
refreshonly => true,
|
|
}
|
|
}
|
|
default: { }
|
|
}
|
|
|
|
$command = "unzip ${source} -d ${name}"
|
|
|
|
file { $name:
|
|
ensure => directory,
|
|
mode => "0755",
|
|
owner => root,
|
|
group => root,
|
|
}
|
|
|
|
exec { "zip-extract-${name}":
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
command => $command,
|
|
require => File[$name],
|
|
unless => "test -n \"$(ls -A ${name})\"",
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Install patch.
|
|
#
|
|
class util::patch::package {
|
|
|
|
if $::kernel == "Linux" {
|
|
package { "patch":
|
|
ensure => installed,
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
# Apply patch.
|
|
#
|
|
# === Parameters
|
|
#
|
|
# $name:
|
|
# Destination directory.
|
|
# $source:
|
|
# Patch file.
|
|
# $strip:
|
|
# Remove the specified number of leading path elements.
|
|
# Defaults to 0.
|
|
#
|
|
# === Sample usage
|
|
#
|
|
# util::patch { "/usr/local/src/moin-1.8.8":
|
|
# strip => 1,
|
|
# source => "/usr/local/src/moin.patch",
|
|
# }
|
|
#
|
|
define util::patch($source, $strip=0) {
|
|
|
|
include util::patch::package
|
|
|
|
exec { "patch-${name}-${source}":
|
|
path => "/bin:/usr/bin:/sbin:/usr/sbin",
|
|
cwd => $name,
|
|
command => "patch -N -b -t -p${strip} < ${source}",
|
|
onlyif => "patch --dry-run -N -b -t -p${strip} < ${source}",
|
|
require => Class["util::patch::package"],
|
|
}
|
|
|
|
}
|