All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Ziegler <br015@umbiko.net>
To: Frank Wunderlich <frank-w@public-files.de>
Cc: buildroot <buildroot@buildroot.org>
Subject: Re: [Buildroot] lvm2 seems to require systemd
Date: Mon, 22 Jul 2024 05:15:54 +0000	[thread overview]
Message-ID: <9a6b9a74e11902c4dcc0d6b88c12251a@umbiko.net> (raw)
In-Reply-To: <trinity-5801e483-666e-4366-b968-4217269be7be-1721590668238@3c-app-gmx-bap52>

Hi Frank,

On 2024-07-21 19:37, Frank Wunderlich wrote:
> Hi
> 
>> Gesendet: Sonntag, 21. Juli 2024 um 19:58 Uhr
>> Von: "Andreas Ziegler" <br015@umbiko.net>
>> An: "Frank Wunderlich" <frank-w@public-files.de>
>> Cc: "buildroot" <buildroot@buildroot.org>
>> Betreff: Re: Aw: Re:  Re: lvm2 seems to require systemd
>> 
>> Hi Frank,
>> 
>> On 2024-07-21 15:50, Frank Wunderlich wrote:
>> > Hi Andreas
>> >
>> > noticed some errors when calling the vgchange command
>> >
>> > # /usr/sbin/lvm vgchange -aay --autoactivation event vg-nvme
>> >   1 logical volume(s) in volume group "vg-nvme" now active
>> > [ 8023.796866] udevd[1614]: failed to execute '/usr/sbin/blkid'
>> > '/usr/sbin/blkid -o udev -p /dev/dm-0': No such file or directory
>> > [ 8023.808977] udevd[1610]: conflicting device node
>> > '/dev/mapper/vg--nvme-var' found, link to '/dev/dm-0' will not be
>> > created
>> > # lvscan
>> >   ACTIVE            '/dev/vg-nvme/var' [10.00 GiB] inherit
>> 
>> Your execution of vgchange triggers additional udev messages, that are
>> not handled correctly. Try to find out what is missing and add it to
>> your image; blkid, for example, is part of package util-linux.
> 
> i have already enabled util_linux
> Symbol: BR2_PACKAGE_UTIL_LINUX [=y]
> BR2_PACKAGE_HOST_UTIL_LINUX [=y]
> BR2_PACKAGE_UTIL_LINUX_LIBBLKID [=y]
> 
> so strange that blkid is not there, but it is in /sbin
> 
> # which blkid
> /sbin/blkid
> 
> maybe a symlink needs to be created?
> 

Sorry, my mistake: blkid is provided by busybox and busybox installs it 
in /sbin. Since this is a Buildroot feature (unless you activate 
BR2_ROOTFS_MERGED_USER), I would modify the udev rule.

>> The double-dash in vg--nvme-var looks strange: is this intentional?
> 
> as you can see above i used only one dash in vg-nvme, not sure why 
> another one was inserted here
> 
> # pvscan
>   PV /dev/nvme0n1p5   VG vg-nvme   lvm2 [<1.79 TiB / <1.78 TiB free]
>   Total: 1 [<1.79 TiB] / in use: 1 [<1.79 TiB] / in no VG: 0 [0   ]
> 
>> > but i'm able to mount it
>> >
>> > # mkdir /mnt/var
>> > # mount /dev/mapper/vg--nvme-var /mnt/var/
>> > [ 8514.687803] EXT4-fs (dm-0): mounted filesystem
>> > be8b31d6-96e2-43a1-8416-a058972118b3 r/w with ordered data mode. Quota
>> > mode: disabled.
>> > # ls /mnt/var
>> > cache       lib         log         lost+found  run         tmp
>> > #
>> >
>> > how can i test the script? currently i'm in the initrd, so changing
>> > anything will be lost on reboot, so i want to test the script before
>> > putting it into the initrd.
>> 
>> I usually mount the target's file system via ssh://root@hostname in a
>> file browser; that allows me to copy to and from the target machine.
>> Script and configuration changes are made directly on the target 
>> system,
>> and copied back to the development machine when everything runs
>> satisfactorily.
>> 
>> > as far as i see the original call via udev contains some
>> > systemd-specific params and environment-vars i do not know currently
>> 
>> They are probably safe to ignore; when in doubt, consult the systemd
>> documentation. Evironment variables are extensively used within the 
>> udev
>> context; I doubt that the called lvm2 tool makes use of them.
> 
> they seem to be systemd options which are not stripped by the script 
> yet which
> will result in invalid call (imho only first param is shifted away)
> 

