From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6916819859940573184 X-Received: by 2002:ac2:4e8d:: with SMTP id o13mr293113lfr.259.1610484409914; Tue, 12 Jan 2021 12:46:49 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:7806:: with SMTP id t6ls777928ljc.8.gmail; Tue, 12 Jan 2021 12:46:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJw2GNUge58DZQIJ7l6WdJ7f31VAi4aSi4JdQc1r3XM1qqXlq+P1idg9t9RC2aUhzNgqEY/c X-Received: by 2002:a2e:9747:: with SMTP id f7mr470882ljj.262.1610484408606; Tue, 12 Jan 2021 12:46:48 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1610484408; cv=pass; d=google.com; s=arc-20160816; b=MYLGKAXj003/8a2PZZ6gCF08HA2LwUUbHuXadl4zIp4GuzVo/BiezbdDDxDd3NHdz9 DBvDMEK79FbVQ9tAvVMZ3RTUoO3rgHqdElD9gLBfI81o63B7wv6o23/kThZp6NRIvxHR 4+Dj3aSFrMDsuJWRQNkWjJmouxbw633nRY6NlLIiNxar3sVKhAjzCAsG45UdaphcuZZI oNEQ9+8FjcKCBwj+e63yFptVH2c+eSBwyKNWzTiUXZDxuZ15lEfpzCatFayzvcrhO1Ws yxf+YOQ//+PE7/2S72AAD6Le/XzcR2V1wcFWR2vASfvXy6OPu4XXCL9wzpHQlWzA6Hjx OPtQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-language:content-transfer-encoding:in-reply-to :user-agent:date:message-id:from:references:cc:to:subject :dkim-signature; bh=o/twyRB6UcN5fgHc3ECDk16Z1W6Cx9mfaeYK9zjJxuY=; b=agae7IObKajF9b6ZwYL6ywZORPWJhvWdn+HtR/JdzkyfqwGwQ6aFrdk9oJ4pYuuNji l57alGPKd4QPag0ktaN42bO8aoJSlhFy0Zz6E19ZWSF+Le++yDoGsXNmyVsKndzQpX4S zU5d+PWFGVc7hhgrFSACdWYQxEDIRlsdQliZC3IKrV54cqbkyF1ymKjfg/On5Cyry9S3 Hjl53z2+/jD5y892B8VywANSPHJjcT+KwwuvEw/A1ssTem5I1jawVYT/gm74BSpsLk5G ZvCZjFdfyM8iuF07JGh3Uaut9ZiWBPHnBz60nO9G58LHy2gjysVPyuUjrSLWcb72FvNi ikgw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.onmicrosoft.com header.s=selector1-siemens-onmicrosoft-com header.b=VegpoaHj; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of silvano.cirujano-cuesta@siemens.com designates 40.107.8.89 as permitted sender) smtp.mailfrom=silvano.cirujano-cuesta@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-eopbgr80089.outbound.protection.outlook.com. [40.107.8.89]) by gmr-mx.google.com with ESMTPS id c15si250080ljn.0.2021.01.12.12.46.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Jan 2021 12:46:48 -0800 (PST) Received-SPF: pass (google.com: domain of silvano.cirujano-cuesta@siemens.com designates 40.107.8.89 as permitted sender) client-ip=40.107.8.89; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.onmicrosoft.com header.s=selector1-siemens-onmicrosoft-com header.b=VegpoaHj; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of silvano.cirujano-cuesta@siemens.com designates 40.107.8.89 as permitted sender) smtp.mailfrom=silvano.cirujano-cuesta@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TpzBLPTkjPTnci1fUHs4q5Bno0TpabJIYS/Hsifm2iniKgnoJrEGL5WOOvgXbo0piQu0kwkLOMUfV/g1wPC4wmdLpiNVFFqp6/TCH5GBFUuxtXaYkxsOImXwx19zCD3Q3S/MsRlL0oaRq/f+NyPF2ixDWhQyb5Qa3FxN+8E2aMHwmWgOWpYik4Ov7alfq9krg9HS/v1Tii7JZ2nK5ZO7Mkz57FMWjm51O84W9rrNxlhdKuFm4nD/tTuIcZ4Y1Ij2QLWFMmde18yDJRrWRfSnVb7OZOZgXfIFl5o4sqVcirsjRdVF3iYblR4gIHXYMFS5eONcKUKz11u5clpfPKW7hQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o/twyRB6UcN5fgHc3ECDk16Z1W6Cx9mfaeYK9zjJxuY=; b=T8Y6409NkBi3yCdcY21Np6IMe4DZN5g57J6VnHtuwfiiMDiBbzGq+mpQWtA5qPeqkXqYS1HzJy8dP6G/ABXtk5PvxT+8YNUvJcjuIpnwjqpGpsHPDk7NqnIiPgzQBYTsKe95sYzOAO7lcIeCnB+2wnW5VabABFO5wAneQNZJZPDQBCA33miU7wy2E6nI5qdeE0GxLdWTLioWGYdDKU/VSRq73itk9etekIy5HDanijCCvn1hnVF/rLrZ3m9yNw6j6U/w/moflGlhu6JfkYyHmLUur7REBtTE3DlZ82q9nngTFKs/ZQMo4zETiwgReHnXmeDC48fVlchRfJXZt4Km6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.onmicrosoft.com; s=selector1-siemens-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o/twyRB6UcN5fgHc3ECDk16Z1W6Cx9mfaeYK9zjJxuY=; b=VegpoaHjfg9xD6teTKYxSJUXopIpX9T0QGpKjKzSPbch4mkofs5TKksqGdKDA//Jnq68FqFOO7Gi41XVVlg/rAkVwOCcV/+M1hK02teJ7DhUhIuH/rgU2T03WvHKMekKeL4mZnPxPsTLerUrLl8hpGaDMhqZ4EySP/YRHIrHnGM= Authentication-Results: googlegroups.com; dkim=none (message not signed) header.d=none;googlegroups.com; dmarc=none action=none header.from=siemens.com; Received: from AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:12a::30) by AM0PR10MB2225.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:d8::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Tue, 12 Jan 2021 20:46:47 +0000 Received: from AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM ([fe80::c035:62d1:fd79:1bc8]) by AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM ([fe80::c035:62d1:fd79:1bc8%5]) with mapi id 15.20.3742.012; Tue, 12 Jan 2021 20:46:46 +0000 Subject: Re: [RFC PATCH 1/2] sdk: support creation of container image To: Jan Kiszka , Henning Schild Cc: isar-users@googlegroups.com References: <20210112103338.14712-1-silvano.cirujano-cuesta@siemens.com> <20210112103338.14712-2-silvano.cirujano-cuesta@siemens.com> <20210112183655.4f227e42@md1za8fc.ad001.siemens.net> <75752029-677f-c07c-fb93-c6754ff1bad3@siemens.com> <3d1a0d3d-a56f-1a69-ed3d-724db91f4a08@siemens.com> From: Silvano Cirujano Cuesta Message-ID: Date: Tue, 12 Jan 2021 21:46:38 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 In-Reply-To: <3d1a0d3d-a56f-1a69-ed3d-724db91f4a08@siemens.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [2001:a61:3ba9:3102:e458:f9ae:a68a:ac3d] X-ClientProxiedBy: AM0PR04CA0104.eurprd04.prod.outlook.com (2603:10a6:208:be::45) To AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:208:12a::30) Return-Path: silvano.cirujano-cuesta@siemens.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [IPv6:2001:a61:3ba9:3102:e458:f9ae:a68a:ac3d] (2001:a61:3ba9:3102:e458:f9ae:a68a:ac3d) by AM0PR04CA0104.eurprd04.prod.outlook.com (2603:10a6:208:be::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.9 via Frontend Transport; Tue, 12 Jan 2021 20:46:46 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 4dd61b7c-b954-409e-cb66-08d8b73b2d99 X-MS-TrafficTypeDiagnostic: AM0PR10MB2225: X-LD-Processed: 38ae3bcd-9579-4fd4-adda-b42e1495d55a,ExtAddr X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5d4XxHYeqPb/NIxZrN4gyRZ4/BgE/tUgd40P8SUSyKoa96Bpuo4bKdtWMhzwlbeWAM89Wo1k1AKkCi+ABLDMYLkxnwZDS39JsmWdocZVia+POLiN5rRyO9g52BqdlmC6zTZXZf/BDP/82JXQUtDgd7ZeyDYvqWoj4U1oOEiJvZj/bdrd9SoyxOqyTgiChLATcat1KISjNz8UkmDonkEayIBS4WV0aIzf4V/FR3+xw1sQWPX41g3J5TX9r8Sc6TV4c2MJK0Wu5D+4VwXUKEq/fTS0n3B1CCEmn5B3dh9BHBCAUhVMZPWR5HJfOd7f3xN116BgL5FQ+01ER8oEzqUjx2SCKxoxo5i3fBlkj+FU59JNnGeSPY5rRjnVHIJHFfAlSk0T4FwLUIA7GEVaf1pavdHJ6HwVS6qR6ozKJeF+Bk5qj0cN90diCR2CkAGORWuaUDWsD2SM8+811JWisJ/XEOikSzdj2frJQLfdjhwc7m0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(366004)(39860400002)(346002)(396003)(376002)(136003)(31686004)(66556008)(66476007)(110136005)(66946007)(83380400001)(53546011)(2906002)(186003)(6636002)(6666004)(86362001)(36756003)(8936002)(6486002)(478600001)(316002)(31696002)(4326008)(2616005)(8676002)(5660300002)(16526019)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dE02OU1BZXlEZFNobzBFMGVZYkluams4M3VURGFIVm5Kci9hMkcvMjdIU1RQ?= =?utf-8?B?ajFtVzhkMEtwQ2gza3M0QW1oQ1M4bVRIMmVYQXcrVG44VERGOGVuYTgzazhp?= =?utf-8?B?QlZIVW1qc3BnVDIydkhxL2V2OXhleXRuMDcwSTdISm5Yb1F0SHZvcUhPaExv?= =?utf-8?B?SkhMdXhGUURteVB2Zk5oUW9kTTBkUFIyM0FjTWxBWXMxVzNhdWRPRnpNb3Fv?= =?utf-8?B?NTlWNGdpWUFsVWY4OVF1Q3MwRng1b0xnZm5EQ21NZXc2ak1YTHU5eVJraDJ4?= =?utf-8?B?V2JqbC95M28rS1FmZVVaOWN2VW1Pb2tSNXBYdmZldUd3bXJma25udjFPaGhP?= =?utf-8?B?VUI0TFlXb2JCbFJ3bUxhT3NiamtFQmJkQTJVWS94QndLczVGZVpGS3ZFOG9v?= =?utf-8?B?bU5oTG9tc0VoWWxTS2czeXBhMTRObmNvL1RUM09tUEhnaGxveHc1eThERkJ0?= =?utf-8?B?ZGtvcHlNR3d6Tm5kY3c1a1UwVy83RFlKQTVTa0tyREs0ZlFKRFJIUUlndkJR?= =?utf-8?B?MG5VSWViRWxNR0hLWU5jVUJsbkx6cExZWDFVcFFkeW8zc01CaWVzV0ROTmRI?= =?utf-8?B?bHlCZE8zMFlsZjhabGk1UDZCRHhsUE0wOTNqd2JLWHhtSFpiSG1EYmZhc1R0?= =?utf-8?B?Ukp5RCtEUUwzQXloZXhQUmZHZWlhaDdpTDZiVXc0RnVlMWl1R0l2dEJWeE5L?= =?utf-8?B?bEoySGptT2ExclF2UjhaaG5sc0RLVzc2TTZGSlFhVHpSYVhjQUJRSWRiRGdy?= =?utf-8?B?QjNZNUFSTEdxemVCY25vaU9IaWdtZGlEZjJ6akJ1dkpyRCtwTlB0SWtlNll3?= =?utf-8?B?eE1zVkJJS1JFYWFCd2NDdS9nUm81eVZma3F2c2tCSmEyMVVsUGIwQVQ5R2J4?= =?utf-8?B?bS8yVlhvV2Y5S0ovMENCK3llSFRubWpnVGh5UUZkajRjMk5YK00rZ1lVWDBo?= =?utf-8?B?aWVNUGJuOXY5a0RkQnoybTZZdk5LZk52VTJKVTE3bEgxd0RDRGI4Qkhsa2hn?= =?utf-8?B?OWJPeWt0QUlTYUNNR3huczl0Mng1QTVzQy9xV0ZoSnk4NTV1UURuWXN0Q0hn?= =?utf-8?B?OFBxdElSTjJHNmpKUjgxRXVkaEdXR2N2dGcvYUVPYys3RFh3VEtOUW1oYzRu?= =?utf-8?B?WXNVb2xqVEovVHN2bUxyKzBkYmN1bVpESGxsTWtlSVNpWDN3YTlWRXZHN004?= =?utf-8?B?U1hyMmlpTDlETkE4c1pSNC9wNnMrN05UQUNGQWtLWEtrVEFURXdITys0ZGZR?= =?utf-8?B?YlkySWJ3bW9rQmdVSFhjb3hsYTFaamxXaHo3Q3U0Tk0yclRzZDFqYVJ2UzN6?= =?utf-8?B?VFRHcUluNENzbVYrWE1tRnMzaWE1dnZHaU1JdG44TVpIUWlOdEI4WU96S1ZR?= =?utf-8?B?MEVrdHl0ZVhiVEMxTGo0Y3hQQkdPRnNnOXVBZDEvTEl1MjY1WVhOa2NvVE5C?= =?utf-8?Q?XicLtreu?= X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-AuthSource: AM0PR10MB2708.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2021 20:46:46.8272 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-Network-Message-Id: 4dd61b7c-b954-409e-cb66-08d8b73b2d99 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: F1Jbzby59G8U9aFp/jIhkhF3//RY09hcSNY4tbQZuToQUH/XHBTz9gxyeti4fPE14ydkBqR/Z3MybyIGAm2VpK0Acixr/6L2P5GJvJt91d3m60EnwDqq2ai2gyggMDmX X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB2225 X-TUID: Hn5CbubIuoqh On 12/01/2021 19:04, Jan Kiszka wrote: > On 12.01.21 18:54, [ext] Silvano Cirujano Cuesta wrote: >> On 12/01/2021 18:36, Henning Schild wrote: >>> Am Tue, 12 Jan 2021 11:33:37 +0100 >>> schrieb "[ext] Silvano Cirujano Cuesta" >>> : >>> >>>> Extend task "populate_sdk" to support the creation of a container >>>> image containing the SDK. >>>> >>>> Signed-off-by: Silvano Cirujano Cuesta >>>> --- >>>> meta/classes/image-sdk-extension.bbclass | 99 >>>> ++++++++++++++++++++++-- 1 file changed, 92 insertions(+), 7 >>>> deletions(-) >>>> >>>> diff --git a/meta/classes/image-sdk-extension.bbclass >>>> b/meta/classes/image-sdk-extension.bbclass index a8c708a..9317256 >>>> 100644 --- a/meta/classes/image-sdk-extension.bbclass >>>> +++ b/meta/classes/image-sdk-extension.bbclass >>>> @@ -6,10 +6,77 @@ >>>> # This class extends the image.bbclass to supply the creation of a >>>> sdk >>>> SDK_INCLUDE_ISAR_APT ?= "0" >>>> +SDK_GENERATE_FORMATS = "${@d.getVar("SDK_FORMATS", "tar")}" >>>> + >>>> +sdk_tar() { >>>> + # Copy mount_chroot.sh for convenience >>>> + sudo cp ${SCRIPTSDIR}/mount_chroot.sh ${SDKCHROOT_DIR} >>>> + >>>> + # Create SDK archive >>>> + cd -P ${SDKCHROOT_DIR}/.. >>>> + sudo tar --transform="s|^rootfs|sdk-${DISTRO}-${DISTRO_ARCH}|" \ >>>> + -c rootfs | xz -T0 > >>>> ${DEPLOY_DIR_IMAGE}/sdk-${DISTRO}-${DISTRO_ARCH}.tar.xz +} >>>> + >>>> +sdk_container_images() { >>>> + local cmd="/bin/dash" >>>> + local empty_tag="empty" >>>> + local full_tag="latest" >>>> + local oci_img_dir="${WORKDIR}/oci-image" >>>> + local sdk_container_formats="$1" >>>> + >>>> + # prepare OCI container image skeleton >>>> + sudo umoci init --layout "${oci_img_dir}" >>>> + sudo umoci new --image "${oci_img_dir}:${empty_tag}" >>>> + sudo umoci config --image "${oci_img_dir}:${empty_tag}" \ >>>> + --config.cmd="${cmd}" >>>> + sudo umoci unpack --image "${oci_img_dir}:${empty_tag}" \ >>>> + "${oci_img_dir}_unpacked" >>>> + >>>> + # add SDK root filesystem as the flesh of the skeleton >>>> + sudo cp -a "${SDKCHROOT_DIR}"/* "${oci_img_dir}_unpacked/rootfs/" >>>> + >>>> + # pack container image >>>> + sudo umoci repack --image "${oci_img_dir}:${full_tag}" \ >>>> + "${oci_img_dir}_unpacked" >>>> + sudo umoci remove --image "${oci_img_dir}:${empty_tag}" >>>> + sudo rm -rf "${oci_img_dir}_unpacked" >>>> + >>>> + # no root needed anymore >>>> + sudo chown --recursive $(id -u):$(id -g) "${oci_img_dir}" >>>> + >>>> + # convert the OCI container image to the desired format >>>> + sdk_id="sdk-${DISTRO}-${DISTRO_ARCH}" >>>> + image_name="isar-${sdk_id}" >>>> + image_archive="${DEPLOY_DIR_IMAGE}/${sdk_id}-${sdk_format}.tar" >>>> + for sdk_format in ${sdk_container_formats} ; do >>>> + case "${sdk_format}" in >>>> + "docker-archive" | "oci-archive") >>>> + if [ "${sdk_format}" = "oci-archive" ] ; then >>>> + target="${sdk_format}:${image_archive}:latest" >>>> + else >>>> + >>>> target="${sdk_format}:${image_archive}:${image_name}:latest" >>>> + fi >>>> + skopeo --insecure-policy copy \ >>>> + "oci:${oci_img_dir}:${full_tag}" "${target}" >>>> + xz -T0 "${image_archive}" >>>> + ;; >>>> + "oci") >>>> + tar --create --xz --directory "${oci_img_dir}" \ >>>> + --file "${image_archive}.xz" . >>>> + ;; >>>> + "docker-daemon" | "containers-storage") >>>> + skopeo --insecure-policy copy \ >>>> + "oci:${oci_img_dir}:${full_tag}" \ >>>> + "${sdk_format}:${image_name}:latest" >>>> + ;; >>> Jan proposed to make the SDK class wider than x86(64). How is this >>> going to affect docker? (i intentionally use "docker" as synonym for all >>> sorts of ...) >> I intentionally use container instead of Docker where it's not docker-only. >>> The proposed changes should be tested for riscv and arm64 as well. >> Do you mean hosts or targets? Assuming you're talking about RISC-V and ARM64 targets... >> >> This functionality is merely packaging the cross-buildchain that up-to-now could be generated with "populate_sdk", whatever was supported should be supported by this patch. >> >> Of course, the changes should be tested for different combinations. Feel free to test it for those architectures, as long as we are in the discussion round I'm fine with the "whatever was supported should be supported by this patch" that I've written above. I'd really test if only before contributing the final patches for integration. >> > Agreed. I don't see any arch-specific blocker here. Both skopeo and > umoci are available for our "new" host arch, arm64. RISC-V is still no > official Debian target, thus may break for any reason on any day. I have to admit I didn't expect Henning to mean ARM64 and RISC-V for the host... Anyway, as Jan says, ARM64 is supported for umoci and skopeo. Not only that, even the unofficial RISC-V port is providing umoci and I'd expect skopeo to become also supported in the upcoming future. The architecture of the host shouldn't be a big deal as long as it's supported by Debian, since neither umoci nor skopeo are using any "container-specific" technology. They simply build tarballed archives with a fixed format, write JSON documents, calculate SHA256 checksums and build file trees with a specified structure. Everything (except for the fixed TAR format) can be built with a shell script using very common tools like sed, jq, sha256sum,...   Silvano > > Jan > -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux