From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6680759771290664960 X-Received: by 2002:a05:651c:152:: with SMTP id c18mr4444804ljd.15.1555485599198; Wed, 17 Apr 2019 00:19:59 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:c50a:: with SMTP id w10ls1820535lfe.1.gmail; Wed, 17 Apr 2019 00:19:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqwIYAjAoqoNxpf12oMpsB2G6Lvdiri32r9IalGWNNgnnnYFvw431/PkQUAOeEPl/RS2H0hP X-Received: by 2002:ac2:4190:: with SMTP id z16mr1677184lfh.6.1555485598657; Wed, 17 Apr 2019 00:19:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555485598; cv=none; d=google.com; s=arc-20160816; b=gi2RA5v/tyKT3zmeoGgZodR/IhErTs/RF8byD8KbGy0okTVnF4e6eR/DpGcJKv8YV0 LgNLaIMM6+VLPcbWWRON9ycohhksBUbKMoPknlcHba2U6ieiiDo0dAB9ESZSeSqaKLXT KMg0Ssf8hWXLW6sI+2lg0bFcHmjHIKOhorJ/pnIHjX23kG99b3g/HUtqgg3/tCXXheyF AOehkWyAje9DepQJD5C3ZPX+NyrpyKa3Z5DeHXnp24k5g7Udi5Pr9l/4Pjar/kQRlt94 L/JgyjZSkM0xw6rnwjv2+9kRMfSurhZi2XZzWx7ykDIFeNA/z5rbS5c+QZEuStV4xE6t AthQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=+1So7UCckZE/Wj/PSgMK5Lcky+TuHTJjWJEaEVlLFrE=; b=SxEdxRFCpuDRJV0JomhZANEkx0lCPnM2nmWkeoYpqK/5L3dHRWbnlQPSwtGAeSDRg3 ZWjVqw6DifLtWh2UFIN6KQhF0IbB42/WxnEmMYTjPihxENRMBHcyxm965LNjYwvbC/3i Qf2FRPOO7u1bND6X1no+bWoZ6xi95SOZbhLIvSMejnd0YMEu+mEGPMJxEdBKdgXLWm54 g56NLrY9gUAvoIgTmsiM3Bgphrn7F5o3jOYeo5IIdjfd8F84A//D/0al5joGq1OHtJJK DhgYXDhQ8kiIhFevi/SnJJF1Ai6mE91KL0TQvXHxRlO5M9wUJXHGKjcnWmx6SxfoX0QU gMdQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=claudius.heine.ext@siemens.com Return-Path: Received: from david.siemens.de (david.siemens.de. [192.35.17.14]) by gmr-mx.google.com with ESMTPS id n20si595919lfl.4.2019.04.17.00.19.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 00:19:58 -0700 (PDT) Received-SPF: pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.14 as permitted sender) client-ip=192.35.17.14; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=claudius.heine.ext@siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by david.siemens.de (8.15.2/8.15.2) with ESMTPS id x3H7JvsO005920 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 17 Apr 2019 09:19:57 +0200 Received: from ring.ppmd.siemens.net (linux-ses-ext02.ppmd.siemens.net [139.25.69.232]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id x3H7JtaN013048; Wed, 17 Apr 2019 09:19:56 +0200 From: claudius.heine.ext@siemens.com To: isar-users@googlegroups.com Cc: Claudius Heine Subject: [RFC PATCH 3/4] meta/classes: add image-locales-extension class Date: Wed, 17 Apr 2019 09:19:51 +0200 Message-Id: <20190417071952.6723-4-claudius.heine.ext@siemens.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190417071952.6723-1-claudius.heine.ext@siemens.com> References: <20190417071952.6723-1-claudius.heine.ext@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: +kNAS9uyuiB9 From: Claudius Heine This class allows to configure the locales of the image and also uses 'localepurge' to remove unwanted locales. Signed-off-by: Claudius Heine --- meta/classes/image-locales-extension.bbclass | 95 ++++++++++++++++++++ meta/classes/image.bbclass | 1 + meta/classes/rootfs.bbclass | 4 + 3 files changed, 100 insertions(+) create mode 100644 meta/classes/image-locales-extension.bbclass diff --git a/meta/classes/image-locales-extension.bbclass b/meta/classes/image-locales-extension.bbclass new file mode 100644 index 0000000..8600bbd --- /dev/null +++ b/meta/classes/image-locales-extension.bbclass @@ -0,0 +1,95 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2019 +# +# SPDX-License-Identifier: MIT +# +# This class extends the image.bbclass for setting locales and purging unneeded +# ones. + +LOCALE_GEN ?= "en_US.UTF-8 UTF-8\n\ + en_US ISO-8859-1\n" +LOCALE_DEFAULT ?= "en_US.UTF-8" + +def get_locale_gen(d, sep='\n'): + locale_gen = d.getVar("LOCALE_GEN", True) or "" + return sep.join(sorted(set(i.strip() + for i in locale_gen.split('\\n') + if i.strip()))) + +def get_nopurge(d): + locale_gen = d.getVar("LOCALE_GEN", True) or "" + return '\n'.join(sorted(set(i.strip() + for j in locale_gen.split('\\n') + if j.strip() + for i in (j.split()[0].split("_")[0], + j.split()[0].split(".")[0], + j.split()[0])))) + +ROOTFS_INSTALL_COMMAND_BEFORE_CLEAN += "image_install_localepurge_download" +image_install_localepurge_download() { + sudo -E chroot '${ROOTFSDIR}' \ + /usr/bin/apt-get ${ROOTFS_APT_ARGS} --download-only localepurge +} + +ROOTFS_INSTALL_COMMAND += "image_install_localepurge_install" +image_install_localepurge_install() { + + # Generate locale and localepurge configuration: + cat<<__EOF__ > ${WORKDIR}/locale.gen +${@get_locale_gen(d)} +__EOF__ + cat<<__EOF__ > ${WORKDIR}/locale.debconf +locales locales/locales_to_be_generated multiselect ${@get_locale_gen(d, ', ')} +locales locales/default_environment_locale select ${LOCALE_DEFAULT} +__EOF__ + cat<<__EOF__ > ${WORKDIR}/locale.default +LANG=${LOCALE_DEFAULT} +__EOF__ + cat<<__EOF__ > ${WORKDIR}/locale.nopurge +#USE_DPKG +MANDELETE +DONTBOTHERNEWLOCALE +#SHOWFREEDSPACE +#QUICKNDIRTYCALC +#VERBOSE +${@get_nopurge(d)} +__EOF__ + + # Install configuration into image: + sudo -E -s <<'EOSUDO' + cat '${WORKDIR}/locale.gen' >> '${ROOTFSDIR}/etc/locale.gen' + cat '${WORKDIR}/locale.default' > '${ROOTFSDIR}/etc/default/locale' + cat '${WORKDIR}/locale.nopurge' > '${ROOTFSDIR}/etc/locale.nopurge' + cat '${WORKDIR}/locale.debconf' > '${ROOTFSDIR}/tmp/locale.debconf' + + # Enter image and trigger locales config and localepurge: + chroot '${ROOTFSDIR}' /bin/sh <<'EOSH' + localepurge_state='i' + if dpkg -s localepurge 2>/dev/null >&2 + then + echo 'localepurge was installed (leaving it installed later)' + else + localepurge_state='p' + echo 'localepurge was not installed (removing it later)' + apt-get ${ROOTFS_APT_ARGS} localepurge + fi + + echo 'running locale debconf-set-selections' + debconf-set-selections /tmp/locale.debconf + rm -f '/tmp/locale.debconf' + + echo 'reconfigure locales' + dpkg-reconfigure -f noninteractive locales + + echo 'running localepurge' + localepurge + + if [ "$localepurge_state" = 'p' ] + then + echo removing localepurge... + apt-get purge --yes localepurge + apt-get autoremove --purge --yes + fi +EOSH +EOSUDO +} diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 1c69966..8bd1f26 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -60,6 +60,7 @@ inherit image-sdk-extension inherit image-cache-extension inherit image-tools-extension inherit image-postproc-extension +inherit image-locales-extension # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index 800c532..31ca984 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -109,6 +109,10 @@ rootfs_install_pkgs_update() { -o Dir::Etc::sourceparts="-" \ -o APT::Get::List-Cleanup="0" } + +ROOTFS_INSTALL_COMMAND_BEFORE_CLEAN ??= "" +ROOTFS_INSTALL_COMMAND += "${ROOTFS_INSTALL_COMMAND_BEFORE_CLEAN}" + ROOTFS_INSTALL_COMMAND += "rootfs_install_resolvconf" rootfs_install_resolvconf() { sudo cp -rL /etc/resolv.conf '${ROOTFSDIR}/etc' -- 2.20.1