DistroKit Mailinglist
 help / color / mirror / Atom feed
From: Roland Hieber <rhi@pengutronix.de>
To: distrokit@pengutronix.de
Subject: Re: [DistroKit] [PATCH v2 05/10] datapartition: generate partitions via systemd-repart
Date: Thu, 9 Nov 2023 09:13:40 +0100	[thread overview]
Message-ID: <20231109081340.e5ist5yizbksoeyf@pengutronix.de> (raw)
In-Reply-To: <20231103225253.1349209-6-rhi@pengutronix.de>

On Fri, Nov 03, 2023 at 11:52:48PM +0100, Roland Hieber wrote:
> Generating the second rootfs and the data partition on the first boot
> has the advantage that the generated images can get even smaller, and we
> can resize the data partition on-the-fly to fill the available space on
> the boot medium.
> 
> Specify a minimum of 200 MiB for the first and second root partitions
> just so that both are of equal size. (This will fit any root.ext2 in any
> of our platforms with about 25% of space left.) If the first root
> partition in the image is smaller, it will get resized too, including
> the filesystem it contains.
> 
> Remove the old systemd-autoformat service and the mkfs-ext4 udev rule,
> which also only handled the case where the data partition was the third
> partition on the disk (which is not always the case anymore since we
> have partitions for barebox-state or device-specific firmware).
> 
> Signed-off-by: Roland Hieber <rhi@pengutronix.de>

For some reason this is breaking on some platforms in a way which I
didn't encounter during development, leading to a failed boot ending in
a rescue shell, with systemd-repart showing error message like:

  Can't fit requested partitions into available free space (768.0K), refusing.
  Automatically determined minimal disk image size as 604.2M, current image size is 14.7G.

…on a mmcblk0 of 14.7 GiB which only has 85 MiB of partitioned space… 🤔

I'll look into that, looks like I have to tickle systemd-repart to be a
bit more verbose about what it is trying to match.

 - Roland

