From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6677870985578807296 X-Received: by 2002:a7b:c4cf:: with SMTP id g15mr1681218wmk.21.1554813000072; Tue, 09 Apr 2019 05:30:00 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a1c:1f86:: with SMTP id f128ls903042wmf.1.canary-gmail; Tue, 09 Apr 2019 05:29:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqyXA01W8I23UkTgXEKrgqk00Jc1VcJ81kPKxIRImVVv7stlGq9RH6+8nnsK+7rhLlLjKJkc X-Received: by 2002:a05:600c:218e:: with SMTP id e14mr1960523wme.5.1554812999634; Tue, 09 Apr 2019 05:29:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554812999; cv=none; d=google.com; s=arc-20160816; b=Dfg+90XY/DkxZlR5So+a3w+7QYL3xbkrqmdG4MY5SVNqanJLO1cTo8x9oDwx9f9Iww mwtWTXJCKgtE2aTiURU0EMX82pfLoLngvRah5Bii0DSQ4Ro7cL9VzvT4OBhXrOhMdRVe itNh/NjXE9l8Vswsrr68Do9wcj6grdZd48KJS60gSSu2mcNyvuIGGUNH66atelEnW39L 8rEpPVSDDIO1zpeTRO6vbE1+Lk+JTA26BUGhc73B6eYVyrZ9dEfdz+k2+fDGgRTk1SOP fGBc8b5jjntWzFMySIt2xhwTPG4Z+jJMzPsqS4OlIySil4uuJhqgVRKYO/ERwR0EQ1cb 9q8Q== 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=GCiHtEo/8lo4M1UqibqgfCHyKzYxW+bL2IyV3IBPhbU=; b=XgkqtdRsj/0PDwYjsJe8S+Xw5pTVRNh/Dbg6rLUV2Clhom9Lg9llZGxMWHpkcez+S5 3gq5DgshJexPeWh9FiT/m6YZBdHCViKfSrjt3QbfC7ra6x2nR40OYiqLO7S4DZtx0WlF QJtgi8LIDPIT+k+ti87LO3Ve3ewtw7bKSRM67/81RugAI3O77Ja1GCyvPaezE7ZRS6bD gkzR0qnPacv2b2nB4lPJEcbJW7iSI06K9sQGSZ61QaHL+vHVRfANbglujgYJh5oFRgjI Am/A5sHs3kgWWWdLzzyVKFxYtqpTK3zAkN9yZPNNHHDr65JlGe1ehBEmG63vqWv5zR2K VM7A== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=claudius.heine.ext@siemens.com Return-Path: Received: from thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id f135si570263wmg.2.2019.04.09.05.29.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Apr 2019 05:29:59 -0700 (PDT) Received-SPF: pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.2 as permitted sender) client-ip=192.35.17.2; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=claudius.heine.ext@siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id x39CTxcZ011083 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 9 Apr 2019 14:29:59 +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 x39CTvkH031413; Tue, 9 Apr 2019 14:29:58 +0200 From: claudius.heine.ext@siemens.com To: isar-users@googlegroups.com Cc: Claudius Heine Subject: [PATCH v2 8/8] meta/classes/image: implement ROOTFS_POSTPROCESS_COMMAND Date: Tue, 9 Apr 2019 14:29:15 +0200 Message-Id: <20190409122915.14249-9-claudius.heine.ext@siemens.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190409122915.14249-1-claudius.heine.ext@siemens.com> References: <20190409122915.14249-1-claudius.heine.ext@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: rmiLrxP3ddvL From: Claudius Heine Signed-off-by: Claudius Heine --- meta/classes/image-postproc-extension.bbclass | 46 +++++++++++ meta/classes/image.bbclass | 76 ++----------------- meta/classes/rootfs.bbclass | 58 ++++++++++++++ 3 files changed, 112 insertions(+), 68 deletions(-) create mode 100644 meta/classes/image-postproc-extension.bbclass create mode 100644 meta/classes/rootfs.bbclass diff --git a/meta/classes/image-postproc-extension.bbclass b/meta/classes/image-postproc-extension.bbclass new file mode 100644 index 0000000..625ba7d --- /dev/null +++ b/meta/classes/image-postproc-extension.bbclass @@ -0,0 +1,46 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2019 + +update_etc_os_release() { + OS_RELEASE_BUILD_ID="" + OS_RELEASE_VARIANT="" + while true; do + case "$1" in + --build-id) OS_RELEASE_BUILD_ID=$2; shift ;; + --variant) OS_RELEASE_VARIANT=$2; shift ;; + -*) bbfatal "$0: invalid option specified: $1" ;; + *) break ;; + esac + shift + done + + if [ -n "${OS_RELEASE_BUILD_ID}" ]; then + sudo sed -i '/^BUILD_ID=.*/d' '${IMAGE_ROOTFS}/etc/os-release' + echo "BUILD_ID=\"${OS_RELEASE_BUILD_ID}\"" | \ + sudo tee -a '${IMAGE_ROOTFS}/etc/os-release' + fi + if [ -n "${OS_RELEASE_VARIANT}" ]; then + sudo sed -i '/^VARIANT=.*/d' '${IMAGE_ROOTFS}/etc/os-release' + echo "VARIANT=\"${OS_RELEASE_VARIANT}\"" | \ + sudo tee -a '${IMAGE_ROOTFS}/etc/os-release' + fi +} + +ROOTFS_POSTPROCESS_COMMAND =+ "image_postprocess_configure image_postprocess_mark" + +image_postprocess_configure() { + # Configure root filesystem + if [ -n "${DISTRO_CONFIG_SCRIPT}" ]; then + sudo install -m 755 "${WORKDIR}/${DISTRO_CONFIG_SCRIPT}" "${IMAGE_ROOTFS}" + TARGET_DISTRO_CONFIG_SCRIPT="$(basename ${DISTRO_CONFIG_SCRIPT})" + sudo chroot ${IMAGE_ROOTFS} "/$TARGET_DISTRO_CONFIG_SCRIPT" \ + "${MACHINE_SERIAL}" "${BAUDRATE_TTY}" + sudo rm "${IMAGE_ROOTFS}/$TARGET_DISTRO_CONFIG_SCRIPT" + fi +} + +image_postprocess_mark() { + BUILD_ID=$(get_build_id) + update_etc_os_release \ + --build-id "${BUILD_ID}" --variant "${DESCRIPTION}" +} diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index bbfb80d..f9a3052 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -54,9 +54,12 @@ image_do_mounts() { } inherit isar-bootstrap-helper +ROOTFS_FEATURES += "finalize-rootfs" +inherit rootfs inherit image-sdk-extension inherit image-cache-extension inherit image-tools-extension +inherit image-postproc-extension # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" @@ -118,7 +121,7 @@ python set_image_size () { d.setVarFlag('ROOTFS_SIZE', 'export', '1') } -isar_image_gen_fstab() { +do_image_gen_fstab() { cat > ${WORKDIR}/fstab << EOF # Begin /etc/fstab /dev/root / auto defaults 0 0 @@ -131,70 +134,19 @@ devtmpfs /dev devtmpfs mode=0755,nosuid 0 0 # End /etc/fstab EOF } - -isar_image_gen_rootfs() { - setup_root_file_system --clean --keep-apt-cache \ - --fstab "${WORKDIR}/fstab" \ - "${IMAGE_ROOTFS}" ${IMAGE_PREINSTALL} ${IMAGE_INSTALL} -} - -isar_image_conf_rootfs() { - # Configure root filesystem - if [ -n "${DISTRO_CONFIG_SCRIPT}" ]; then - sudo install -m 755 "${WORKDIR}/${DISTRO_CONFIG_SCRIPT}" "${IMAGE_ROOTFS}" - TARGET_DISTRO_CONFIG_SCRIPT="$(basename ${DISTRO_CONFIG_SCRIPT})" - sudo chroot ${IMAGE_ROOTFS} "/$TARGET_DISTRO_CONFIG_SCRIPT" \ - "${MACHINE_SERIAL}" "${BAUDRATE_TTY}" - sudo rm "${IMAGE_ROOTFS}/$TARGET_DISTRO_CONFIG_SCRIPT" - fi -} - -isar_image_cleanup() { - # Cleanup - sudo sh -c ' \ - rm "${IMAGE_ROOTFS}/etc/apt/sources.list.d/isar-apt.list" - test ! -e "${IMAGE_ROOTFS}/usr/share/doc/qemu-user-static" && \ - find "${IMAGE_ROOTFS}/usr/bin" \ - -maxdepth 1 -name 'qemu-*-static' -type f -delete - umount -l ${IMAGE_ROOTFS}/isar-apt - rmdir ${IMAGE_ROOTFS}/isar-apt - umount -l ${IMAGE_ROOTFS}/dev - umount -l ${IMAGE_ROOTFS}/proc - umount -l ${IMAGE_ROOTFS}/sys - rm -f "${IMAGE_ROOTFS}/etc/apt/apt.conf.d/55isar-fallback.conf" - if [ "${ISAR_USE_CACHED_BASE_REPO}" = "1" ]; then - umount -l ${IMAGE_ROOTFS}/base-apt - rmdir ${IMAGE_ROOTFS}/base-apt - # Replace the local apt we bootstrapped with the - # APT sources initially defined in DISTRO_APT_SOURCES - rm -f "${IMAGE_ROOTFS}/etc/apt/sources.list.d/base-apt.list" - mv "${IMAGE_ROOTFS}/etc/apt/sources-list" \ - "${IMAGE_ROOTFS}/etc/apt/sources.list.d/bootstrap.list" - fi - rm -f "${IMAGE_ROOTFS}/etc/apt/sources-list" - ' -} +addtask image_gen_fstab before do_rootfs_install do_rootfs_install[depends] = "isar-apt:do_cache_config isar-bootstrap-target:do_bootstrap" do_rootfs_install[deptask] = "do_deploy_deb" do_rootfs_install[root_cleandirs] = "${IMAGE_ROOTFS} \ ${IMAGE_ROOTFS}/isar-apt" do_rootfs_install() { - isar_image_gen_fstab - isar_image_gen_rootfs - isar_image_conf_rootfs - isar_image_cleanup + setup_root_file_system --clean --keep-apt-cache \ + --fstab "${WORKDIR}/fstab" \ + "${IMAGE_ROOTFS}" ${IMAGE_PREINSTALL} ${IMAGE_INSTALL} } addtask rootfs_install before do_build after do_unpack -do_mark_rootfs() { - BUILD_ID=$(get_build_id) - update_etc_os_release \ - --build-id "${BUILD_ID}" --variant "${DESCRIPTION}" \ - "${IMAGE_ROOTFS}" -} -addtask mark_rootfs before do_rootfs_postprocess after do_rootfs_install - do_copy_boot_files[dirs] = "${DEPLOY_DIR_IMAGE}" do_copy_boot_files() { if [ -n "${KERNEL_IMAGE}" ]; then @@ -219,18 +171,6 @@ do_copy_boot_files() { } addtask copy_boot_files before do_rootfs_postprocess after do_rootfs_install -python do_rootfs_postprocess() { - """Virtual task""" - pass -} -addtask rootfs_postprocess before do_build after do_rootfs_install - -python do_rootfs() { - """Virtual task""" - pass -} -addtask rootfs before do_build after do_rootfs_postprocess - python do_image_tools() { """Virtual task""" pass diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass new file mode 100644 index 0000000..45b0350 --- /dev/null +++ b/meta/classes/rootfs.bbclass @@ -0,0 +1,58 @@ +# This software is a part of ISAR. +# Copyright (c) Siemens AG, 2019 + +# Features of the rootfs creation: +# available features are: +# 'finalize-rootfs' - delete files needed to chroot into the rootfs +ROOTFS_FEATURES ?= "" + +ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'finalize-rootfs', 'rootfs_postprocess_finalize', '', d)}" +rootfs_postprocess_finalize() { + sudo -s <<'EOSUDO' + test ! -e "${ROOTFSDIR}/usr/share/doc/qemu-user-static" && \ + find "${ROOTFSDIR}/usr/bin" \ + -maxdepth 1 -name 'qemu-*-static' -type f -delete + + mountpoint -q '${ROOTFSDIR}/isar-apt' && \ + umount -l ${ROOTFSDIR}/isar-apt + rmdir --ignore-fail-on-non-empty ${ROOTFSDIR}/isar-apt + + mountpoint -q '${ROOTFSDIR}/base-apt' && \ + umount -l ${ROOTFSDIR}/base-apt + rmdir --ignore-fail-on-non-empty ${ROOTFSDIR}/base-apt + + mountpoint -q '${ROOTFSDIR}/dev' && \ + umount -l ${ROOTFSDIR}/dev + mountpoint -q '${ROOTFSDIR}/sys' && \ + umount -l ${ROOTFSDIR}/proc + mountpoint -q '${ROOTFSDIR}/sys' && \ + umount -l ${ROOTFSDIR}/sys + + rm -f "${ROOTFSDIR}/etc/apt/apt.conf.d/55isar-fallback.conf" + + rm -f "${ROOTFSDIR}/etc/apt/sources.list.d/isar-apt.list" + rm -f "${ROOTFSDIR}/etc/apt/sources.list.d/base-apt.list" + + mv "${ROOTFSDIR}/etc/apt/sources-list" \ + "${ROOTFSDIR}/etc/apt/sources.list.d/bootstrap.list" + + rm -f "${ROOTFSDIR}/etc/apt/sources-list" +EOSUDO +} + +do_rootfs_postprocess[vardeps] = "${ROOTFS_POSTPROCESS_COMMAND}" +python do_rootfs_postprocess() { + cmds = d.getVar("ROOTFS_POSTPROCESS_COMMAND") + if cmds is None or not cmds.strip(): + return + cmds = cmds.split() + for cmd in cmds: + bb.build.exec_func(cmd, d) +} +addtask rootfs_postprocess before do_rootfs after do_rootfs_install + +python do_rootfs() { + """Virtual task""" + pass +} +addtask rootfs before do_build -- 2.20.1