From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6670502250014572544 X-Received: by 2002:a17:906:4f0a:: with SMTP id t10mr354754eju.5.1553169468339; Thu, 21 Mar 2019 04:57:48 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a17:906:6015:: with SMTP id o21ls1006234ejj.3.gmail; Thu, 21 Mar 2019 04:57:47 -0700 (PDT) X-Google-Smtp-Source: APXvYqz4rnlcaC779pAEvphxrh0GT2CeZDLHmnxLfIqsxY/4HcDFr+3EqhvVxbwIb3vhtiyA7H+l X-Received: by 2002:a17:906:7c41:: with SMTP id g1mr357901ejp.6.1553169467827; Thu, 21 Mar 2019 04:57:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553169467; cv=none; d=google.com; s=arc-20160816; b=iCcOhN90Ii5gBf5ApBfDdnpi1pICynLDDIEwuk1xvWwYNMrtHHX77De2rX3ZnnDchS He+HZNCPpt2gQlP7Cxqe42rOtye9HUUS9ZVHJ9hBzwhsVyPo9kNy2Gt+3kTw6cUoJ4kS 2DUtloVnKY0yCXQCFCKW5L4NU0GJ+kkjtCpBsNJsPygZFOlC956CPEFIK2erKathQox3 k6dcG3N+Y26xI39lElA52WKtMO1VKjdfRkZRjvR+zs03HEVjxJxkx6U/ElahEsdPLcHd Yy7HFlCESLf/hphPYtIB1+ixkVPArteJF4yezbu2KGbQVBHEMQJwN+gOarArD11x9s3F cVvA== 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=GEiG743L7uOXXtJ2ibsETSbFCnJLruX+7faFj+8r9AY=; b=ZmxyTdNRHsUOCq5bTZSpkjANhY3UKuPk074XXrxF94kDoLAtjq2gC2YNP+S+2rPnwF EBDjCesa/TFpOWr3DJnLOHUV9Pd5iqLBn+JUGGUtHrUE3nu72UKwncXCGaELgKRZm4+P 3445EuSbeOE/CBnPDP0K1+RPxp7XgVaVuQAj0kT9ytkVFMhZkr5lJbFQe40r/poHf0oT ka8731XZOFK6+kditgmejSAIoYq84iAcaJEqeVVIeuUq6FMGaqmK2qzMuiapaEsk36op p7yfGo5hmtB9zhU3eJ+Su7HkLU57if9DX3c/ofJBOJ2dpeOilws1iCNHMscGlgF2BH/f 149w== 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 r37si202199edd.2.2019.03.21.04.57.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Mar 2019 04:57:47 -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 x2LBvk3C018162 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 21 Mar 2019 12:57:47 +0100 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 x2LBvkgu005142; Thu, 21 Mar 2019 12:57:46 +0100 From: claudius.heine.ext@siemens.com To: isar-users@googlegroups.com Cc: Claudius Heine Subject: [PATCH v2 1/2] meta: merges isar-image into image class Date: Thu, 21 Mar 2019 12:57:39 +0100 Message-Id: <20190321115740.17459-2-claudius.heine.ext@siemens.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190321115740.17459-1-claudius.heine.ext@siemens.com> References: <20190321115740.17459-1-claudius.heine.ext@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: 4fI8i4vOCoSr From: Claudius Heine (no functional change intended) Signed-off-by: Claudius Heine --- doc/user_manual.md | 2 +- meta/classes/image.bbclass | 86 +++++++++++++++++++++++++++++-- meta/classes/isar-image.bbclass | 90 +-------------------------------- 3 files changed, 86 insertions(+), 92 deletions(-) diff --git a/doc/user_manual.md b/doc/user_manual.md index 6fe4d83..9ea3f42 100644 --- a/doc/user_manual.md +++ b/doc/user_manual.md @@ -516,7 +516,7 @@ Packages in the `IMAGE_TRANSIENT_PACKAGES` variable are installed to the image a ## Create a Custom Image Recipe -A custom image recipe may be created to assemble packages of your choice into a root file-system image. The `isar-image` class +A custom image recipe may be created to assemble packages of your choice into a root file-system image. The `image` class implements a `do_rootfs` function to compile and configure the file-system for you. Prebuilt packages may be selected for installation by appending them to the `IMAGE_PREINSTALL` variable while packages created by ISAR should be appended to `IMAGE_INSTALL`. A sample image recipe follows. diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index bebac6b..3ba755f 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -25,6 +25,24 @@ BUILDROOT_DEPLOY = "${BUILDCHROOT_DIR}${PP_DEPLOY}" BUILDROOT_ROOTFS = "${BUILDCHROOT_DIR}${PP_ROOTFS}" BUILDROOT_WORK = "${BUILDCHROOT_DIR}${PP_WORK}" +def cfg_script(d): + cf = d.getVar('DISTRO_CONFIG_SCRIPT', True) or '' + if cf: + return 'file://' + cf + return '' + +FILESPATH =. "${LAYERDIR_core}/conf/distro:" +SRC_URI += "${@ cfg_script(d) }" + +DEPENDS += "${IMAGE_INSTALL} ${IMAGE_TRANSIENT_PACKAGES}" + +IMAGE_TRANSIENT_PACKAGES += "isar-cfg-localepurge isar-cfg-rootpw" + +WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${MACHINE}/${PN}" + +ISAR_RELEASE_CMD_DEFAULT = "git -C ${LAYERDIR_core} describe --tags --dirty --match 'v[0-9].[0-9]*'" +ISAR_RELEASE_CMD ?= "${ISAR_RELEASE_CMD_DEFAULT}" + image_do_mounts() { sudo flock ${MOUNT_LOCKFILE} -c ' \ mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" "${BUILDROOT_WORK}" @@ -36,6 +54,7 @@ image_do_mounts() { } inherit ${IMAGE_TYPE} +inherit isar-bootstrap-helper # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" @@ -97,18 +116,79 @@ python set_image_size () { d.setVarFlag('ROOTFS_SIZE', 'export', '1') } +isar_image_gen_fstab() { + cat > ${WORKDIR}/fstab << EOF +# Begin /etc/fstab +/dev/root / auto defaults 0 0 +proc /proc proc nosuid,noexec,nodev 0 0 +sysfs /sys sysfs nosuid,noexec,nodev 0 0 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /run tmpfs defaults 0 0 +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" + ' +} + do_fetch[stamp-extra-info] = "${DISTRO}-${MACHINE}" do_unpack[stamp-extra-info] = "${DISTRO}-${MACHINE}" do_rootfs[stamp-extra-info] = "${DISTRO}-${MACHINE}" do_rootfs[depends] = "isar-apt:do_cache_config isar-bootstrap-target:do_bootstrap" +do_rootfs[deptask] = "do_deploy_deb" +do_rootfs[root_cleandirs] = "${IMAGE_ROOTFS} \ + ${IMAGE_ROOTFS}/isar-apt" do_rootfs() { - die "No root filesystem function defined, please implement in your recipe" + isar_image_gen_fstab + isar_image_gen_rootfs + isar_image_conf_rootfs + isar_image_cleanup } - addtask rootfs before do_build after do_unpack -do_rootfs[deptask] = "do_deploy_deb" do_mark_rootfs() { BUILD_ID=$(get_build_id) diff --git a/meta/classes/isar-image.bbclass b/meta/classes/isar-image.bbclass index e7a5dee..1d5870b 100644 --- a/meta/classes/isar-image.bbclass +++ b/meta/classes/isar-image.bbclass @@ -1,92 +1,6 @@ -# Root filesystem for target installation +# Class for backwards compatibility of images that use it # # This software is a part of ISAR. # Copyright (C) 2015-2018 ilbers GmbH - +# Copyright (c) Siemens AG, 2019 inherit image -inherit isar-bootstrap-helper - -def cfg_script(d): - cf = d.getVar('DISTRO_CONFIG_SCRIPT', True) or '' - if cf: - return 'file://' + cf - return '' - -FILESPATH =. "${LAYERDIR_core}/conf/distro:" -SRC_URI += "${@ cfg_script(d) }" - -DEPENDS += "${IMAGE_INSTALL} ${IMAGE_TRANSIENT_PACKAGES}" - -IMAGE_TRANSIENT_PACKAGES += "isar-cfg-localepurge isar-cfg-rootpw" - -WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${MACHINE}/${PN}" - -ISAR_RELEASE_CMD_DEFAULT = "git -C ${LAYERDIR_core} describe --tags --dirty --match 'v[0-9].[0-9]*'" -ISAR_RELEASE_CMD ?= "${ISAR_RELEASE_CMD_DEFAULT}" - -do_rootfs[root_cleandirs] = "${IMAGE_ROOTFS} \ - ${IMAGE_ROOTFS}/isar-apt" - -isar_image_gen_fstab() { - cat > ${WORKDIR}/fstab << EOF -# Begin /etc/fstab -/dev/root / auto defaults 0 0 -proc /proc proc nosuid,noexec,nodev 0 0 -sysfs /sys sysfs nosuid,noexec,nodev 0 0 -devpts /dev/pts devpts gid=5,mode=620 0 0 -tmpfs /run tmpfs defaults 0 0 -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" - ' -} - -do_rootfs() { - isar_image_gen_fstab - isar_image_gen_rootfs - isar_image_conf_rootfs - isar_image_cleanup -} -- 2.20.1