From a5169ad858a4d6e9c378184db5736f55a86306e0 Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Thu, 10 Dec 2020 21:24:26 +0100 Subject: [PATCH 1/7] new type __debian_backports This new type will setup the backports distribution for the current Debian release. --- cdist/conf/type/__debian_backports/man.rst | 90 +++++++++++++++++++ cdist/conf/type/__debian_backports/manifest | 59 ++++++++++++ .../parameter/default/mirror | 1 + .../parameter/default/state | 1 + .../__debian_backports/parameter/optional | 2 + cdist/conf/type/__debian_backports/singleton | 0 6 files changed, 153 insertions(+) create mode 100644 cdist/conf/type/__debian_backports/man.rst create mode 100755 cdist/conf/type/__debian_backports/manifest create mode 100644 cdist/conf/type/__debian_backports/parameter/default/mirror create mode 100644 cdist/conf/type/__debian_backports/parameter/default/state create mode 100644 cdist/conf/type/__debian_backports/parameter/optional create mode 100644 cdist/conf/type/__debian_backports/singleton diff --git a/cdist/conf/type/__debian_backports/man.rst b/cdist/conf/type/__debian_backports/man.rst new file mode 100644 index 00000000..ba353f4e --- /dev/null +++ b/cdist/conf/type/__debian_backports/man.rst @@ -0,0 +1,90 @@ +cdist-type__debian_backports(7) +=============================== + +NAME +---- +cdist-type__debian_backports - Install backports for Debain systems + + +DESCRIPTION +----------- +This singleton type installs backports for the current Debian version. +It aborts if backports are not supported for the specified os or no +version codename could be fetched (like Debian unstable). + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + Represents the state of the backports repository. ``present`` or + ``absent``, defaults to ``present``. + + Will be directly passed to :strong:`cdist-type__apt_source`\ (7). + +mirror + The mirror to fetch the backports from. Will defaults to the Debian default + ``_. + + Will be directly passed to :strong:`cdist-type__apt_source`\ (7). + + +BOOLEAN PARAMETERS +------------------ +None. + + +MESSAGES +-------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # setup the backports + __debian_backports + __debian_backports --state absent + __debian_backports --state present --mirror "http://ftp.de.debian.org/debian/" + + # update + require="__debian_backports" __apt_update_index + + # install a backports package + # currently for the buster release backports + require="__apt_update_index" __package_apt wireguard \ + --target-release buster-backports + + +ABORTS +------ +Aborts if the detected os is not Debian. + +Aborts if no distribuition codename could be detected. This is common for the +unstable distribution, but there is no backports repository for it already. + + +SEE ALSO +-------- +`Official Debian Backports site `_ + +:strong:`cdist-type__apt_source`\ (7) + + +AUTHORS +------- +Matthias Stecher + + +COPYING +------- +Copyright \(C) 2020 Matthias Stecher. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/cdist/conf/type/__debian_backports/manifest b/cdist/conf/type/__debian_backports/manifest new file mode 100755 index 00000000..29bf9a43 --- /dev/null +++ b/cdist/conf/type/__debian_backports/manifest @@ -0,0 +1,59 @@ +#!/bin/sh -e +# __debian_backports/manifest +# +# 2020 Matthias Stecher (matthiasstecher at gmx.de) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Enables/disables backports repository. Utilies __apt_source for it. +# + + +# detect backport distribution +os="$(cat "$__global/explorer/os")" +case "$os" in + debian) + # distribution codename from /etc/os-release + # lsb_release may not be given in all debian installations + dist="$( + . "$__global/explorer/os-release" + printf "%s" "$VERSION_CODENAME" + )" + ;; + *) + printf "Backports for %s are not supported!\n" "$os" >&2 + exit 1 + ;; +esac + +# error if no codename given (e.g. on Debian unstable) +if [ -z "$dist" ]; then + printf "No backports for unkown version of distribution %s!\n" "$os" >&2 + exit 1 +fi + + +# parameters +state="$(cat "$__object/parameter/state")" +mirror="$(cat "$__object/parameter/mirror")" + +# install the given backports repository +__apt_source "${dist}-backports" \ + --state "$state" \ + --distribution "${dist}-backports" \ + --component main \ + --uri "$mirror" diff --git a/cdist/conf/type/__debian_backports/parameter/default/mirror b/cdist/conf/type/__debian_backports/parameter/default/mirror new file mode 100644 index 00000000..0965ef04 --- /dev/null +++ b/cdist/conf/type/__debian_backports/parameter/default/mirror @@ -0,0 +1 @@ +http://deb.debian.org/debian/ diff --git a/cdist/conf/type/__debian_backports/parameter/default/state b/cdist/conf/type/__debian_backports/parameter/default/state new file mode 100644 index 00000000..e7f6134f --- /dev/null +++ b/cdist/conf/type/__debian_backports/parameter/default/state @@ -0,0 +1 @@ +present diff --git a/cdist/conf/type/__debian_backports/parameter/optional b/cdist/conf/type/__debian_backports/parameter/optional new file mode 100644 index 00000000..4b05c235 --- /dev/null +++ b/cdist/conf/type/__debian_backports/parameter/optional @@ -0,0 +1,2 @@ +state +mirror diff --git a/cdist/conf/type/__debian_backports/singleton b/cdist/conf/type/__debian_backports/singleton new file mode 100644 index 00000000..e69de29b From 0d96b31b5696f95b559450e17c71914d0746c0ce Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Fri, 11 Dec 2020 18:13:44 +0100 Subject: [PATCH 2/7] __debian_backports: pass shellcheck for sourced file Because the sourced explorer can't be detected by shellcheck, it will be completely disabled. Changing the path to /etc/os-release isn't deterministic either. The shellcheck wiki page suggests to use `source=/dev/null` instead of `disable=SC1090`, but it was choosen to completely avoid that check .. --- cdist/conf/type/__debian_backports/manifest | 1 + 1 file changed, 1 insertion(+) diff --git a/cdist/conf/type/__debian_backports/manifest b/cdist/conf/type/__debian_backports/manifest index 29bf9a43..661e5281 100755 --- a/cdist/conf/type/__debian_backports/manifest +++ b/cdist/conf/type/__debian_backports/manifest @@ -30,6 +30,7 @@ case "$os" in # distribution codename from /etc/os-release # lsb_release may not be given in all debian installations dist="$( + # shellcheck disable=SC1090 . "$__global/explorer/os-release" printf "%s" "$VERSION_CODENAME" )" From c4d19a23193ec13eda96a3d7536ba338d0801825 Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Sat, 12 Dec 2020 09:36:17 +0100 Subject: [PATCH 3/7] __debian_backports -> __apt_backports; add wider os support As discussed in the chat, this type now supports a broader list of OSes which it supports backports for. Because of this, it was renamed to something more generic. "apt" should fit in. --- .../man.rst | 27 ++++++++---- .../manifest | 41 ++++++++++++++----- .../parameter/default/state | 0 .../parameter/optional | 0 .../singleton | 0 .../parameter/default/mirror | 1 - 6 files changed, 49 insertions(+), 20 deletions(-) rename cdist/conf/type/{__debian_backports => __apt_backports}/man.rst (66%) rename cdist/conf/type/{__debian_backports => __apt_backports}/manifest (59%) rename cdist/conf/type/{__debian_backports => __apt_backports}/parameter/default/state (100%) rename cdist/conf/type/{__debian_backports => __apt_backports}/parameter/optional (100%) rename cdist/conf/type/{__debian_backports => __apt_backports}/singleton (100%) delete mode 100644 cdist/conf/type/__debian_backports/parameter/default/mirror diff --git a/cdist/conf/type/__debian_backports/man.rst b/cdist/conf/type/__apt_backports/man.rst similarity index 66% rename from cdist/conf/type/__debian_backports/man.rst rename to cdist/conf/type/__apt_backports/man.rst index ba353f4e..7d269fbb 100644 --- a/cdist/conf/type/__debian_backports/man.rst +++ b/cdist/conf/type/__apt_backports/man.rst @@ -3,13 +3,13 @@ cdist-type__debian_backports(7) NAME ---- -cdist-type__debian_backports - Install backports for Debain systems +cdist-type__apt_backports - Install backports DESCRIPTION ----------- -This singleton type installs backports for the current Debian version. -It aborts if backports are not supported for the specified os or no +This singleton type installs backports for the current OS release. +It aborts if backports are not supported for the specified OS or no version codename could be fetched (like Debian unstable). @@ -27,8 +27,8 @@ state Will be directly passed to :strong:`cdist-type__apt_source`\ (7). mirror - The mirror to fetch the backports from. Will defaults to the Debian default - ``_. + The mirror to fetch the backports from. Will defaults to the generic + mirror of the current OS. Will be directly passed to :strong:`cdist-type__apt_source`\ (7). @@ -49,12 +49,12 @@ EXAMPLES .. code-block:: sh # setup the backports - __debian_backports - __debian_backports --state absent - __debian_backports --state present --mirror "http://ftp.de.debian.org/debian/" + __apt_backports + __apt_backports --state absent + __apt_backports --state present --mirror "http://ftp.de.debian.org/debian/" # update - require="__debian_backports" __apt_update_index + require="__apt_backports" __apt_update_index # install a backports package # currently for the buster release backports @@ -70,6 +70,15 @@ Aborts if no distribuition codename could be detected. This is common for the unstable distribution, but there is no backports repository for it already. +CAVEATS +------- +For Ubuntu, it setup all componenents for the backports repository: ``main``, +``restricted``, ``universe`` and ``multiverse``. The user may not want to +install proprietary packages, which will only be installed if the user +explicitly uses the backports target-release. The user may change this behavior +to install backports packages without the need of explicitly select it. + + SEE ALSO -------- `Official Debian Backports site `_ diff --git a/cdist/conf/type/__debian_backports/manifest b/cdist/conf/type/__apt_backports/manifest similarity index 59% rename from cdist/conf/type/__debian_backports/manifest rename to cdist/conf/type/__apt_backports/manifest index 661e5281..e5358dea 100755 --- a/cdist/conf/type/__debian_backports/manifest +++ b/cdist/conf/type/__apt_backports/manifest @@ -1,5 +1,5 @@ #!/bin/sh -e -# __debian_backports/manifest +# __apt_backports/manifest # # 2020 Matthias Stecher (matthiasstecher at gmx.de) # @@ -23,18 +23,34 @@ # +# Get the distribution codename by /etc/os-release. +# is already executed in a subshell by string substitution +# lsb_release may not be given in all installations +codename_os_release() { + # shellcheck disable=SC1090 + . "$__global/explorer/os-release" + printf "%s" "$VERSION_CODENAME" +} + # detect backport distribution os="$(cat "$__global/explorer/os")" case "$os" in debian) - # distribution codename from /etc/os-release - # lsb_release may not be given in all debian installations - dist="$( - # shellcheck disable=SC1090 - . "$__global/explorer/os-release" - printf "%s" "$VERSION_CODENAME" - )" + dist="$( codename_os_release )" + components="main" + mirror="http://deb.debian.org/debian/" ;; + devuan) + dist="$( codename_os_release )" + components="main" + mirror="http://deb.devuan.org/merged" + ;; + ubuntu) + dist="$( codename_os_release )" + components="main restricted universe multiverse" + mirror="http://archive.ubuntu.com/ubuntu" + ;; + *) printf "Backports for %s are not supported!\n" "$os" >&2 exit 1 @@ -50,11 +66,16 @@ fi # parameters state="$(cat "$__object/parameter/state")" -mirror="$(cat "$__object/parameter/mirror")" + +# mirror already set for the os, only override user-values +if [ -f "$__object/parameter/mirror" ]; then + mirror="$(cat "$__object/parameter/mirror")" +fi + # install the given backports repository __apt_source "${dist}-backports" \ --state "$state" \ --distribution "${dist}-backports" \ - --component main \ + --component "$components" \ --uri "$mirror" diff --git a/cdist/conf/type/__debian_backports/parameter/default/state b/cdist/conf/type/__apt_backports/parameter/default/state similarity index 100% rename from cdist/conf/type/__debian_backports/parameter/default/state rename to cdist/conf/type/__apt_backports/parameter/default/state diff --git a/cdist/conf/type/__debian_backports/parameter/optional b/cdist/conf/type/__apt_backports/parameter/optional similarity index 100% rename from cdist/conf/type/__debian_backports/parameter/optional rename to cdist/conf/type/__apt_backports/parameter/optional diff --git a/cdist/conf/type/__debian_backports/singleton b/cdist/conf/type/__apt_backports/singleton similarity index 100% rename from cdist/conf/type/__debian_backports/singleton rename to cdist/conf/type/__apt_backports/singleton diff --git a/cdist/conf/type/__debian_backports/parameter/default/mirror b/cdist/conf/type/__debian_backports/parameter/default/mirror deleted file mode 100644 index 0965ef04..00000000 --- a/cdist/conf/type/__debian_backports/parameter/default/mirror +++ /dev/null @@ -1 +0,0 @@ -http://deb.debian.org/debian/ From 49aec0b5e40ba05e7703565731aae6b0a9e5936a Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Sat, 12 Dec 2020 09:40:47 +0100 Subject: [PATCH 4/7] __apt_backports: list supported OSes The manpage now lists all OSes where this type supports backports. --- cdist/conf/type/__apt_backports/man.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cdist/conf/type/__apt_backports/man.rst b/cdist/conf/type/__apt_backports/man.rst index 7d269fbb..fd311361 100644 --- a/cdist/conf/type/__apt_backports/man.rst +++ b/cdist/conf/type/__apt_backports/man.rst @@ -12,6 +12,12 @@ This singleton type installs backports for the current OS release. It aborts if backports are not supported for the specified OS or no version codename could be fetched (like Debian unstable). +It supports backports from following OSes: + +- Debian +- Devuan +- Ubuntu + REQUIRED PARAMETERS ------------------- From fafa3d9ea55f38ae0a350a463d64b7ef1d70c7bb Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Sat, 12 Dec 2020 10:00:23 +0100 Subject: [PATCH 5/7] __apt_backports: update index if required This type now automatically calls the type __apt_update_index to update the package index if something changed. --- cdist/conf/type/__apt_backports/man.rst | 13 +++++++------ cdist/conf/type/__apt_backports/manifest | 5 ++++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cdist/conf/type/__apt_backports/man.rst b/cdist/conf/type/__apt_backports/man.rst index fd311361..c578ce6b 100644 --- a/cdist/conf/type/__apt_backports/man.rst +++ b/cdist/conf/type/__apt_backports/man.rst @@ -9,8 +9,11 @@ cdist-type__apt_backports - Install backports DESCRIPTION ----------- This singleton type installs backports for the current OS release. -It aborts if backports are not supported for the specified OS or no -version codename could be fetched (like Debian unstable). +It aborts if backports are not supported for the specified OS or +no version codename could be fetched (like Debian unstable). + +The package index will be automatically updated by the type +:strong:`cdist-type__apt_update_index`\ (7) if required. It supports backports from following OSes: @@ -59,12 +62,9 @@ EXAMPLES __apt_backports --state absent __apt_backports --state present --mirror "http://ftp.de.debian.org/debian/" - # update - require="__apt_backports" __apt_update_index - # install a backports package # currently for the buster release backports - require="__apt_update_index" __package_apt wireguard \ + require="__apt_backports" __package_apt wireguard \ --target-release buster-backports @@ -90,6 +90,7 @@ SEE ALSO `Official Debian Backports site `_ :strong:`cdist-type__apt_source`\ (7) +:strong:`cdist-type__apt_update_index`\ (7) AUTHORS diff --git a/cdist/conf/type/__apt_backports/manifest b/cdist/conf/type/__apt_backports/manifest index e5358dea..c490a103 100755 --- a/cdist/conf/type/__apt_backports/manifest +++ b/cdist/conf/type/__apt_backports/manifest @@ -19,7 +19,7 @@ # along with cdist. If not, see . # # -# Enables/disables backports repository. Utilies __apt_source for it. +# Enables/disables backports repository. Utilises __apt_source for it. # @@ -79,3 +79,6 @@ __apt_source "${dist}-backports" \ --distribution "${dist}-backports" \ --component "$components" \ --uri "$mirror" + +# update the index if the source changed +require="__apt_source/${dist}-backports" __apt_update_index From fca35fc858d09fc649dc5e7f0964cef4af9e09f0 Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Sat, 12 Dec 2020 17:29:58 +0100 Subject: [PATCH 6/7] __apt_backports: fix explorer call s/-/_/ because the explorers are following an other convention :-) --- cdist/conf/type/__apt_backports/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__apt_backports/manifest b/cdist/conf/type/__apt_backports/manifest index c490a103..c2943725 100755 --- a/cdist/conf/type/__apt_backports/manifest +++ b/cdist/conf/type/__apt_backports/manifest @@ -28,7 +28,7 @@ # lsb_release may not be given in all installations codename_os_release() { # shellcheck disable=SC1090 - . "$__global/explorer/os-release" + . "$__global/explorer/os_release" printf "%s" "$VERSION_CODENAME" } From 27aca06fb893c84601e14bc30890ea6be9300dcd Mon Sep 17 00:00:00 2001 From: Matthias Stecher Date: Sat, 12 Dec 2020 17:34:51 +0100 Subject: [PATCH 7/7] __apt_backports: undo __apt_update_index call Becuase it is already done by __apt_source. --- cdist/conf/type/__apt_backports/man.rst | 4 +--- cdist/conf/type/__apt_backports/manifest | 3 --- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/cdist/conf/type/__apt_backports/man.rst b/cdist/conf/type/__apt_backports/man.rst index c578ce6b..7036fb84 100644 --- a/cdist/conf/type/__apt_backports/man.rst +++ b/cdist/conf/type/__apt_backports/man.rst @@ -12,8 +12,7 @@ This singleton type installs backports for the current OS release. It aborts if backports are not supported for the specified OS or no version codename could be fetched (like Debian unstable). -The package index will be automatically updated by the type -:strong:`cdist-type__apt_update_index`\ (7) if required. +The package index will be automatically updated if required. It supports backports from following OSes: @@ -90,7 +89,6 @@ SEE ALSO `Official Debian Backports site `_ :strong:`cdist-type__apt_source`\ (7) -:strong:`cdist-type__apt_update_index`\ (7) AUTHORS diff --git a/cdist/conf/type/__apt_backports/manifest b/cdist/conf/type/__apt_backports/manifest index c2943725..bc47d8de 100755 --- a/cdist/conf/type/__apt_backports/manifest +++ b/cdist/conf/type/__apt_backports/manifest @@ -79,6 +79,3 @@ __apt_source "${dist}-backports" \ --distribution "${dist}-backports" \ --component "$components" \ --uri "$mirror" - -# update the index if the source changed -require="__apt_source/${dist}-backports" __apt_update_index