From f848bac6072f99e1cd60a0cc0b84e5679c598dab Mon Sep 17 00:00:00 2001 From: Jeff Wallace Date: Tue, 27 Apr 2010 16:38:28 -0400 Subject: [PATCH] First commit --- README.md | 50 ++++++++++++++++++++++++++++++++++++ manifests/debian/testing.pp | 21 +++++++++++++++ manifests/debian/unstable.pp | 21 +++++++++++++++ manifests/force.pp | 16 ++++++++++++ manifests/init.pp | 27 +++++++++++++++++++ manifests/pin.pp | 20 +++++++++++++++ manifests/ppa.pp | 13 ++++++++++ manifests/release.pp | 14 ++++++++++ manifests/source.pp | 50 ++++++++++++++++++++++++++++++++++++ templates/source.list.erb | 5 ++++ 10 files changed, 237 insertions(+) create mode 100644 README.md create mode 100644 manifests/debian/testing.pp create mode 100644 manifests/debian/unstable.pp create mode 100644 manifests/force.pp create mode 100644 manifests/init.pp create mode 100644 manifests/pin.pp create mode 100644 manifests/ppa.pp create mode 100644 manifests/release.pp create mode 100644 manifests/source.pp create mode 100644 templates/source.list.erb diff --git a/README.md b/README.md new file mode 100644 index 0000000..d5aef2d --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# Apt module for Puppet + +## Description +Provides helpful definitions for dealing with Apt. + +## Usage + +### apt::force +Force a package to be installed from a specific release. Useful when using repositoires like Debian unstable in Ubuntu. +
+apt::force { "glusterfs-server":
+	release => "unstable",
+	version => '3.0.3',
+	require => Apt::Source["debian_unstable"],
+}
+
+ +### apt::pin +Add an apt pin for a certain release. +
+apt::pin { "karmic": priority => 700 }
+apt::pin { "karmic-updates": priority => 700 }
+apt::pin { "karmic-security": priority => 700 }
+
+ +### apt::ppa +Add a ppa repository using `add-apt-repository`. Somewhat experimental. +
+apt::ppa { "ppa:drizzle-developers/ppa" }
+
+ +### apt::release +Set the default apt release. Useful when using repositoires like Debian unstable in Ubuntu. +
+apt::release { "karmic": }
+
+ +## apt::source +Add an apt source to `/etc/apt/sources.list.d/`. +
+apt::source { "debian_unstable":
+	location => "http://debian.mirror.iweb.ca/debian/",
+	release => "unstable",
+	repos => "main contrib non-free",
+	required_packages => "debian-keyring debian-archive-keyring",
+	key => "55BE302B",
+	key_server => "subkeys.pgp.net",
+	pin => "-10"
+}
+
diff --git a/manifests/debian/testing.pp b/manifests/debian/testing.pp new file mode 100644 index 0000000..8f37bd5 --- /dev/null +++ b/manifests/debian/testing.pp @@ -0,0 +1,21 @@ +# testing.pp + +class apt::debian::testing { + + # deb http://debian.mirror.iweb.ca/debian/ testing main contrib non-free + # deb-src http://debian.mirror.iweb.ca/debian/ testing main contrib non-free + # Key: 55BE302B Server: subkeys.pgp.net + # debian-keyring + # debian-archive-keyring + + apt::source { "debian_testing": + location => "http://debian.mirror.iweb.ca/debian/", + release => "testing", + repos => "main contrib non-free", + required_packages => "debian-keyring debian-archive-keyring", + key => "55BE302B", + key_server => "subkeys.pgp.net", + pin => "-10" + } + +} diff --git a/manifests/debian/unstable.pp b/manifests/debian/unstable.pp new file mode 100644 index 0000000..d0dd1ce --- /dev/null +++ b/manifests/debian/unstable.pp @@ -0,0 +1,21 @@ +# unstable.pp + +class apt::debian::unstable { + + # deb http://debian.mirror.iweb.ca/debian/ unstable main contrib non-free + # deb-src http://debian.mirror.iweb.ca/debian/ unstable main contrib non-free + # Key: 55BE302B Server: subkeys.pgp.net + # debian-keyring + # debian-archive-keyring + + apt::source { "debian_unstable": + location => "http://debian.mirror.iweb.ca/debian/", + release => "unstable", + repos => "main contrib non-free", + required_packages => "debian-keyring debian-archive-keyring", + key => "55BE302B", + key_server => "subkeys.pgp.net", + pin => "-10" + } + +} diff --git a/manifests/force.pp b/manifests/force.pp new file mode 100644 index 0000000..e56246b --- /dev/null +++ b/manifests/force.pp @@ -0,0 +1,16 @@ +# force.pp +# force a package from a specific release + +define apt::force( + $release = 'testing', + $version = false +) { + + exec { "aptitude -y -t ${release} install ${name}": + unless => $version ? { + false => "dpkg -l | grep ${name}", + default => "dpkg -l | grep ${name} | grep ${version}" + } + } + +} diff --git a/manifests/init.pp b/manifests/init.pp new file mode 100644 index 0000000..f7b7746 --- /dev/null +++ b/manifests/init.pp @@ -0,0 +1,27 @@ +# apt.pp + +class apt { + $root = '/etc/apt' + $provider = 'apt-get' + + file { "sources.list": + name => "${root}/sources.list", + ensure => present, + owner => root, + group => root, + mode => 644, + } + + file { "sources.list.d": + name => "${root}/sources.list.d", + ensure => directory, + owner => root, + group => root, + } + + exec { "apt_update": + command => "${provider} update", + subscribe => [ File["sources.list"], File["sources.list.d"] ], + refreshonly => true, + } +} diff --git a/manifests/pin.pp b/manifests/pin.pp new file mode 100644 index 0000000..5a9dae6 --- /dev/null +++ b/manifests/pin.pp @@ -0,0 +1,20 @@ +# pin.pp +# pin a release in apt, useful for unstable repositories + +define apt::pin( + $packages = '*', + $priority = 0 +) { + + include apt + + file { "${name}.pref": + name => "${apt::root}/preferences.d/${name}", + ensure => file, + owner => root, + group => root, + mode => 644, + content => "# ${name}\nPackage: ${packages}\nPin: release a=${name}\nPin-Priority: ${priority}", + } + +} diff --git a/manifests/ppa.pp b/manifests/ppa.pp new file mode 100644 index 0000000..e7ab361 --- /dev/null +++ b/manifests/ppa.pp @@ -0,0 +1,13 @@ +# ppa.pp + +define apt::ppa( + +) { + include apt + + exec { "add-apt-repository ${name}": + require => Package["python-software-properties"], + # TODO: unless => 'check' + } +} + diff --git a/manifests/release.pp b/manifests/release.pp new file mode 100644 index 0000000..294bb78 --- /dev/null +++ b/manifests/release.pp @@ -0,0 +1,14 @@ +# release.pp + +define apt::release ( + +) { + include apt + + file { "${apt::root}/apt.conf.d/01release": + owner => root, + group => root, + mode => 644, + content => "APT::Default-Release \"${name}\";" + } +} diff --git a/manifests/source.pp b/manifests/source.pp new file mode 100644 index 0000000..e9fa308 --- /dev/null +++ b/manifests/source.pp @@ -0,0 +1,50 @@ +# source.pp +# add an apt source + +define apt::source( + $location = '', + $release = 'karmic', + $repos = 'main', + $include_src = true, + $required_packages = false, + $key = false, + $key_server = 'keyserver.ubuntu.com', + $pin = false +) { + + include apt + + file { "${name}.list": + name => "${apt::root}/sources.list.d/${name}.list", + ensure => file, + owner => root, + group => root, + mode => 644, + content => template("apt/source.list.erb"), + } + + if $pin != false { + apt::pin { "${release}": priority => "${pin}" } + } + + exec { "${name} apt update": + command => "${apt::provider} update", + subscribe => File["${name}.list"], + refreshonly => true, + } + + if $required_packages != false { + exec { "${apt::provider} -y install ${required_packages}": + subscribe => File["${name}.list"], + refreshonly => true, + } + } + + if $key != false { + exec { "apt-key adv --keyserver ${key_server} --recv-keys ${key}": + unless => "apt-key list | grep ${key}", + before => File["${name}.list"], + } + } + +} diff --git a/templates/source.list.erb b/templates/source.list.erb new file mode 100644 index 0000000..3452691 --- /dev/null +++ b/templates/source.list.erb @@ -0,0 +1,5 @@ +# <%= name %> +deb <%= location %> <%= release %> <%= repos %> +<%- if include_src then -%> +deb-src <%= location %> <%= release %> <%= repos %> +<%- end -%> -- 2.32.3