[elbe-devel] [PATCH 4/9] hdimg: implement partition filles with binary data from file

Bastian Germann bage at linutronix.de
Tue Dec 15 14:48:03 CET 2020


Am 14.12.20 um 17:41 schrieb Torben Hohn:
> Allow generating a raw partition, that contains a bootloader or
> the kernel.
> 
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>

Reviewed-by: Bastian Germann <bage at linutronix.de>

> ---
>   elbepack/hdimg.py | 27 ++++++++++++++++++++++++---
>   schema/dbsfed.xsd |  9 +++++++++
>   2 files changed, 33 insertions(+), 3 deletions(-)
> 
> diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
> index 965fff856..ccd1ef86f 100644
> --- a/elbepack/hdimg.py
> +++ b/elbepack/hdimg.py
> @@ -13,7 +13,7 @@ import os
>   import parted
>   import _ped
>   
> -from elbepack.fstab import fstabentry, mountpoint_dict
> +from elbepack.fstab import fstabentry, mountpoint_dict, hdpart
>   from elbepack.filesystem import Filesystem, size_to_int
>   from elbepack.shellhelper import do, CommandError, chroot, get_command_out
>   
> @@ -370,6 +370,23 @@ def create_label(disk, part, ppart, fslabel, target, grub):
>   
>       return ppart
>   
> +def create_binary(disk, part, ppart, target):
> +
> +    entry = hdpart()
> +    entry.set_geometry(ppart, disk)
> +
> +    loopdev = entry.losetup()
> +
> +    # copy from buildenv if path starts with /
> +    if part.text("binary")[0] == '/':
> +        tmp = target + "/" + "chroot" + part.text("binary")
> +    # copy from project directory
> +    else:
> +        tmp = target + "/" + part.text("binary")
> +
> +    do(f'dd if="{tmp}" of="{loopdev}"')
> +
> +    do(f'losetup -d "{loopdev}"')
>   
>   def create_logical_partitions(disk,
>                                 extended,
> @@ -395,7 +412,9 @@ def create_logical_partitions(disk,
>               fslabel,
>               size_in_sectors,
>               current_sector)
> -        if logical.has("label") and logical.text("label") in fslabel:
> +        if logical.has('binary'):
> +            create_binary(disk, logical, lpart, target)
> +        elif logical.has("label") and logical.text("label") in fslabel:
>               create_label(disk, logical, lpart, fslabel, target, grub)
>   
>           current_sector += lpart.getLength()
> @@ -443,7 +462,9 @@ def do_image_hd(hd, fslabel, target, grub_version, grub_fw_type=None):
>                   fslabel,
>                   size_in_sectors,
>                   current_sector)
> -            if part.text("label") in fslabel:
> +            if part.has("binary"):
> +                create_binary(disk, part, ppart, target)
> +            elif part.text("label") in fslabel:
>                   create_label(disk, part, ppart, fslabel, target, grub)
>           elif part.tag == "extended":
>               ppart = create_partition(
> diff --git a/schema/dbsfed.xsd b/schema/dbsfed.xsd
> index 88d26a75c..d6ca98bb4 100644
> --- a/schema/dbsfed.xsd
> +++ b/schema/dbsfed.xsd
> @@ -1770,6 +1770,15 @@
>             </documentation>
>           </annotation>
>         </element>
> +      <element name="binary" type="rfs:string" minOccurs="0">
> +        <annotation>
> +          <documentation>
> +            path and filename of a binary image which will be used as a source
> +	    for this volume; this can be used for example to store a bootloader
> +	    in a partition.
> +          </documentation>
> +        </annotation>
> +      </element>
>         <element name="bootable" type="rfs:string" minOccurs="0">
>           <annotation>
>             <documentation>
> 


More information about the elbe-devel mailing list