#!/bin/sh -e # # 2012-2016 Steven Armstrong (steven-cdist at armstrong.cc) # 2016 Carlos Ortigoza (carlos.ortigoza at ungleich.ch) # 2016 Nico Schottelius (nico.schottelius at ungleich.ch) # 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.ch) # # 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 . # # # Configure system-wide locale by modifying i18n file. # key=$__object_id onchange_cmd= # none, by default quote_value=false catval() { # shellcheck disable=SC2059 printf "$($quote_value && echo '"%s"' || echo '%s')" "$(cat "$1")" } os=$(cat "$__global/explorer/os") case $os in debian) os_version=$(cat "${__global}/explorer/os_version") if expr "${os_version}" '>=' 4 >/dev/null then # Debian 4 (etch) and later locale_conf="/etc/default/locale" else locale_conf="/etc/environment" fi ;; devuan) locale_conf="/etc/default/locale" ;; ubuntu) os_version=$(cat "${__global}/explorer/os_version") if expr "${os_version}" '>=' 6.10 >/dev/null then # Ubuntu 6.10 (edgy) and later locale_conf="/etc/default/locale" else locale_conf="/etc/environment" fi ;; archlinux) locale_conf="/etc/locale.conf" ;; centos|redhat|scientific) # shellcheck source=/dev/null version_id=$(. "${__global}/explorer/os_release" && echo "${VERSION_ID:-0}") if expr "${version_id}" '>=' 7 >/dev/null then locale_conf="/etc/locale.conf" else locale_conf="/etc/sysconfig/i18n" fi ;; fedora) # shellcheck source=/dev/null version_id=$(. "${__global}/explorer/os_release" && echo "${VERSION_ID:-0}") if expr "${version_id}" '>=' 18 >/dev/null then locale_conf="/etc/locale.conf" quote_value=false else locale_conf="/etc/sysconfig/i18n" fi ;; gentoo) case $(cat "${__global}/explorer/init") in (*openrc*) locale_conf="/etc/env.d/02locale" onchange_cmd="env-update --no-ldconfig" quote_value=true ;; (systemd) locale_conf="/etc/locale.conf" ;; esac ;; suse) os_version=$(cat "${__global}/explorer/os_version") os_major=$(expr "${os_version}" : '\([0-9]\{1,\}\)') # https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-suse.html#sec-suse-l10n if expr "${os_major}" '>=' 15 \& "${os_major}" != 42 then # It seems that starting with SuSE 15 the systemd /etc/locale.conf # is the preferred way to set locales, although # /etc/sysconfig/language is still available. # Older documentation doesn't mention /etc/locale.conf, even though # is it created when localectl is used. locale_conf="/etc/locale.conf" else locale_conf="/etc/sysconfig/language" quote_value=true key="RC_${__object_id}" fi ;; voidlinux) locale_conf="/etc/locale.conf" ;; *) echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 echo "Please contribute an implementation for it if you can." >&2 exit 1 ;; esac __file "${locale_conf}" --state exists --owner root --group root --mode 0644 require="__file/${locale_conf}" \ __key_value "${locale_conf}:${key}" \ --file "${locale_conf}" \ --key "${key}" \ --delimiter '=' --exact_delimiter \ --state "$(cat "${__object}/parameter/state")" \ --value "$(catval "${__object}/parameter/value")" \ --onchange "${onchange_cmd}"