RUN+="/usr/bin/systemd-run \
   --no-block \
   --property DefaultDependencies=no \
   --unit lvm-activate-$env{LVM_VG_NAME_COMPLETE} \
   /usr/sbin/lvm \
   vgchange \
   -aay \
   -autoactivation \
   event $env{LVM_VG_NAME_COMPLETE}"

If you put a 'shift 5' at the beginning of the script, it should get rid 
of the systemd parameters. Alternatively, you could modify the udev 
rule.

Kind regards,
Andreas

>> Kind regards,
>> Andreas
>> 
>> >
>> > regards Frank
>> >
>> >
>> >> Gesendet: Sonntag, 21. Juli 2024 um 12:16 Uhr
>> >> Von: "Andreas Ziegler" <br015@umbiko.net>
>> >> An: "Frank Wunderlich" <frank-w@public-files.de>
>> >> Cc: "buildroot" <buildroot@buildroot.org>
>> >> Betreff: Re: Aw: Re: lvm2 seems to require systemd
>> >>
>> >> Hi Frank,
>> >>
>> >> On 2024-07-21 09:54, Frank Wunderlich wrote:
>> >> > regards Frank
>> >> >
>> >> >
>> >> >> Gesendet: Sonntag, 21. Juli 2024 um 11:17 Uhr
>> >> >> Von: "Andreas Ziegler" <br015@umbiko.net>
>> >> >> An: frank-w@public-files.de
>> >> >> Cc: "buildroot" <buildroot@buildroot.org>
>> >> >> Betreff: Re: lvm2 seems to require systemd
>> >> >>
>> >> >> Hi Frank,
>> >> >>
>> >> >> On 2024-07-20 14:34, Frank Wunderlich wrote:
>> >> >> > Hi,
>> >> >> >
>> >> >> > i try to build a buildroot (2024.05) initrd with lvm2 support
>> >> >> >
>> >> >> > so basicly added these options:
>> >> >> >
>> >> >> > #to select BR2_PACKAGE_HAS_UDEV
>> >> >> > BR2_PACKAGE_EUDEV=y
>> >> >> > BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
>> >> >> > BR2_PACKAGE_LIBBLOCKDEV=y
>> >> >> > BR2_PACKAGE_LVM2=y
>> >> >> >
>> >> >> > build is fine, but i see this while bootup:
>> >> >> >
>> >> >> > [    3.665010] udevd[1520]: failed to execute '/usr/bin/systemd-run'
>> >> >> > '/usr/bin/systemd-run --no-block --property DefaultDependencies=
>> >> >> > no --unit lvm-activate-vg-nvme /usr/sbin/lvm vgchange -aay
>> >> >> > --autoactivation event vg-nvme': No such file or directory
>> >> >> > done
>> >> >>
>> >> >> lvm2 installs a bunch of udev rules; one of them relies on systemd-run
>> >> >> to execute a command in the background:
>> >> >>
>> >> >> # pvscan will check if this device completes a VG,
>> >> >> # i.e. all PVs in the VG are now present with the
>> >> >> # arrival of this PV.  If so, it prints to stdout:
>> >> >> # LVM_VG_NAME_COMPLETE='foo'
>> >> >> #
>> >> >> # When the VG is complete it can be activated, so
>> >> >> # vgchange -aay <vgname> is run.  It is run via
>> >> >> # systemd since it can take longer to run than
>> >> >> # udev wants to block when processing rules.
>> >> >> # (if there are hundreds of LVs to activate,
>> >> >> # the vgchange can take many seconds.)
>> >> >>
>> >> >> ...
>> >> >>
>> >> >> IMPORT{program}="/usr/sbin/lvm pvscan --cache --listvg --checkcomplete
>> >> >> --vgonline --autoactivation event --udevoutput --journal=output
>> >> >> $env{DEVNAME}"
>> >> >> ENV{LVM_VG_NAME_COMPLETE}=="?*", RUN+="/usr/bin/systemd-run --no-block
>> >> >> --property DefaultDependencies=no --unit
>> >> >> lvm-activate-$env{LVM_VG_NAME_COMPLETE} /usr/sbin/lvm vgchange -aay
>> >> >> --autoactivation event $env{LVM_VG_NAME_COMPLETE}"
>> >> >> GOTO="lvm_end"
>> >> >>
>> >> >> > i see the physical volume, but logical volumes are disabled
>> >> >> >
>> >> >> > # pvscan
>> >> >> >   PV /dev/nvme0n1p5   VG vg-nvme   lvm2 [<1.79 TiB / <1.78 TiB free]
>> >> >> >   Total: 1 [<1.79 TiB] / in use: 1 [<1.79 TiB] / in no VG: 0 [0   ]
>> >> >> > # vgscan
>> >> >> >   Found volume group "vg-nvme" using metadata type lvm2
>> >> >> > # lvscan
>> >> >> >   inactive          '/dev/vg-nvme/var' [10.00 GiB] inherit
>> >> >> >
>> >> >> > and so i cannot mount the logical volume
>> >> >> >
>> >> >> > # mount /dev/vg-nvme/var /mnt
>> >> >> > [  281.006375] /dev/vg-nvme/var: Can't lookup blockdev
>> >> >> > [  281.011279] /dev/vg-nvme/var: Can't lookup blockdev
>> >> >> > [  281.016202] /dev/vg-nvme/var: Can't lookup blockdev
>> >> >> > [  281.021080] /dev/vg-nvme/var: Can't lookup blockdev
>> >> >> > mount: mounting /dev/vg-nvme/var on /mnt failed: No such file or
>> >> >> > directory
>> >> >> >
>> >> >> > any ideas?
>> >> >>
>> >> >> I would try to run vgchange manually to see if the setup works at all,
>> >> >> then create a /usr/bin/systemd-run script that is able to execute
>> >> >> commands in the background. Something like this (untested):
>> >> >
>> >> > i was able to manually initialize the lvm value after adding the
>> >> > systemd without init (running the command without prefix
>> >> > "systemd-run")...
>> >> >
>> >> > basicly with this command:
>> >> >
>> >> > /usr/sbin/lvm vgchange -aay --autoactivation event vg-nvme
>> >> >
>> >> > with init i had compile issues missing libmount, see my followup post
>> >> >
>> >> > now i have to remove systems from my initrd somehow to do further
>> >> > testing with only the eudev. any idea doing this without making all
>> >> > clear (or is this dropped when recreating the cpio file)?
>> >>
>> >> Without running make clean, unwanted files need to be removed
>> >> manually.
>> >> Buildroot creates per-package logs .files-list,
>> >> .files-list-{host,images,staging}, which contain the names of files
>> >> copied to the respective destination. Remove at least those from
>> >> .files-list to revert to a system without the package; preferrably
>> >> also
>> >> those from .files-list-staging.
>> >>
>> >> Kind regards,
>> >> Andreas
>> >>
>> >> >
>> >> >>    #!/bin/sh
>> >> >>    prg=$1
>> >> >>    shift
>> >> >>    (
>> >> >>      $prg $@ < /dev/zero > /tmp/error.log 2>&1
>> >> >>    )&
>> >> >
>> >> >> Kind regards,
>> >> >> Andreas
>> >> >>
>> >> >> > regards Frank
>> >>
>> 
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

  reply	other threads:[~2024-07-22  5:16 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.12142.1721505316.24059.buildroot@buildroot.org>
2024-07-21  9:17 ` [Buildroot] lvm2 seems to require systemd Andreas Ziegler
2024-07-21  9:54   ` Frank Wunderlich via buildroot
2024-07-21 10:16     ` Andreas Ziegler
2024-07-21 15:50       ` Frank Wunderlich via buildroot
2024-07-21 17:58         ` Andreas Ziegler
2024-07-21 19:37           ` Frank Wunderlich via buildroot
2024-07-22  5:15             ` Andreas Ziegler [this message]
2024-07-30  9:50               ` Frank Wunderlich via buildroot
2024-07-30 11:39                 ` Andreas Ziegler
2024-07-30 15:49                   ` Frank Wunderlich via buildroot
2024-07-20 12:34 Frank Wunderlich via buildroot
2024-07-20 19:49 ` Frank Wunderlich via buildroot
2024-07-22  7:58   ` Arnout Vandecappelle via buildroot

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=9a6b9a74e11902c4dcc0d6b88c12251a@umbiko.net \
    --to=br015@umbiko.net \
    --cc=buildroot@buildroot.org \
    --cc=frank-w@public-files.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.