From 8ed6fb29b46bbac3f28adc0d0918a71b6a694322 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 10 Aug 2016 00:07:27 +0200 Subject: [PATCH] Add pacman configuration --- .gitmodules | 3 + modules/base_configuration/manifests/init.pp | 9 ++ modules/pacman/manifests/config.pp | 77 +++++++++++++ modules/pacman/manifests/init.pp | 55 ++++++++++ modules/pacman/manifests/install.pp | 13 +++ modules/pacman/manifests/params.pp | 41 +++++++ modules/pacman/manifests/repo.pp | 21 ++++ .../templates/pacman.conf.customrepo.erb | 6 + modules/pacman/templates/pacman.conf.main.erb | 103 ++++++++++++++++++ modules/pacman/templates/pacman.conf.repo.erb | 15 +++ 10 files changed, 343 insertions(+) create mode 100644 modules/pacman/manifests/config.pp create mode 100644 modules/pacman/manifests/init.pp create mode 100644 modules/pacman/manifests/install.pp create mode 100644 modules/pacman/manifests/params.pp create mode 100644 modules/pacman/manifests/repo.pp create mode 100644 modules/pacman/templates/pacman.conf.customrepo.erb create mode 100644 modules/pacman/templates/pacman.conf.main.erb create mode 100644 modules/pacman/templates/pacman.conf.repo.erb diff --git a/.gitmodules b/.gitmodules index b4b4ba5..3a8bbe0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "modules/puppetlabs_concat"] path = modules/concat url = https://github.com/puppetlabs/puppetlabs-concat.git +[submodule "modules/pacman"] + path = modules/pacman + url = https://github.com/aboe76/puppet-pacman.git diff --git a/modules/base_configuration/manifests/init.pp b/modules/base_configuration/manifests/init.pp index 4c6ca1e..dca17b3 100644 --- a/modules/base_configuration/manifests/init.pp +++ b/modules/base_configuration/manifests/init.pp @@ -49,4 +49,13 @@ class base_configuration ( 'Subsystem' => 'sftp /usr/lib/openssh/sftp-server', } } + + class { 'pacman': + color => true, + } + + pacman::repo { 'multilib': + order => 15, + include => '/etc/pacman.d/mirrorlist' + } } diff --git a/modules/pacman/manifests/config.pp b/modules/pacman/manifests/config.pp new file mode 100644 index 0000000..9bd22be --- /dev/null +++ b/modules/pacman/manifests/config.pp @@ -0,0 +1,77 @@ +# Class: pacman::config +# +# This module manages pacman config file +# +# Parameters: +# $config = '/etc/pacman.conf' +# +# Actions: +# with the use of concat it will build a pacman config file +# which is extendable with the class pacman::repo +# +# Requires: see Modulefile +# +# Sample Usage: +# +class pacman::config ( + $config = $pacman::config, + # pacman config options + $rootdir = $pacman::rootdir, + $dbpath = $pacman::dbpath, + $cachedir = $pacman::cachedir, + $logfile = $pacman::logfile, + $gpgdir = $pacman::gpgdir, + $holdpkg = $pacman::holdpkg, + $xfercommand = $pacman::xfercommand, + $cleanmethod = $pacman::cleanmethod, + $usedelta = $pacman::usedelta, + $architecture = $pacman::architecture, + # pacman package options + $ignorepkg = $pacman::ignorepkg, + $noupgrade = $pacman::noupgrade, + $noextract = $pacman::noextract, + # pacman misc options + $usesyslog = $pacman::usesyslog, + $color = $pacman::color, + $totaldownload = $pacman::totaldownload, + $checkspace = $pacman::checkspace, + $verbosepkglist = $pacman::verbosepkglist, + # pacman sec options + $mainsiglevel = $pacman::mainsiglevel, + $localfilesiglevel = $pacman::localfilesiglevel, + $remotefilesiglevel = $pacman::remotefilesiglevel,) inherits pacman { + concat { $config: + ensure_newline => true, + owner => 0, + group => 0, + mode => '0644', + } + + concat::fragment { 'main': + target => $config, + content => template('pacman/pacman.conf.main.erb'), + order => 00 + } + + pacman::repo { 'core': + include => '/etc/pacman.d/mirrorlist', + order => 10, + } + + pacman::repo { 'extra': + include => '/etc/pacman.d/mirrorlist', + order => 11, + } + + pacman::repo { 'community': + include => '/etc/pacman.d/mirrorlist', + order => 12, + } + + concat::fragment { 'custom': + target => $config, + content => template('pacman/pacman.conf.customrepo.erb'), + order => 15 + } + +} diff --git a/modules/pacman/manifests/init.pp b/modules/pacman/manifests/init.pp new file mode 100644 index 0000000..731f371 --- /dev/null +++ b/modules/pacman/manifests/init.pp @@ -0,0 +1,55 @@ +# Class: pacman +# +# This module manages pacman +# +# Parameters: +# $config = '/etc/pacman.conf' +# $config_template = 'pacman/pacman.conf.archlinux.erb' +# $package_name = ['pacman'] +# +# Actions: +# +# Requires: see Modulefile +# +# Sample Usage: +# +class pacman ( + $config = $pacman::params::config, + $package_ensure = $pacman::params::package_ensure, + $package_name = $pacman::params::package_name, + # pacman config options + $rootdir = $pacman::params::rootdir, + $dbpath = $pacman::params::dbpath, + $cachedir = $pacman::params::cachedir, + $logfile = $pacman::params::logfile, + $gpgdir = $pacman::params::gpgdir, + $holdpkg = $pacman::params::holdpkg, + $xfercommand = $pacman::params::xfercommand, + $cleanmethod = $pacman::params::cleanmethod, + $usedelta = $pacman::params::usedelta, + $architecture = $pacman::params::architecture, + # pacman package options + $ignorepkg = $pacman::params::ignorepkg, + $noupgrade = $pacman::params::noupgrade, + $noextract = $pacman::params::noextract, + # pacman misc options + $usesyslog = $pacman::params::usesyslog, + $color = $pacman::params::color, + $totaldownload = $pacman::params::totaldownload, + $checkspace = $pacman::params::checkspace, + $verbosepkglist = $pacman::params::verbosepkglist, + # pacman sec options + $mainsiglevel = $pacman::params::mainsiglevel, + $localfilesiglevel = $pacman::params::localfilesiglevel, + $remotefilesiglevel = $pacman::params::remotefilesiglevel,) inherits +pacman::params { + include '::pacman::install' + include '::pacman::config' + + anchor { 'pacman::begin': } + + anchor { 'pacman::end': } + + Anchor['pacman::begin'] -> Class['::pacman::install'] -> Class['::pacman::config' + ] -> Anchor['pacman::end'] +} diff --git a/modules/pacman/manifests/install.pp b/modules/pacman/manifests/install.pp new file mode 100644 index 0000000..02b3128 --- /dev/null +++ b/modules/pacman/manifests/install.pp @@ -0,0 +1,13 @@ +# Class: pacman::install +# +# This class ensures pacman is installed +# +class pacman::install ( + $package_ensure = $pacman::package_ensure, + $package_name = $pacman::package_name,) inherits pacman { + package { 'pacman': + ensure => $package_ensure, + name => $package_name, + } + +} diff --git a/modules/pacman/manifests/params.pp b/modules/pacman/manifests/params.pp new file mode 100644 index 0000000..b8b9e1c --- /dev/null +++ b/modules/pacman/manifests/params.pp @@ -0,0 +1,41 @@ +# Class: pacman::params +# +class pacman::params { + case $::osfamily { + 'Archlinux' : { + $package_ensure = 'present' + $package_name = 'pacman' + $config = '/etc/pacman.conf' + # pacman config options + $rootdir = '/' + $dbpath = '/var/lib/pacman' + $cachedir = '/var/cache/pacman/pkg' + $logfile = '/var/log/pacman.log' + $gpgdir = '/etc/pacman.d/gnupg/' + $holdpkg = 'pacman glibc' + $xfercommand = '/usr/bin/curl -C - -f %u > %o' + $cleanmethod = 'KeepInstalled' + $usedelta = '0.7' + $architecture = 'auto' + # pacman package options + $ignorepkg = undef + $noupgrade = undef + $noextract = undef + # pacman misc options + $usesyslog = false + $color = false + $totaldownload = false + $checkspace = true + $verbosepkglist = false + # pacman sec options + $mainsiglevel = 'Required DatabaseOptional' + $localfilesiglevel = 'Optional' + $remotefilesiglevel = 'Required' + } + + default : { + fail("The ${module_name} module is not supported + on an ${::osfamily} based system.") + } + } +} diff --git a/modules/pacman/manifests/repo.pp b/modules/pacman/manifests/repo.pp new file mode 100644 index 0000000..02dc4ec --- /dev/null +++ b/modules/pacman/manifests/repo.pp @@ -0,0 +1,21 @@ +# This resource manages an individual repo's that applies to the file defined in +# $target. See README.md for more details. +# always order from 100 and increase. +define pacman::repo ( + $server = undef, + $include = undef, + $description = undef, + $siglevel = undef, + $order = '100', + # Needed for testing primarily, support for multiple files is not really + # working. + $target = $pacman::config::config) { + # Create a rule fragment + $fragname = "repo_${name}" + + concat::fragment { $fragname: + target => $target, + content => template('pacman/pacman.conf.repo.erb'), + order => $order, + } +} diff --git a/modules/pacman/templates/pacman.conf.customrepo.erb b/modules/pacman/templates/pacman.conf.customrepo.erb new file mode 100644 index 0000000..91e66fe --- /dev/null +++ b/modules/pacman/templates/pacman.conf.customrepo.erb @@ -0,0 +1,6 @@ + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/modules/pacman/templates/pacman.conf.main.erb b/modules/pacman/templates/pacman.conf.main.erb new file mode 100644 index 0000000..2c2df5b --- /dev/null +++ b/modules/pacman/templates/pacman.conf.main.erb @@ -0,0 +1,103 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +RootDir = <%= @rootdir %> + +#DBPath = /var/lib/pacman/ +DBPath = <%= @dbpath %> + +#CacheDir = /var/cache/pacman/pkg/ +CacheDir = <%= @cachedir %> + +#LogFile = /var/log/pacman.log +LogFile = <%= @logfile %> + +#GPGDir = /etc/pacman.d/gnupg/ +GPGDir = <%= @gpgdir %> + +#HoldPkg = pacman glibc +HoldPkg = <%= @holdpkg %> + +#XferCommand = /usr/bin/curl -C - -f %u > %o +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +XferCommand = <%= @xfercommand %> + +#CleanMethod = KeepInstalled +CleanMethod = <%= @cleanmethod %> + +#UseDelta = 0.7 +UseDelta = <%= @usedelta %> + +#Architecture = auto +Architecture = <%= @architecture %> + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +IgnorePkg = <%= @ignorepkg %> +IgnoreGroup = <%= @ignoregroup %> + +NoUpgrade = <%= @noupgrade %> +NoExtract = <%= @noextract %> + +# Misc options +#UseSyslog +<% if @usesyslog -%> +UseSyslog +<% end -%> +#color +<% if @color -%> +Color +<% end -%> +#TotalDownload +<% if @totaldownload -%> +TotalDownload +<% end -%> +#CheckSpace +<% if @checkspace -%> +CheckSpace +<% end -%> +#VerbosePkgLists +<% if @verbosepkglist -%> +VerbosePkgLists +<% end -%> + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = <%= @mainsiglevel %> +LocalFileSigLevel = <%= @localfilesiglevel %> +RemoteFileSigLevel = <%= @remotefilesiglevel %> + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. diff --git a/modules/pacman/templates/pacman.conf.repo.erb b/modules/pacman/templates/pacman.conf.repo.erb new file mode 100644 index 0000000..8038c47 --- /dev/null +++ b/modules/pacman/templates/pacman.conf.repo.erb @@ -0,0 +1,15 @@ + +[<%= @name %>] +<% if @description -%> +# Description: <%= @description %> +<% end -%> +# Order: <%= @order %> +<%if @siglevel -%> +SigLevel = <%= @siglevel %> +<% end -%> +<%if @server -%> +Server = <%= @server %> +<% end -%> +<%if @include -%> +Include = <%= @include%> +<% end -%> -- 2.41.0