New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
consolidated s390 device configuration #158
Closed
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Even though this is a draft pull request, I would appreciate review comments. |
This was referenced Oct 13, 2023
steffen-maier
force-pushed
the
zdev
branch
2 times, most recently
from
November 14, 2023 12:58
f39b54f
to
5d0e8c3
Compare
Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
The annotations and the one non-functional code change in zdev/dracut/95zdev-kdump/module-setup.sh check() clear all shellcheck reports. complements 73c46a3 ("zdev/dracut: fix kdump by only activating required devices") Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
…heck Clears all shellcheck reports in old existing code so newly added code can use shellcheck to find newly introduced suboptimal shell code. Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Use namespace prefix in functions of zdev-lib.sh to avoid collisions with different modules being sourced in the shell. Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Add a short explaining comment to those functions, which are just callbacks invoked by the dracut core infrastructure. So nobody wonders how these functions get called, especially if there are no local callers here in the code. Cf. dracut commit dracutdevs/dracut@8bcfd683bd0c ("*/module-setup.sh: add comments for dracut called functions") For more information about the dracut module callback functions: https://github.com/dracutdevs/dracut/blob/master/man/dracut.modules.7.asc#writing-a-module https://github.com/dracutdevs/dracut/blob/master/docs/HACKING.md#writing-modules Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Otherwise, dracut skips modules that are "not hostonly", i.e. not used / loaded on the system when running dracut to build an initrd. Without the fix, zdev device auto configuration only works for device types for which a device driver happened to be loaded when building an initrd. Likewise for specifying rd.* boot options. Hostonly mode is often the default in Linux distributions. Make zdev device auto configuration work nonetheless without users having to know about and tweak dracut modes for initrd generation. On the typical sloppy hostonly mode, the code disables hostonly for installing kernel modules. This covers building regular initrds, where zdev device auto configuration should even work for device types, for which device drivers were not loaded when an initrd was generated. This can happen when new devices of new types are configured for a DPM logical partition. Also, users could want to start using dracut cmdline options rd.{dasd,zfcp,znet} for a device type that was not used when the initrd was built. The special strict hostonly mode is used by some kdump implementations. In that case, hostonly remains in effect intentionally because only support for the really required devices as determined by dracut module 95zdev-kdump should be included in a kdump initrd due to the memory-constrained kdump environment. Cf. commit 73c46a3 ("zdev/dracut: fix kdump by only activating required devices"), which also provides more references on strict hostonly mode. Even for non-kdump cases, let strict hostonly mode be effective here in 95zdev in case some future use case appears for this special mode beyond kdump. Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Otherwise it risks adding arbitrary persistent configuration of the build host into generic dracut initrds such as those for distro installers. Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Additional debugging output can be generated with e.g. dracut option "--stdlog 5" (or short -L5). It shows the chzdev export result, the output of chzdev imports, and an overview of the resulting persistent config within the initrd. On systems, which default to using dracut option "--quiet", you might need an additional "--verbose" to counter "--quiet" so -L5 has effect. Typically combined with "--debug" to get a shell trace from building an initrd (Note: --debug does not increase the log levels). Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Chzdev import generates persistent device configuration which are hostonly files. Dracut cmdline rd.hostonly=0 should be able to delete those. Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Dracut knows exactly what dependencies it needs. Do not break it by accidentally missing parts in the chzdev persistent configuration (/etc/udev/rules.d/41-*.rules). Depicted as mathematical sets: +-------------------------------+ | active | | +---------------------------------+ | | | persistent | | +------------------------------------+ | | | root / kdump dependencies | | | | was | | | | | | missing| zdev so far | DR | | | +------------------------------------+ | | | | | +-------------------------------+ | | | +---------------------------------+ Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com>
The existing code can already determine the required devices for the actively running system. In case users would have a need to configure additional devices for early boot in kdump initrd, import those devices marked with "zdev:early=1" for completeness. Assuming this is a small number of devices and could even overlap between the root-fs and the kdump case, do not further distinguish those two sets of devices. Signed-off-by: Steffen Maier <maier@linux.ibm.com>
The existing code can already determine the required devices for the actively running system, but this does not work for execution environments in different (disaster recovery) sites. Kdump likely does not notice when running in a different site and does not re-generate the kdump initrd (because the kdump config itself does not change). The new code allows users to explicitly specify devices required for early boot in initrd on different sites. Assuming this is a small number of devices and could even overlap between the root-fs and the kdump case, do not further distinguish those two sets of devices, but simply use the same marker attribute "zdev:early=1" for both cases. With all this site information available at the (initial) kdump initrd generation, the resulting kdump initrd can work on any site without having to re-generate. Complements commit 3c7adcc3c81d ("zdev: dracut: modifiy the module-setup.sh"). Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Add parsing of dracut cmdline option "rd.zfcp=..." at initrd runtime. It delegates configuration to chzdev. Implement `dracut --print-cmdline` and `dracut --hostonly-cmdline` for initrd build time. Emit an rd.zfcp option for each zfcp-attached SCSI disk in dracut's device dependency graph (to mount the root-fs, or to access the kdump target). This allows a distribution independent device configuration. Configuration is consistent by using chzdev as backend. It also prevents duplicate activations of the same device. Along with the existing functionality of zdev/dracut, it makes the following dracut modules superfluous: https://github.com/dracutdevs/dracut/tree/master/modules.d/95zfcp [rd.zfcp.conf is no longer needed and thus ignored here; the preceding ("zdev/dracut: fix marking hostonly files so delete option works") makes rd.hostonly=0 work as a generic replacement] https://github.com/dracutdevs/dracut/tree/master/modules.d/95zfcp_rules Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Converts zdev configuration into the syntax of the kernel module parameter dasd_mod.dasd. Only DASD options with non-default values are emitted. The result string occurs on stdout. It represents one device-specification for the given DASD device bus-ID. Example: /lib/s390-tools/zdev-to-dasd_mod.dasd persistent 0.0.da5d 0.0.da5d(erplog) User: storaged-project/blivet#1162 to generate dracut cmdline entries such as rd.dasd=0.0.da5d(erplog) Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Shell library, which can be sourced by other POSIX compatible shell scripts. Provide helper function parsing its stdin based on the syntax of kernel device driver parameter dasd_mod.dasd= and invoking chzdev to produce corresponding persistent device configurations. The helper function takes one argument, which is either "globals" or "ranges". For a complete configuration, call the function twice, first with "globals" and then with "ranges". The new script library file should be packaged in a core (sub)package of s390-tools so the script is available for initrd environments. Users with examples: Subsequent commit ("zdev/dracut: add rd.dasd parsing") introduces zdev/dracut/95zdev/parse-dasd.sh performing: zdev_parse_rd_dasd | zdev_parse_dasd_list globals 2>&1 | zdev_vinfo zdev_parse_rd_dasd | zdev_parse_dasd_list ranges 2>&1 | zdev_vinfo dracutdevs/dracut#2534 updates modules.d/80cms/cmssetup.sh performing: echo "$DASD" | zdev_parse_dasd_list globals 2>&1 | vinfo echo "$DASD" | zdev_parse_dasd_list ranges 2>&1 | vinfo The parsing code for rd.dasd using the same syntax as dasd_mod.dasd= is inspired by the own implementation that used to be in linuxrc.s390 of https://github.com/rhinstaller/anaconda. https://web.archive.org/web/20190721154444/https://www.redhat.com/archives/anaconda-devel-list/2009-February/msg00392.html https://www.spinics.net/linux/fedora/anaconda-devel/msg08316.html ("Re: Improved linuxrc.s390 (third try)") => 9249e40f42ff ("IBM improvements to linuxrc.s390 (#475350)") https://web.archive.org/web/20190721150254/https://www.redhat.com/archives/anaconda-devel-list/2009-July/msg00310.html => 5f0fcf6688d0 ("Update linuxrc.s390 and friends to reflect review comments.") https://web.archive.org/web/20190721125255/https://www.redhat.com/archives/anaconda-devel-list/2009-August/msg00158.html => 523095c86876 ("Handle activation of DASDs in linuxrc.s390 since loader no longer works") Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Add parsing of dracut cmdline option "rd.dasd=..." at initrd runtime. It delegates configuration to chzdev. Implement `dracut --print-cmdline` and `dracut --hostonly-cmdline` for initrd build time. Emit an rd.dasd option for each DASD disk in dracut's device dependency graph (to mount the root-fs, or to access the kdump target). This allows a distribution independent device configuration. Configuration is consistent by using chzdev as backend. It also prevents duplicate activations of the same device. Copy the udev rule for unique DASD device nodes under /dev/disk/ [59-dasd.rules] into initrd for the same functionality like 95dasd or 95dasd_rules. Along with the existing functionality of zdev/dracut, it makes the following dracut modules superfluous: https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd_mod https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd_rules Signed-off-by: Steffen Maier <maier@linux.ibm.com>
It builds on the previously added helper function in parse-dasd.sh, which gets sourced first by dracut so the function is also available to the later parsing hook parse-zfcp.sh. Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Useful for debugging (what happened during early boot). Also useful for distro installers, which can import the early config into their own environment early after starting: chzdev --import /run/zdev.initrd.config --persistent --yes \ --no-root-update --force --verbose After that, distro installers can modify/add the device config based on interactive or unattended installation choices using chzdev --enable --active --persistent ... Finally, distro installers can likewise transfer the entire device config to the installed system mounted under $SYSROOT: chzdev --export /tmp/zdev.config --all --type --persistent --verbose Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Converts zdev configuration into the syntax of the dracut cmdline option rd.znet. Only znet options with non-default values are emitted. The result string occurs on stdout. It represents one device-specification for the given network interface name. Example: /lib/s390-tools/zdev-to-rd.znet persistent encbdf0 qeth,0.0.bdf0,0.0.bdf1,0.0.bdf2,layer2=1 User: rhinstaller/anaconda#5250 to generate dracut cmdline entries such as rd.znet=qeth,0.0.bdf0,0.0.bdf1,0.0.bdf2,layer2=1 Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Complements commit ("zdev/dracut: retain early persistent config over switch root"). Signed-off-by: Steffen Maier <maier@linux.ibm.com>
For each initrd, collect verbose content listing as well as the content of files matching the file glob patterns in $CONFIGFILES. For dracut-squash such as RHEL kdump, this includes squashfs content. Code is intentionally compatible with dash, so no bashisms. Ubuntu initramfs has zdev persistent device configuration udev rules under /lib/udev/rules.d/ (as opposed to /etc/udev/rules.d/). Ubuntu initramfs stores configuration under /conf/. Ubuntu kdump-tools have initrds under /var/lib/kdump/. SLES auxiliary boot stage with grub2-s390x-emu has initrds under /boot/zipl/. Dracut initramfs stores configuration under /etc/cmdline.d/ and /etc/conf.d/. Dracut kdump have initrds under /boot/. Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Complements commits ("zdev/dracut: prepare to remove dracut module 95zfcp and 95zfcp_rules") ("zdev/dracut: prepare to remove dracut modules 95dasd, 95dasd_mod, 95dasd_rules") and s390utils commits ("zfcp: migrate to consolidated persistent device config with zdev (#1937046,#1937048)") ("dasd: migrate to consolidated persistent device config with zdev (#1937046,#1937048)") . Signed-off-by: Steffen Maier <maier@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
The annotations and the one non-functional code change in zdev/dracut/95zdev-kdump/module-setup.sh check() clear all shellcheck reports. complements 73c46a3 ("zdev/dracut: fix kdump by only activating required devices") Github-ID: #158 Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
…heck Clears all shellcheck reports in old existing code so newly added code can use shellcheck to find newly introduced suboptimal shell code. Github-ID: #158 Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Use namespace prefix in functions of zdev-lib.sh to avoid collisions with different modules being sourced in the shell. Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Add a short explaining comment to those functions, which are just callbacks invoked by the dracut core infrastructure. So nobody wonders how these functions get called, especially if there are no local callers here in the code. Cf. dracut commit dracutdevs/dracut@8bcfd683bd0c ("*/module-setup.sh: add comments for dracut called functions") For more information about the dracut module callback functions: https://github.com/dracutdevs/dracut/blob/master/man/dracut.modules.7.asc#writing-a-module https://github.com/dracutdevs/dracut/blob/master/docs/HACKING.md#writing-modules Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Otherwise, dracut skips modules that are "not hostonly", i.e. not used / loaded on the system when running dracut to build an initrd. Without the fix, zdev device auto configuration only works for device types for which a device driver happened to be loaded when building an initrd. Likewise for specifying rd.* boot options. Hostonly mode is often the default in Linux distributions. Make zdev device auto configuration work nonetheless without users having to know about and tweak dracut modes for initrd generation. On the typical sloppy hostonly mode, the code disables hostonly for installing kernel modules. This covers building regular initrds, where zdev device auto configuration should even work for device types, for which device drivers were not loaded when an initrd was generated. This can happen when new devices of new types are configured for a DPM logical partition. Also, users could want to start using dracut cmdline options rd.{dasd,zfcp,znet} for a device type that was not used when the initrd was built. The special strict hostonly mode is used by some kdump implementations. In that case, hostonly remains in effect intentionally because only support for the really required devices as determined by dracut module 95zdev-kdump should be included in a kdump initrd due to the memory-constrained kdump environment. Cf. commit 73c46a3 ("zdev/dracut: fix kdump by only activating required devices"), which also provides more references on strict hostonly mode. Even for non-kdump cases, let strict hostonly mode be effective here in 95zdev in case some future use case appears for this special mode beyond kdump. Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Otherwise it risks adding arbitrary persistent configuration of the build host into generic dracut initrds such as those for distro installers. Github-ID: #158 Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Additional debugging output can be generated with e.g. dracut option "--stdlog 5" (or short -L5). It shows the chzdev export result, the output of chzdev imports, and an overview of the resulting persistent config within the initrd. On systems, which default to using dracut option "--quiet", you might need an additional "--verbose" to counter "--quiet" so -L5 has effect. Typically combined with "--debug" to get a shell trace from building an initrd (Note: --debug does not increase the log levels). Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Chzdev import generates persistent device configuration which are hostonly files. Dracut cmdline rd.hostonly=0 should be able to delete those. Github-ID: #158 Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Dracut knows exactly what dependencies it needs. Do not break it by accidentally missing parts in the chzdev persistent configuration (/etc/udev/rules.d/41-*.rules). Depicted as mathematical sets: +-------------------------------+ | active | | +---------------------------------+ | | | persistent | | +------------------------------------+ | | | root / kdump dependencies | | | | was | | | | | | missing| zdev so far | DR | | | +------------------------------------+ | | | | | +-------------------------------+ | | | +---------------------------------+ Github-ID: #158 Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
The existing code can already determine the required devices for the actively running system. In case users would have a need to configure additional devices for early boot in kdump initrd, import those devices marked with "zdev:early=1" for completeness. Assuming this is a small number of devices and could even overlap between the root-fs and the kdump case, do not further distinguish those two sets of devices. Github-ID: #158 Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
The existing code can already determine the required devices for the actively running system, but this does not work for execution environments in different (disaster recovery) sites. Kdump likely does not notice when running in a different site and does not re-generate the kdump initrd (because the kdump config itself does not change). The new code allows users to explicitly specify devices required for early boot in initrd on different sites. Assuming this is a small number of devices and could even overlap between the root-fs and the kdump case, do not further distinguish those two sets of devices, but simply use the same marker attribute "zdev:early=1" for both cases. With all this site information available at the (initial) kdump initrd generation, the resulting kdump initrd can work on any site without having to re-generate. Complements commit 3c7adcc3c81d ("zdev: dracut: modifiy the module-setup.sh"). Github-ID: #158 Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Add parsing of dracut cmdline option "rd.zfcp=..." at initrd runtime. It delegates configuration to chzdev. Implement `dracut --print-cmdline` and `dracut --hostonly-cmdline` for initrd build time. Emit an rd.zfcp option for each zfcp-attached SCSI disk in dracut's device dependency graph (to mount the root-fs, or to access the kdump target). This allows a distribution independent device configuration. Configuration is consistent by using chzdev as backend. It also prevents duplicate activations of the same device. Along with the existing functionality of zdev/dracut, it makes the following dracut modules superfluous: https://github.com/dracutdevs/dracut/tree/master/modules.d/95zfcp [rd.zfcp.conf is no longer needed and thus ignored here; the preceding ("zdev/dracut: fix marking hostonly files so delete option works") makes rd.hostonly=0 work as a generic replacement] https://github.com/dracutdevs/dracut/tree/master/modules.d/95zfcp_rules Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Converts zdev configuration into the syntax of the kernel module parameter dasd_mod.dasd. Only DASD options with non-default values are emitted. The result string occurs on stdout. It represents one device-specification for the given DASD device bus-ID. Example: /lib/s390-tools/zdev-to-dasd_mod.dasd persistent 0.0.da5d 0.0.da5d(erplog) User: storaged-project/blivet#1162 to generate dracut cmdline entries such as rd.dasd=0.0.da5d(erplog) Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Shell library, which can be sourced by other POSIX compatible shell scripts. Provide helper function parsing its stdin based on the syntax of kernel device driver parameter dasd_mod.dasd= and invoking chzdev to produce corresponding persistent device configurations. The helper function takes one argument, which is either "globals" or "ranges". For a complete configuration, call the function twice, first with "globals" and then with "ranges". The new script library file should be packaged in a core (sub)package of s390-tools so the script is available for initrd environments. Users with examples: Subsequent commit ("zdev/dracut: add rd.dasd parsing") introduces zdev/dracut/95zdev/parse-dasd.sh performing: zdev_parse_rd_dasd | zdev_parse_dasd_list globals 2>&1 | zdev_vinfo zdev_parse_rd_dasd | zdev_parse_dasd_list ranges 2>&1 | zdev_vinfo dracutdevs/dracut#2534 updates modules.d/80cms/cmssetup.sh performing: echo "$DASD" | zdev_parse_dasd_list globals 2>&1 | vinfo echo "$DASD" | zdev_parse_dasd_list ranges 2>&1 | vinfo The parsing code for rd.dasd using the same syntax as dasd_mod.dasd= is inspired by the own implementation that used to be in linuxrc.s390 of https://github.com/rhinstaller/anaconda. https://web.archive.org/web/20190721154444/https://www.redhat.com/archives/anaconda-devel-list/2009-February/msg00392.html https://www.spinics.net/linux/fedora/anaconda-devel/msg08316.html ("Re: Improved linuxrc.s390 (third try)") => 9249e40f42ff ("IBM improvements to linuxrc.s390 (#475350)") https://web.archive.org/web/20190721150254/https://www.redhat.com/archives/anaconda-devel-list/2009-July/msg00310.html => 5f0fcf6688d0 ("Update linuxrc.s390 and friends to reflect review comments.") https://web.archive.org/web/20190721125255/https://www.redhat.com/archives/anaconda-devel-list/2009-August/msg00158.html => 523095c86876 ("Handle activation of DASDs in linuxrc.s390 since loader no longer works") Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Add parsing of dracut cmdline option "rd.dasd=..." at initrd runtime. It delegates configuration to chzdev. Implement `dracut --print-cmdline` and `dracut --hostonly-cmdline` for initrd build time. Emit an rd.dasd option for each DASD disk in dracut's device dependency graph (to mount the root-fs, or to access the kdump target). This allows a distribution independent device configuration. Configuration is consistent by using chzdev as backend. It also prevents duplicate activations of the same device. Copy the udev rule for unique DASD device nodes under /dev/disk/ [59-dasd.rules] into initrd for the same functionality like 95dasd or 95dasd_rules. Along with the existing functionality of zdev/dracut, it makes the following dracut modules superfluous: https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd_mod https://github.com/dracutdevs/dracut/tree/master/modules.d/95dasd_rules Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
It builds on the previously added helper function in parse-dasd.sh, which gets sourced first by dracut so the function is also available to the later parsing hook parse-zfcp.sh. Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Useful for debugging (what happened during early boot). Also useful for distro installers, which can import the early config into their own environment early after starting: chzdev --import /run/zdev.initrd.config --persistent --yes \ --no-root-update --force --verbose After that, distro installers can modify/add the device config based on interactive or unattended installation choices using chzdev --enable --active --persistent ... Finally, distro installers can likewise transfer the entire device config to the installed system mounted under $SYSROOT: chzdev --export /tmp/zdev.config --all --type --persistent --verbose Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Converts zdev configuration into the syntax of the dracut cmdline option rd.znet. Only znet options with non-default values are emitted. The result string occurs on stdout. It represents one device-specification for the given network interface name. Example: /lib/s390-tools/zdev-to-rd.znet persistent encbdf0 qeth,0.0.bdf0,0.0.bdf1,0.0.bdf2,layer2=1 User: rhinstaller/anaconda#5250 to generate dracut cmdline entries such as rd.znet=qeth,0.0.bdf0,0.0.bdf1,0.0.bdf2,layer2=1 Github-ID: #158 Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Complements commit ("zdev/dracut: retain early persistent config over switch root"). Github-ID: #158 Reviewed-by: Fedor Loshakov <loshakov@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
For each initrd, collect verbose content listing as well as the content of files matching the file glob patterns in $CONFIGFILES. For dracut-squash such as RHEL kdump, this includes squashfs content. Code is intentionally compatible with dash, so no bashisms. Ubuntu initramfs has zdev persistent device configuration udev rules under /lib/udev/rules.d/ (as opposed to /etc/udev/rules.d/). Ubuntu initramfs stores configuration under /conf/. Ubuntu kdump-tools have initrds under /var/lib/kdump/. SLES auxiliary boot stage with grub2-s390x-emu has initrds under /boot/zipl/. Dracut initramfs stores configuration under /etc/cmdline.d/ and /etc/conf.d/. Dracut kdump have initrds under /boot/. Github-ID: #158 Reviewed-by: Fedor Loshakov <loshakov@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
Complements commits ("zdev/dracut: add rd.zfcp cmdline option handling") ("zdev/dracut: add rd.dasd cmdline option handling") and s390utils commits ("zfcp: migrate to consolidated persistent device config with zdev (#1937046,#1937048)") ("dasd: migrate to consolidated persistent device config with zdev (#1937046,#1937048)") . Github-ID: #158 Reviewed-by: Fedor Loshakov <loshakov@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
hoeppnerj
pushed a commit
that referenced
this pull request
Dec 14, 2023
This way, dracut cleans up everything just in case the "rm" here fails. Github-ID: #158 Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Acked-by: Vineeth Vijayan <vneethv@linux.ibm.com> Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This was referenced Apr 2, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Consolidate the persistent and dynamic configuration of s390-specific devices in Linux distributions by delegating the configuration to the existing framework
zdev
from s390-tools.This pull request prepares s390 device configuration in initrds built by
dracut
for a Linux distribution independent mechanism.Integrated in https://github.com/ibm-s390-linux/s390-tools/releases/tag/v2.31.0 (PR not merged but the individual commits were integrated).
Zdev's job is to perform low-level configuration after which the user gets architecture-independent objects such as block devices, SCSI devices, or network interfaces. Those can and should in turn be configured with existing common code mechanisms. So there's a clear separated layering for configuration duties.
In particular, the s390-specific devices currently are: DASD, ZFCP, and ZNET representing channel-attached network (QETH incl. OSA and HiperSockets, LCS, CTC). Zdev has a stable command line user interface and abstracts from sysfs and from a persistent configuration representation. Zdev encapsulates configuration details. Systems management code can simply delegate configuration to zdev and thus reduce architecture-specific code.
This improves user experience, serviceability, maintainability, and reduces test effort.
@ngueorguiev @sharkcz