> ---
>  projectroot/etc/rc.once.d/repart                  |  3 +++
>  projectroot/etc/repart.rc-once.d/10-root.conf     |  5 +++++
>  projectroot/etc/repart.rc-once.d/20-root.conf     |  6 ++++++
>  projectroot/etc/repart.rc-once.d/30-data.conf     |  6 ++++++
>  .../systemd/system/systemd-autoformat@.service    | 15 ---------------
>  .../usr/lib/udev/rules.d/91-mkfs-ext4.rules       |  5 -----
>  rules/datapartition.in                            |  3 +++
>  rules/datapartition.make                          | 11 +++++++----
>  8 files changed, 30 insertions(+), 24 deletions(-)
>  create mode 100755 projectroot/etc/rc.once.d/repart
>  create mode 100644 projectroot/etc/repart.rc-once.d/10-root.conf
>  create mode 100644 projectroot/etc/repart.rc-once.d/20-root.conf
>  create mode 100644 projectroot/etc/repart.rc-once.d/30-data.conf
>  delete mode 100644 projectroot/usr/lib/systemd/system/systemd-autoformat@.service
>  delete mode 100644 projectroot/usr/lib/udev/rules.d/91-mkfs-ext4.rules
> 
> diff --git a/projectroot/etc/rc.once.d/repart b/projectroot/etc/rc.once.d/repart
> new file mode 100755
> index 000000000000..675c4e3e57f4
> --- /dev/null
> +++ b/projectroot/etc/rc.once.d/repart
> @@ -0,0 +1,3 @@
> +#!/bin/sh
> +echo "Repartitioning the root disk..."
> +systemd-repart --dry-run=no --definitions=/etc/repart.rc-once.d/
> diff --git a/projectroot/etc/repart.rc-once.d/10-root.conf b/projectroot/etc/repart.rc-once.d/10-root.conf
> new file mode 100644
> index 000000000000..ae6f2c21e286
> --- /dev/null
> +++ b/projectroot/etc/repart.rc-once.d/10-root.conf
> @@ -0,0 +1,5 @@
> +[Partition]
> +Label=root-A
> +Type=root
> +SizeMinBytes=200M
> +Weight=1
> diff --git a/projectroot/etc/repart.rc-once.d/20-root.conf b/projectroot/etc/repart.rc-once.d/20-root.conf
> new file mode 100644
> index 000000000000..3408b6ad156a
> --- /dev/null
> +++ b/projectroot/etc/repart.rc-once.d/20-root.conf
> @@ -0,0 +1,6 @@
> +[Partition]
> +Label=root-B
> +Type=root
> +SizeMinBytes=200M
> +Weight=1
> +Format=ext4
> diff --git a/projectroot/etc/repart.rc-once.d/30-data.conf b/projectroot/etc/repart.rc-once.d/30-data.conf
> new file mode 100644
> index 000000000000..cc5aebfd87d3
> --- /dev/null
> +++ b/projectroot/etc/repart.rc-once.d/30-data.conf
> @@ -0,0 +1,6 @@
> +[Partition]
> +Label=data
> +Type=linux-generic
> +SizeMinBytes=200M
> +Weight=999999
> +Format=ext4
> diff --git a/projectroot/usr/lib/systemd/system/systemd-autoformat@.service b/projectroot/usr/lib/systemd/system/systemd-autoformat@.service
> deleted file mode 100644
> index 75221403398c..000000000000
> --- a/projectroot/usr/lib/systemd/system/systemd-autoformat@.service
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -[Unit]
> -Before=mnt-data.mount systemd-fsck@%i.service
> -Description=Create ext4 Data Partition
> -ConditionPathExists=/dev/%i
> -
> -[Service]
> -Environment=DATAPARTITION=3
> -Type=oneshot
> -# resize partition to maximum
> -ExecStart=/bin/sh -c 'echo ",+" | sfdisk --force -N$DATAPARTITION /dev/mmcblk0'
> -# force kernel to reload the partition size of partition 3
> -ExecStart=/usr/sbin/partx -d -n $DATAPARTITION /dev/mmcblk0
> -ExecStart=/usr/sbin/partx -a -n $DATAPARTITION /dev/mmcblk0
> -# create filesystem (this service is only started if we have none)
> -ExecStart=/sbin/mkfs.ext4 /dev/%i
> diff --git a/projectroot/usr/lib/udev/rules.d/91-mkfs-ext4.rules b/projectroot/usr/lib/udev/rules.d/91-mkfs-ext4.rules
> deleted file mode 100644
> index 8af8f6cd39ba..000000000000
> --- a/projectroot/usr/lib/udev/rules.d/91-mkfs-ext4.rules
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -ACTION!="add", GOTO="systemd-autoformat-ext4-devices_end"
> -SUBSYSTEM!="block", GOTO="systemd-autoformat-ext4-devices_end"
> -ENV{ID_FS_USAGE}!="filesystem", SUBSYSTEMS=="mmc", KERNEL=="mmcblk0p3", ENV{ID_PART_ENTRY_TYPE}=="0x83", ENV{ID_FS_TYPE}!="ext4", ENV{SYSTEMD_WANTS}+="systemd-autoformat@$name.service"
> -
> -LABEL="systemd-autoformat-ext4-devices_end"
> diff --git a/rules/datapartition.in b/rules/datapartition.in
> index 4343e7c4e430..5b8c737fb8ad 100644
> --- a/rules/datapartition.in
> +++ b/rules/datapartition.in
> @@ -2,4 +2,7 @@
>  
>  config DATAPARTITION
>  	tristate
> +	select RC_ONCE
> +	select SYSTEMD
> +	select SYSTEMD_REPART
>  	default y
> diff --git a/rules/datapartition.make b/rules/datapartition.make
> index b79bcf01efcc..808448033eee 100644
> --- a/rules/datapartition.make
> +++ b/rules/datapartition.make
> @@ -1,6 +1,7 @@
>  # -*-makefile-*-
>  #
>  # Copyright (C) 2016 by Robert Schwebel <r.schwebel@pengutronix.de>
> +# Copyright (C) 2023 Roland Hieber, Pengutronix <rhi@pengutronix.de>
>  #
>  # For further information about the PTXdist project and license conditions
>  # see the README file.
> @@ -26,10 +27,12 @@ $(STATEDIR)/datapartition.targetinstall:
>  	@$(call install_fixup,datapartition,AUTHOR,"Robert Schwebel <r.schwebel@pengutronix.de>")
>  	@$(call install_fixup,datapartition,DESCRIPTION,missing)
>  
> -	@$(call install_alternative, datapartition, 0, 0, 0644, \
> -		/usr/lib/systemd/system/systemd-autoformat@.service)
> -	@$(call install_alternative, datapartition, 0, 0, 0644, \
> -		/usr/lib/udev/rules.d/91-mkfs-ext4.rules)
> +	@# Note: we only want to call systemd-repart in rc-once, so don't
> +	@# install the configs to any path picked up by systemd-repart.service
> +	@$(call install_alternative_tree, datapartition, 0, 0, \
> +		/etc/repart.rc-once.d/)
> +	@$(call install_alternative, datapartition, 0, 0, 0755, \
> +		/etc/rc.once.d/repart)
>  
>  	@$(call install_finish,datapartition)
>  
> -- 
> 2.39.2
> 
> 
> 

-- 
Roland Hieber, Pengutronix e.K.          | r.hieber@pengutronix.de     |
Steuerwalder Str. 21                     | https://www.pengutronix.de/ |
31137 Hildesheim, Germany                | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686         | Fax:   +49-5121-206917-5555 |



  reply	other threads:[~2023-11-09  8:13 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-03 22:52 [DistroKit] [PATCH v2 00/10] refactor data partition setup Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 01/10] treewide: images: unify partition labels Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 02/10] v7a: image-stm32mp: set GPT Partition Type UUID Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 03/10] treewide: images: remove size specifications for root partitions Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 04/10] treewide: images: increase size of all qemu images to 1 GiB Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 05/10] datapartition: generate partitions via systemd-repart Roland Hieber
2023-11-09  8:13   ` Roland Hieber [this message]
2023-12-12 18:07     ` Robert Schwebel
2023-12-13 14:49       ` Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 06/10] datapartition: add missing mount unit Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 07/10] datapartition: set license Roland Hieber
2023-11-04 11:14   ` Michael Olbrich
2023-11-06 11:55     ` Robert Schwebel
2023-11-03 22:52 ` [DistroKit] [PATCH v2 08/10] treewide: images: remove root-B and data partitions Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 09/10] rauc-udev: generate symlinks based on GPT partition labels Roland Hieber
2023-11-03 22:52 ` [DistroKit] [PATCH v2 10/10] v7a: barebox: bootchooser: use " Roland Hieber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231109081340.e5ist5yizbksoeyf@pengutronix.de \
    --to=rhi@pengutronix.de \
    --cc=distrokit@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox