* Thu Mar 10 2022 Marcus Schäfer - Bump version: 9.24.28 → 9.24.29 * Thu Mar 10 2022 Marcus Schäfer - Don\'t bind mount /run during build time In commit #9512318 a new bind mount of /run into the root tree during build time was introduced. The bind mount was done because in my tests running podman from config.sh it did not work without /run bind mounted. However, it turned out that I was wrong because along with the provided methods to prepare cgroups and a custom runtime configuration method; setupContainerRuntime() it is not needed to have /run bind mounted. Thus this commit deletes the bind mount of /run and therefore Fixes #2067 * Thu Mar 10 2022 Marcus Schäfer - Fix github action running obs service refresh The curl command to send the POST request for running the obs remote service uses the --fail-with-body option. Unfortunately the ubuntu-latest container used to run the action comes with a curl version that does not support the option. Thus this commit removes the use of the option * Wed Mar 09 2022 Dan Čermák <45594031+dcermakAATTusers.noreply.github.com>- Style changes in container docs Reformulate the container building guide a bit * Wed Mar 09 2022 David Cassany - Update schema docs Signed-off-by: David Cassany * Tue Mar 08 2022 Marcus Schäfer - Provide schema version v7.5 in spec * Tue Mar 08 2022 Marcus Schäfer - Update descriptions to schema v7.5 * Sun Mar 06 2022 Marcus Schäfer - Update cron for security scorecard Run weekly on Saturdays * Fri Mar 04 2022 Marcus Schäfer - Add support for extended layout to msdos table This commit adds the following new type attribute If set it specifies to make use of logical partitions inside of an extended one. Effective only on type configurations which uses the msdos table type, it will cause the fourth partition to be an extended partition and all following partitions will be placed as logical partitions inside of that extended partition. This setting is useful if more than 4 partitions needs to be created in an msdos table. In addition to the support for extended/logical partitions the the attributes \'mountpoint\' and \'filesystem\' in the section becomes optional. This also allows to place partitions as placeholders not mounted into the system * Fri Mar 04 2022 Marcus Schäfer - Added type hints for partitioner interface * Fri Mar 04 2022 Marcus Schäfer - Bump version: 9.24.27 → 9.24.28 * Thu Mar 03 2022 Marcus Schäfer - Fixed unconditional grub2 package requirement The grub2 package does not exist on all distributions as a name provider independent of the architecture. On for example Debian and Ubuntu the packages are handled differently and grub2 is only provided on supported architectures. Thus the spec file should set the grub2 requirement only if the distribution provides it in any case * Wed Mar 02 2022 Marcus Schäfer - Bump version: 9.24.26 → 9.24.27 * Tue Mar 01 2022 Marcus Schäfer - Added overlayroot_verity_blocks attribute Setting this attribute to a number or \'all\' in an overlayroot configuration will create a dm verity hash from the number of given blocks (or all) placed at the end of the squashfs compressed read-only root filesystem. For later verification of the device, and without further image description settings, the credentials information produced by veritysetup from the cryptsetup tools, is created as a file in /boot/overlayroot.verity and is stored as such into the image by default. * Tue Mar 01 2022 Marcus Schäfer - Fixed disk.sh caller environment The documentation explains the disk.sh script to be called from inside of the image root as it exists on the block layer. The disk.sh script is therefore also called after the sync of the unpacked image root tree to the block layer. The implementation however, was only partially calling disk.sh from such an environment. In fact the environment was only the mountpoint of the root partition but this is not the complete system regarding layouts that uses extra partitions and/or volumes. This commit introduces the use of the new class ImageSystem and calls disk.sh in the way it was designed and documented. * Tue Mar 01 2022 Marcus Schäfer - Added ImageSystem class The class responsibility is to provide access to the image root system from the block layer of the image scope * Tue Mar 01 2022 Marcus Schäfer - Prevent superfluous filesystem creation In case of an overlayroot setup and the request for no extra write partition, it is not needed to create a filesystem for the write space which never gets synced to the image * Sat Feb 26 2022 Marcus Schäfer - Bump version: 9.24.25 → 9.24.26 * Sat Feb 26 2022 Marcus Schäfer - Fixed destructor test on oci_tools/buildah_test.py Calling del() from teardown breaks when the method is called through teardown_method * Sat Feb 26 2022 Marcus Schäfer - Bump version: 9.24.24 → 9.24.25 * Sat Feb 26 2022 Marcus Schäfer - Support nose and xunit style tests The modifications in this commit allows the unit tests to run on both, pytest 6.x (nose test layout) and the new pytest 7.x (xunit test layout). This Fixes #2072 in a much nicer way. Thanks much to AATTsmarlowucf * Fri Feb 25 2022 Marcus Schäfer - Update unit test to work in obs Some unit tests fails if they run in an obs environment. This is because the implementation checks the runtime envoironment and behaves differently if the system is an obs worker. The unit tests has to explicitly set this condition right for the test * Fri Feb 25 2022 Marcus Schäfer - Revert \"Unit test adaptions to pytest v7\" This reverts commit 0dc2e803e0e8059c54a0ea23960245286675c86c. The pytest interface from version v6 to v7 has received changes which requires the tests to be adapted to work for either the old or the new interface. As there are still many distributions which uses v6 as the standard we decided to revert back the adaptions done to support v7 and create a version requirement to v6 in .virtualenv.dev-requirements.txt This Fixes #2072 * Wed Feb 23 2022 Marcus Schäfer - Added overlayroot_readonly_partsize attribute Specifies the size in MB of the partition which stores the squashfs compressed read-only root filesystem in an overlayroot setup. This Fixes #2068 * Wed Feb 23 2022 Marcus Schäfer - Update to scorecard CI 1.0.4 * Tue Feb 22 2022 Marcus Schäfer - Added debootstrap log info to exception message In case debootstrap fails there is more detailed information in a logfile written by debootstrap itself. This commit changes the exception information to contain this log information if present. Related to Issue #1800 * Sun Feb 20 2022 Marcus Schäfer - Bump version: 9.24.23 → 9.24.24 * Sun Feb 20 2022 Marcus Schäfer - Added overlayroot_write_partition attribute For the oem type only, allows to specify if the extra read-write partition in an overlayroot setup should be created or not. By default the partition is created and the kiwi-overlay dracut module also expect it to be present. However, the overlayroot feature can also be used without an initrd and under certain circumstances it is handy to configure if the partition table should contain the read-write partition or not. * Sat Feb 19 2022 Matt Coleman - Use DEB822-formatted .sources files instead .list files for APT * Tue Feb 15 2022 David Cassany - Support additional names for docker containers Docker containers used to support the attribute `additionaltags` which was used to provide multiple tags for the same image. Since only tags were supported this commit renames the attribute to `additionalnames` and now supports tags and names witht he following syntax: * \':\' -> adds a full docker image reference including name and tag * \':\' -> adds an additional tag while reusing the former name * \'\' -> adds an additional name while reusing the former tag Fixes #2045 Signed-off-by: David Cassany * Mon Feb 14 2022 Marcus Schäfer - Follow up fix on force deleting debs Also remove eventual post scripting prior force removal of deb packages. Similar inconsistencies as with the pre scripts can occur on force removal. We want the operation to be successful in force mode even if that means to leave a dirty state. * Sat Feb 12 2022 Marcus Schäfer - Add support for pre_disk_sync.sh script The optional pre_disk_sync.sh script is executed for the disk image type oem only and runs right before the synchronisation of the root tree into the disk image loop file. The script hook can be used to change content of the root tree as a last action before the sync to the disk image is performed. This is useful for example to delete components from the system which were needed before or cannot be modified afterwards when syncing into a read-only filesystem. * Thu Feb 10 2022 Marcus Schäfer - Create ci-scorecards-analysis.yml Create security health metrics score card * Tue Feb 08 2022 Marcus Schäfer - Fixup inplace podman storage and container conf Newer versions of podman requires runroot and graphroot to be explicitly set in storage.conf. Newer versions of podman no longer reads the engine.cgroups setting on containers.conf and prints a \'Failed to decode the keys [\\\"engine.cgroups\\\"]\' warning message This commit fixes storage.conf and containers.conf written by kiwi if the setupContainerRuntime method is used in scripts. * Tue Feb 08 2022 David Cassany - Make use of container name in OCI images Fixes #2050 Signed-off-by: David Cassany * Mon Feb 07 2022 Marcus Schäfer - Bump version: 9.24.22 → 9.24.23 * Mon Feb 07 2022 Marcus Schäfer - Fixed name of secret variable The ci-update-build-tests action used a wrong variable name which does not exist in the github secrets. This commit fixes it and uses the correct variable name * Mon Feb 07 2022 Marcus Schäfer - Bump version: 9.24.21 → 9.24.22 * Mon Feb 07 2022 Marcus Schäfer - Revert \"Revert \"Fixed MicroOS build test\"\" This reverts commit 8c4464b8ff2af2642439ce92e1e2be497f2b0f4d. snapper default config has moved from /etc to /usr/share now hopefully for the last time * Mon Feb 07 2022 Marcus Schäfer - Fixed unit tests The pytest interface setup() method call has changed in a way that an additional parameter is passed to the method which leads to a python error at invocation time if the setup method does not define it. * Mon Feb 07 2022 Neal Gompa - build-tests: Update CentOS 8 test appliance to CentOS Stream 8 CentOS Linux 8 is now EOL, so switch over to CentOS Stream 8. * Fri Feb 04 2022 Marcus Schäfer - Fixed handling of oem reboot settings There are oem settings called oem-reboot, oem-reboot-interactive as well as oem-shutdown and oem-shutdown-interactive. When used the information is passed along to the profile but not evaluated by any initrd code. I don\'t know where on the way we lost the code that actually works with these settings but this commit makes them effective. This Fixes #2056 * Thu Feb 03 2022 Dirk Müller - treat armv8l as armv7hl openSUSE switched from armv7hl buildworkers to aarch64 in 32bit mode which identifies itself as \"armv8l\" in uname -m. * Tue Feb 01 2022 Marcus Schäfer - Bump version: 9.24.20 → 9.24.21 * Mon Jan 31 2022 Marcus Schäfer - Fixed UUID used in grub early boot script In case the system is luks encrypted the UUID of the root partition was used in the grub early boot script. However, this condition is only correct if in addition to the luks encryption the boot area is on crypto too. If boot is not on crypto the UUID must be the boot partition and not root. Only if root AND boot is on crypto the kiwi created early boot script includes the grub cryptomount calls. * Sat Jan 29 2022 Marcus Schäfer - Bump version: 9.24.19 → 9.24.20 * Sat Jan 29 2022 Marcus Schäfer - Followup fix for force deleting debian packages The force uninstall deletes pre scripts prior removal because if they fail the package will not be removed. For a force uninstall we consider this ok. However, the deletion of the scripts did not happen in the image root. This patch fixes it * Wed Jan 26 2022 Marcus Schäfer - Followup fix for force deleting debian packages Pass --force-depends to allow uninstall even if the dependency checker complains * Tue Jan 25 2022 Marcus Schäfer - Fix use of xattrs for container sync when syncing data for containers only a subset of xattr attributes can be applied. This Fixes #2009 * Tue Jan 25 2022 Marcus Schäfer - Bump version: 9.24.18 → 9.24.19 * Tue Jan 25 2022 Neal Gompa - Ensure SELinux labels are set based on the policy When running kiwi from a filesystem tree that has custom labels applied (such as when using kiwi from within a container on an SELinux-enabled host), the filesystem labeling doesn\'t correctly apply on some files and folders with a warning about the location being customized by the administrator. This causes all kinds of strange results with the built images and makes them unbootable. To resolve this, tell setfiles to forcibly set files and folders with the default context from the installed policy. * Tue Jan 25 2022 Fabian Vogt - Extend and update documentation about /etc/machine-id setup * Tue Jan 25 2022 Fabian Vogt - Fix ordered list in shell_scripts.rst Ordered lists must be indented by three spaces, otherwise the numbering breaks. * Mon Jan 24 2022 Marcus Schäfer - Bump version: 9.24.17 → 9.24.18 * Mon Jan 24 2022 David Cassany - Fix ramdisk deployments from PXE This commit fixes PXE deployments on ramdisk. In such cases the former fix from df4e62a4 is not sufficient as there is no `root=` parameter within the kernel cmd line and hence this logic is never executed. Signed-off-by: David Cassany * Fri Jan 21 2022 David Cassany - Update outdated PKGBUILD for Arch Linux Signed-off-by: David Cassany * Fri Jan 21 2022 Marcus Schäfer - Fixed unit test race condition * Fri Jan 21 2022 Marcus Schäfer - Fixed grub loader/entries setup If called in non standard environments like an OBS worker the grub tooling does not work correctly and produces invalid results. For these cases kiwi provides a collection of fix_ methods to change the produced results. This commit covers the invalid path in loader/entries/ *.conf files pointing to the kernel and the initrd as they exist in the image-root directory. This results for example in settings like: linux /usr/src/packages/KIWI-oem/build/image-root/boot/vmlinuz-5.14.0-43.el9.x86_64 when it should be: linux /boot/vmlinuz-5.14.0-43.el9.x86_64 This Fixes #2038 * Fri Jan 21 2022 Fabian Vogt - Set /.snapshots subvolume to mode 0700 (bsc#1194992) Avoid that users other than root can enter or even change the content. This is what snapper does as well. * Fri Jan 21 2022 Marcus Schäfer - Fixed build_status helper output issue Starting with CentOS stream 9 integration tests a new layer in the project that builds it was added. This changed the osc results output and messed up the build_status helper output a bit. This commit fixes it * Thu Jan 20 2022 Marcus Schäfer - Fix the uninstall(force) on Debian based dists Packages marked for uninstall via failed to become removed for several reasons. The way this was done in kiwi did not work because dpkg needs to be called differently and with some nasty pre-processing in order to allow for force deletion. In force mode we also allow to remove packages marked as essential. In gracefull uninstall mode this commit makes sure the environment is prepared and does not fail for false-positive reasons. * Wed Jan 19 2022 Marcus Schäfer - Added mail map Added information about my private e-mail being the successor for the work done when I was an employee of SUSE * Tue Jan 18 2022 Marcus Schäfer - Allow calling podman within chroot Added helper functions and env preparation code to allow calling podman from within a chroot. This allows to run podman from e.g config.sh and also inside of OBS workers * Tue Jan 18 2022 Marcus Schäfer - Fix requirements for kiwi-systemdeps-filesystems Extend btrfs condition applying for EL8 to apply for EL9 too * Fri Jan 14 2022 Marcus Schäfer - Bump version: 9.24.16 → 9.24.17 * Fri Jan 14 2022 Marcus Schäfer - Fixed image builds without kernel If an image is build without a kernel kiwi fails due to some code paths expecting the presence of kernel modules and or kernel binaries. This commit fixes this and allows creating an image without installing a kernel. * Fri Jan 14 2022 Marcus Schäfer - Added CentOS Stream 9 integration tests * Thu Jan 13 2022 Fabian Vogt - Allow \"uninitialized\" as content of /etc/machine-id According to machine-id(5), an empty file does not signal that this is the first boot of the system. Instead, the file needs to be missing or contain the string \"uninitialized\". A missing file does not work if the filesystem is initially mounted read-only, so allow \"uninitialized\" as well, instead of truncating it. Improve the documentation of the method, e.g. dracut is not involved. * Thu Jan 13 2022 Fabian Vogt - Fix booting GRUB submenu entries with hybrid images (linux/linuxefi) Variables assigned with \"set\" are not visible in submenus for some reason. Export $linux and $initrd, so that they also work in submenu entries. Fixes bsc#1192523 * Thu Jan 13 2022 Fabian Vogt - Don\'t copy GRUB modules for EFI with secure boot enabled When booting grub.efi with secure boot enabled, modules can\'t be loaded and thus the grub.efi image needs to be complete. Save some space in live images by not copying them into the ISO filesystem. Fixes part of #1750 * Thu Jan 13 2022 Fabian Vogt - Don\'t include the ESP in the ISO9660 partition as well (#1750) Previously the image for the ESP was created inside the source directory for the ISO9660 filesystem, so it ended up there as well as a separate partition. Fix that by creating it as a temporary file instead. * Thu Jan 13 2022 Marcus Schäfer - Automate build-tests OBS service refresh This commit provides a new github action which sends API requests to the OBS api to refresh the source services for the integration tests on the OBS server side. This Fixes #1980 * Wed Jan 12 2022 Marcus Schäfer - Added docker integration test for Ubuntu * Wed Jan 12 2022 Marcus Schäfer - Update ubuntu integration test to Hirsute(21.04) * Tue Jan 11 2022 Marcus Schäfer - Bump version: 9.24.15 → 9.24.16 * Sun Jan 09 2022 Marcus Schäfer - Fixed regression in compression detection The change from 282529de8f612dee32d54ee868c2365dcd829220 Introduced a bad regression. The assumption was made that the xz tool could be used to detect if a file is compressed or not. However, this requires the file to be locally present. In the scope of the method call is_compressed() and within a remote deployment e.g PXE this is not the case. Therefore the former way to \"detect\" the compression according to the .xz postfix of the source filename was restored. In addition the function name was changed to is_xz_compressed() because that\'s what the method can do and not more. This Fixes #2015 * Fri Jan 07 2022 Marcus Schäfer - Added debug option --debug-run-scripts-in-screen Instead of running scripts in screen if the --debug switch is set, we allow to explicitly switch on this behavior via a new option. This Fixes #2010 * Fri Jan 07 2022 Marcus Schäfer - Change packages target for bootincludes Packages marked with bootinclude=\"true\" will be added to the referenced kiwi boot image description if the initrd_system is set to \"kiwi\" instead of \"dracut\". The package marked was primarily added to the type=\"image\" section and got only added to the type=\"bootstrap\" section if no image type section existed. However, it has turned out that this approach has the disadvantage that packages which must be installed as part of the bootstraping (e.g certificates) cannot be handled. This commit changes the behavior of the bootinclude to include the package always to the type=\"bootstrap\" section. * Fri Jan 07 2022 Marcus Schäfer - Add GitHub workflow badges * Fri Jan 07 2022 Marcus Schäfer - Fixed Codacy Badge * Sun Jan 02 2022 Marcus Schäfer - Allow firmware=\"custom\" setting The firmware attribute in kiwi is used to indicate for which boot firmware the image should be build. Specifying the target firmware is helpful to create for example the correct disk layout. If no firmware is specified KIWI decides for a default according to the image architecture. This selection is not 100% accurate and as we don\'t know the later target system. Especially for embedded devices the correct disk layout and other settings can be board specific and KIWI\'s default settings regarding the firmware could be invalid. For compatibility reasons we cannot switch off the default selection case and therefore a new attribute value \"custom\" is introduced with this commit. If set KIWI does not select any firmware and consequently all settings caused by a firmware setup will be skipped. On the other hand this means all needed settings for the target to boot and not done by KIWI needs to be specified explicitly and as needed. * Sun Jan 02 2022 Neal Gompa - Add util-linux dep for -systemdeps-disk-images subpackage Without this dependency, kiwi fails to work properly in minimal image build environments, like in a mock chroot where util-linux is not installed. * Fri Dec 17 2021 Tanja Roth - index.rst: fix headline * third try: apply diff by schaefi * Fri Dec 17 2021 Tanja Roth - index.rst: fix headline * removed lonely bracket * added more lines to fix syntax * Thu Dec 16 2021 Tanja Roth - index.rst: Change title (bsc#1189294#c2) * \'KIWI NG 9: KIWI NG Documentation\' -> \'Building Linux System Appliances with KIWI Next Generation (KIWI NG ) * suggested in bsc#1189294#c2 for more clarity * change has been discussed with and approved by main author (Marcus S.) * Thu Dec 16 2021 Rüdiger Oertel - support compressed modules in other formats when cleaning up the firmware directory for unused files * Thu Dec 16 2021 Marcus Schäfer - Bump version: 9.24.14 → 9.24.15 * Wed Dec 15 2021 Marcus Schäfer - Update documentation Rework troubleshooting chapter and add an article about app security subsystems like selinux and their potential influence on building images. Also update the quickstart with a reference to the troublshooting chapter. This Fixes #1891 * Wed Dec 08 2021 Marcus Schäfer - Added support for collection modules In CentOS Stream 8 and Red Hat Enterprise Linux 8, there are Application Streams that are offered in the form of modules (using Fedora Modularity technology). To build images that use this content KIWI needs to support to enable/disable various modules. This commit allows to configure collection modules in a new element as shown below This Fixes Issue #1999 * Mon Dec 06 2021 Marcus Schäfer - Bump version: 9.24.13 → 9.24.14 * Sun Dec 05 2021 Marcus Schäfer - Disable intersphinx intersphinx is a doc extension which links to the documentation of objects in other projects whenever Sphinx encounters a cross-reference that has no matching target in the current documentation set, it looks for targets in the documentation sets configured in the intersphinx_mapping. However, the kiwi docs do not use this feature thus it can be disabled. * Tue Nov 30 2021 David Cassany - Compress container images in builder class This commit changes the stage at which container images are compressed to match the criteria applied to other image types. Instead of compressing the image in OCI devoted classes now it is happening in builder class by setting Result instance properties. Fixes #1996 Signed-off-by: David Cassany * Mon Nov 29 2021 Marcus Schäfer - Revert \"Fixed MicroOS build test\" This reverts commit 52c38f9ec22aef484efaf0a570dc78eea529deec. The TW people moved to an older version of libsnapper, no idea what these guys are doing * Mon Nov 29 2021 John Paul Adrian Glaubitz - kiwi-repart: Fix spelling error in source code comment * Mon Nov 29 2021 John Paul Adrian Glaubitz - Fix multiple minor spelling errors in documentation * Mon Nov 29 2021 Marcus Schäfer - Added support for setting up release version Currently the release version is not set or set to \'0\' for package managers which requires a value to operate. However, in order to support leveraging the same description across different releases it is important to have the opportunity to specify a setting for the release version. This commit adds a new optional attribute to the preferences section which allows to specify a custom value which serves as the release version: TEXT If not specified the default setting as before applies. Please note the release version information is currently used in dnf and microdnf package managers only. It might happen that it gets applied to the other package manager backends as well. This will happen on demand though. Related to Issue #1918. This Fixes #1927 * Mon Nov 29 2021 Marcus Schäfer - Bump version: 9.24.12 → 9.24.13 * Mon Nov 29 2021 Marcus Schäfer - Add global --kiwi-file option When building with kiwi a search on the kiwi main config file is made inside of the given --description directory. The search looks up for the file config.xml or *.kiwi. So far there was no opportunity to specify another name. This commit adds an option in the global area named: - -kiwi-file name which will make kiwi to lookup this file inside of the given --description directory and fail if it does not exist. This Fixes #1973 * Mon Nov 29 2021 Marcus Schäfer - Added type hints for CliTask class * Fri Nov 26 2021 Marcus Schäfer - Bump version: 9.24.11 → 9.24.12 * Thu Nov 25 2021 Marcus Schäfer - Use realpath to resolve this:// location * Thu Nov 25 2021 Marcus Schäfer - Support this:// resource locator for includes Allow include references like the following example: * Thu Nov 25 2021 Marcus Schäfer - Allow repo path relative to the image description This commit adds a new URI type called this://... The this:// part will be resolved into the absolute path to the image description. A source path like the following: is resolved to This change provides the requested opportunity to reference repos provided as part of the image description and Fixes #1964 * Thu Nov 25 2021 Marcus Schäfer - Care for different snapper template locations snapper recently changed their config template location from etc/ to usr/. This commit handles the two locations and Fixes bsc#1192940 * Thu Nov 25 2021 Marcus Schäfer - Prevent warning message on resize exception On systems which are configured to run the oem resize at every boot (default case) kiwi checks how much space is free and if that fits the constraints configured as part of the image description. If the constraints are not met a warning message is displayed and the boot continuous without any resize action happening. This warning message however, always appears after the first boot when the resize had happened and no rest space on disk is present unless the disk geometry would have changed. The situation of the reboot of the system without any disk geometry change is the standard case and happens way more often than the reboot with a disk geometry change. Therefore the warning message displayed is not actually a real warning and most often considered as an issue when there is none. To relax this situation, this commit only shows the warning message if the detected free space on disk is greater than 2M, which is the condition under which we assume an intentional (user made) disk geometry change. This Fixes #1958 * Wed Nov 24 2021 Marcus Schäfer - Bump version: 9.24.10 → 9.24.11 * Wed Nov 24 2021 Justin <47017732+TheMisanthropicHumanistAATTusers.noreply.github.com>- Fix Source Install Disk Detection in get_disk_list (#1982) Fix Source Install Disk Detection in get_disk_list The original check doesn\'t always work because PARTITIONS get labels, NOT disks. If you install with a Flash Drive and deploy to a machine with an NVMe drive, the Flash Drive is listed first because SCSIs are shown first by lsblk (At least they were in our scenario). When we run blkid \"[Install Flash Drive Disk]\" -s LABEL -o value in this scenario, we get nothing returned so this conditional evaluates incorrectly. We should get the ${kiwi_install_volid} Partition Block Name, and search for whether ${disk_device} is contained within it as the Disk Device that corresponds to the Install Partition. * Tue Nov 23 2021 Marcus Schäfer - Do not force dracut into a compression setting So far we called dracut with --xz which forces the initrd to be xz compressed. There are other compression formats used by the distributions and they might differe from xz. The selection for a compression tool is done by a dist configuration in dracut.conf.d which is provided by the distributions as they see fit. For us this means not forcing dracut into a specific compression setting allows to make use of the distro provided setting and also allows to change/override this setting by an overlay file. This Fixes bsc#1192975 * Tue Nov 23 2021 Marcus Schäfer - Bump version: 9.24.9 → 9.24.10 * Tue Nov 23 2021 Marcus Schäfer - Added documentation about sharing backends The kiwi boxbuild plugin supports several sharing backends. Details about them and eventual pre-setup steps prior use are mentioned in this document * Tue Nov 23 2021 Marcus Schäfer - Fixed MicroOS build test snapper default config has moved from /etc to /usr/share * Mon Nov 22 2021 Marcus Schäfer - Bump version: 9.24.8 → 9.24.9 * Mon Nov 22 2021 Marcus Schäfer - Bump version: 9.24.7 → 9.24.8 * Mon Nov 22 2021 Marcus Schäfer - Added support for reading metalink in info module For resolver operations through libsolv the \'kiwi image info\' module exists. So far it could not read the repos from metalink repo definitions. This Fixes #1890 * Fri Nov 19 2021 David Cassany - Force key attribute from signing element to be treated as a URI Signed-off-by: David Cassany * Thu Nov 18 2021 David Cassany - Pass signing keys from the XML to the repositories This commits makes sure signing keys are passed to repositories setup in build task. Signed-off-by: David Cassany * Thu Nov 18 2021 Marcus Schäfer - Move static sle15 integration test to git * Tue Nov 16 2021 Marcus Schäfer - Bump version: 9.24.6 → 9.24.7 * Mon Nov 15 2021 Marcus Schäfer - Fixed raid integration test using extra boot part Due to changes in the distribution the tests needs some adaptions. The kernel as provided now by TW uses symlinks from boot to /usr/lib/modules/... to point to the kernel binary. Of course this breaks for any system that uses /boot on another partition. Those image tests which were testing this aspect needs fixing. * Mon Nov 15 2021 Dan Čermák - Make sure fedora-release is installed on Rawhide Follow up to #1957 and #1962: The Fedora build tests were using the generic release package and not fedora-release. This issue has been partially fixed in #1962, but we forgot to port the fix to the rawhide images as well. This commit adds the missing package to the Rawhide images as well. * Fri Nov 12 2021 Marcus Schäfer - Bump version: 9.24.5 → 9.24.6 * Fri Nov 12 2021 Marcus Schäfer - Followup fix for debootstrap called only once A recent change skipped calling debootstrap if the allow-existing-root flag was passed in combination with apt as the package manager. However this is not enough. If you say allow-existing-root but the existing root is empty or not valid to continue with chroot and apt the debootstrap phase should not be skipped. This commit checks if apt works in the chroot such that we can assume debootstrap has done its job and can be skipped * Fri Nov 12 2021 Marcus Schäfer - Allow to set sign keyfile in repository elements This commit adds a new and optional child element to the repository/source element as shown in the following example: The collection of all keyfiles from all repositories will be added to the keyring as used by the selected package manager. Signing keys specified on the commandline and signing keys specified in the image description will be combined. This Fixes #1883 * Fri Nov 12 2021 Marcus Schäfer - Bump version: 9.24.4 → 9.24.5 * Fri Nov 12 2021 Marcus Schäfer - Fixed include processing This commit fixes several issue connected with the use of the directive: First and foremost the XSLT chain was broken in a way that the include XSLT in combination with the PrettyPrinter XSLT were called not in the chain of stylesheets but together. This results in XML descriptions which duplicated the content and went invalid Another change is, when the include XSLT is called in the chain. This commit moves it to become the very first processing instruction such that the included data is part of all subsequent XSLT stylesheets. This also allows to use older schema versions in included XML data and they get automatically converted through the chain of XSLT stylesheets. Last change is the evaluation of the from= attribute value. This value is now interpreted as an URI. Currently only local URIs are supported. The reason to do this is because XSLT when processing a document resolves relative paths according to the file path of the master document. As kiwi does not change the original content that path with will be a /var/tmp location if one of the XSLT stylesheets were used. The documentation for this change was updated as well * Thu Nov 11 2021 Marcus Schäfer - Bump version: 9.24.3 → 9.24.4 * Thu Nov 11 2021 Marcus Schäfer - Added type hints and annotations for iso_tools * Thu Nov 11 2021 Marcus Schäfer - Drop support for cdrtools Tools like mkisofs, genisoimage and friends are all unmaintained and have found their substitute in xorriso for quite some time. This commit deletes the code from kiwi which supported creation of ISO images using the obsolete cdrtools collection. In addition all hack code associated with these tools like mbr insertion via isohybrid and things like that got dropped as well. This Fixes #1908 * Thu Nov 11 2021 kyr - Drop usage of `factor` from coreutils utils/checksum: drop factor calls For portability we don\'t need to call linux coreutils\' factor, instead we use pure python prime number generation implementation. Signed-off-by: Kyr Shatskyy * Thu Nov 11 2021 Matt Coleman - Add support for custom GRUB templates This allows the user to specify a template file to customize the bootloader menu. This only applies to oem and iso image types: other image types use the grub mkconfig toolchain. This resolves Issue #1970 Co-authored-by: Marcus Schäfer * Tue Nov 09 2021 Dan Čermák - Only trigger functions workflow on certain paths * Tue Nov 09 2021 Dan Čermák - Re-enable functions integration tests once again * Tue Nov 09 2021 Kyr Shatskyy - config/functions: make baseQuoteFile use extended regex It is more universal to use extended regex, because they can be used on wider range of platforms, for example, same regex works equally on bsd sed and linux distributions. Signed-off-by: Kyr Shatskyy * Mon Nov 08 2021 Marcus Schäfer - Added python 3.9, 3.10 to test workflow * Mon Nov 08 2021 Kyr Shatskyy - utils/temporary: rename dir parameter to path To avoid conflicts with python standard `dir` function and for better matching purpose, the Temporary class constructor parameter it is the best to rename from dir to path. Signed-off-by: Kyr Shatskyy * Sun Nov 07 2021 Kyr Shatskyy - utils/temporary: the --temp-dir does not work Using of --temp-dir argument does not make an effect, because optional \'dir\' parameter defaults to the global TEMP_DIR value before it\'s changed. This patch address this issue. Signed-off-by: Kyr Shatskyy * Wed Nov 03 2021 Marcus Schäfer - Bump version: 9.24.2 → 9.24.3 * Wed Nov 03 2021 Marcus Schäfer - Fixed s390 SLE15 integration test added blog package to solve packages added by file provides which are not resolved by obs * Wed Nov 03 2021 Marcus Schäfer - Fixed s390 integration test using extra boot part Due to changes in the distribution the tests needs some adaptions. The kernel as provided now by TW uses symlinks from boot to /usr/lib/modules/... to point to the kernel binary. Of course this breaks for any system that uses /boot on another partition. Those image tests which were testing this aspect needs fixing. * Wed Nov 03 2021 Marcus Schäfer - Added partition sizes to disk size math Make sure partition sizes are used for the calculation of the entire disk size to fit the size constraints of the image disk * Tue Nov 02 2021 Marcus Schäfer - Revert \"Cleanup xattr requirement\" This reverts commit 6754b3f9e270a6cb710355605c46b0bade4de29c. It has turned out that SLE15 still uses the other xattr module :/ * Tue Nov 02 2021 Marcus Schäfer - Added integration test Test the combination of custom partitions and volumes * Fri Oct 29 2021 Marcus Schäfer - Make sure fedora-release is installed Fedora based integration tests should install the fedora-release package. If no release package is specified the generic-release package is choosen which is unexpected. This Fixes #1957 * Wed Oct 27 2021 Marcus Schäfer - Make sure debootstrap is called only once When building debian based images the bootstrap phase is done by calling debootstrap. If kiwi is called on an already existing root tree via --allow-existing-root this will make debootstrap to fail in any case. This is because for debootstrap it\'s an error condition if there is already data in the root. However, for kiwi and the explicitly requested re-use of the root tree this is not an error. Thus this commit skips the bootstrap by debootstrap and directly continues with the image phase. * Wed Oct 27 2021 Marcus Schäfer - Cleanup xattr requirement There is no version of suse we support that provides the old xattr module. Thus the requirement can be set in a clean way to pyxattr and the setup.py trickery can be deleted * Mon Oct 25 2021 Marcus Schäfer - Disable config functions testing It happens too often that the failure on running the container causes failed results which are not actually failures. I have hope that #1944 stabilize this * Fri Oct 22 2021 Marcus Schäfer - Bump version: 9.24.1 → 9.24.2 * Fri Oct 22 2021 Marcus Schäfer - Fixed nasty bug in ramdisk generator The ramdisk unit generator reads the config.bootoptions file and extracts the root_uuid from it. This is done with a very simple shell read using a space as separator. However the last element is never read by that code. As long as there was yet another kernel cmdline option after the root= option this bug was not an issue. But as soon as the root= option is last in the list it will not be read and the generator exits prior creating the sysroot.mount target. This commit fixes it in a way that it makes sure there is always a space at the end of the config.bootoptions file * Thu Oct 21 2021 Marcus Schäfer - Support custom partitions In addition to the volume volume management settings also allow to setup low level table entries like in the following example: * Thu Oct 21 2021 Marcus Schäfer - Added integration build test for bundle_format * Wed Oct 20 2021 Marcus Schäfer - Added lsof to kiwi-systemdeps-core * Tue Oct 19 2021 Marcus Schäfer - Add support for custom result bundle naming Allow to specify a bundle_format per which is used at the time of the result bundle creation to create image output names matching the provided pattern. This Fixes #1943 * Tue Oct 19 2021 Marcus Schäfer - Added missing python-simplejson to pkgbuild Added missing python-simplejson requirement to the archlinux pkgbuild package template * Tue Oct 19 2021 Marcus Schäfer - Raise exception on umount issue Up to now kiwi tried to umount a resource it has mounted for some time and if it was not possible due to a busy state the process continued. In any of these situations it was not possible to free up the nested resources and it could also happen that the image build result got corrupted because there is still data that can be consumed but shouldn\'t be there anymore. The change here makes kiwi to stop the process and raise with an error also including the information that there are now resources still active but busy on the host and a manual cleanup is unfortunately needed. This Fixes #1914 * Mon Oct 18 2021 Marcus Schäfer - Added SystemOverlayRoot profile Test kiwi\'s overlayroot mode without initrd * Mon Oct 18 2021 Marcus Schäfer - Update test for image without initrd and loader The systemd-remount-fs.service expects devices to be present in their UUID representation. When booting without an initrd there is no udev and the root= device must be provided with the kernel exposed unix device name. In addition there is no UUID device representation for virtio devices which are used together with the small kvmsmall kernel of this example. Since booting of this appliance is done via: $ kvm --kernel (kernel-kvmsmall) \\ - drive file=kiwi-test-image-embedded.raw,if=virtio \\ - append \"root=/dev/vda1 console=ttyS0 rw\" The kernel rootfs is mounted in rw mode anyway. Thus the systemd remount service is not useful in this case and switched off * Fri Oct 15 2021 Marcus Schäfer - Bump version: 9.24.0 → 9.24.1 * Thu Oct 14 2021 Marcus Schäfer - Make sure embedded test exposes the kernel * Thu Oct 14 2021 Marcus Schäfer - Fixed use of LUKS encrypted images with empty pass For initial provisioning of LUKS encrypted disk images an empty passphrase key is handy to avoid interaction in the deployment process. However, the dracut kiwi modules were lacking the information that the luks keyfile could be an empty passphrase key which must not be opened with the potential risk to get prompted for input. This commit introduces a new profile environment variable evaluated by the dracut kiwi lib code to open the LUKS pool and allows to distinguish the situation on key files with or without a passphrase * Thu Oct 14 2021 Marcus Schäfer - Fixed type annotations for LuksDevice class * Wed Oct 13 2021 Marcus Schäfer - Fixed repo setup for test-image-embedded Use obsrepositories * Wed Oct 13 2021 Marcus Schäfer - Added a build test for no-initrd / no-bootloader It\'s allowed to configure an image building without an initrd and/or bootloader setup. These are settings mostly used in the embedded world and this build test makes sure images of that kind can be build * Tue Oct 12 2021 Marcus Schäfer - Add support for portable result data (#1949) In addition to the serialized Result instance kiwi.result file this commit also creates a portable version of this information in kiwi.result.json. Only the information that can be expressed as json document is part of the portable version. This is related to Issue #1918 * Thu Oct 07 2021 Marcus Schäfer - Added documentation for kiwi stackbuild plugin Restructure the documentation to put all plugin documentation under its own category. Add a chapter about the stackbuild plugin, it\'s concepts and use cases. This Fixes #1907 * Thu Oct 07 2021 Marcus Schäfer - Bump version: 9.23.63 → 9.24.0 * Thu Oct 07 2021 Marcus Schäfer - Add support for toplevel include directive(s) On the toplevel of an image description you can now specify include directive(s) like in the following example ... ... At the place of their occurrence the include statement will be replaced with the contents of the given filename. The implementation is based on a XSLT stylesheet and applies very early in the process. The stylesheet reads the contents of the given file as XML document(). Thus only valid XML documents gets accepted by this include concept. This Fixes #1929 and is related to Issue #1918 * Wed Oct 06 2021 Dan Čermák - Switch to pytest_container instead of custom conftest * Wed Oct 06 2021 Marcus Schäfer - Bump version: 9.23.62 → 9.23.63 * Wed Oct 06 2021 Marcus Schäfer - Fixed error reporting for stateful description Errors due to missing or no type definitions were reported provding the internal object reference of the XML parse result. This is useless information for users and needs to be done better. This commit fixes the error message to avoid showing object references and includes information about the applied profiles used for this XML state. * Wed Oct 06 2021 Marcus Schäfer - Fixed legacy PXE documentation The documentation for building a legacy pxe image was not using the profiles (Flat or Compressed) as the actual image description for this example requires it. This Fixes #1923 * Wed Oct 06 2021 Marcus Schäfer - Added mdadm to requires for systemdeps When building raid based images the buildhost needs mdadm. In addition rework the place to require disk based tools. Most of them were added to the filesystem systemdeps but belong to the disk systemdeps * Wed Oct 06 2021 Marcus Schäfer - Fixed creation of loopback config If an extra boot partition is in use the creation of the config file for the loopback boot feature was using the wrong path. This commit fixes it and also introduces integration checks which builds in this condition * Tue Oct 05 2021 Marcus Schäfer - Fixed GRUB_CMDLINE_LINUX_DEFAULT setup regression The value for GRUB_CMDLINE_LINUX_DEFAULT should only be changed if custom kernelcmdline values are provided. In case there are none kiwi should not change this value. The test to check for this condition is based on the result cmdline reduced by the root setting. However the default cmdline setting in kiwi appends \'rw\' in addition to the root device information. This means the default kernelcmdline is never empty and therefore the grub setting GRUB_CMDLINE_LINUX_DEFAULT=\"rw\" is always set. This commit fixes the conditional change by making sure the default cmdline only consists out of the root device information. This Fixes #1650 * Tue Oct 05 2021 Marcus Schäfer - Allow logfile option to log on stdout The option setting \'--logfile stdout\' is now a special form and logs the messages usually written to a file to stdout instead. This is handy if all messages of the build are requested but the --debug switch is not because it does more than that, e.g calling scripts through debug\'able screen sessions * Tue Oct 05 2021 Marcus Schäfer - Allow test-image-luks to be build locally too In suse there are many programs replaced by the busybox alternative and also preferred by the package manager. However there are also packages like the kernel in suse which wants gawk and not busybox-gawk. In kiwi to build images there are two installation phases, the bootstrap phase which installs mandatory packages to allow chroot operations and the image phase which installs the rest of the requested packages as chroot operation. In this two pass step the package manager is called twice to resolve dependencies and that causes the issue with the preferred busybox packages which gets pulled in in the first phase. To prevent this there are only two options: 1. Explicitly list the non busybox packages in the bootstrap phase 2. Prevent the image phase and put all packages to the bootstrap phase such there is only one package manager call for dependency resolution This commit implementes option 1. because having all packages in the bootstrap phase means that the host packagemanager resolves and if the host packagemanager is somehow not compatible with the image target this leads to other weird issues which are not obvious and hard to debug. * Thu Sep 23 2021 Marcus Schäfer - Bump version: 9.23.61 → 9.23.62 * Thu Sep 23 2021 Marcus Schäfer - Fixed script calls when running in obs kiwi is called with --debug in obs which triggers the scripts to be called through screen. However the obs caller is not associated with a terminal thus it fails. This commit creates an exception for debug mode when running in obs * Thu Sep 23 2021 Marcus Schäfer - Bump version: 9.23.60 → 9.23.61 * Thu Sep 23 2021 Luis González Fernández - Fix secure boot for ubuntu based images This patch fixes #1911 and makes secure boot images to work again in Ubuntu 20.04 Co-authored-by: Luis Ladislao Gonzalez Fernandez * Wed Sep 22 2021 Marcus Schäfer - Run scripts via a screen session in debug mode When creating a custom script it usually takes some iterations of try and testing until a final stable state is reached. To support developers with this task kiwi calls scripts associated with a screen session. The connection to screen is only done if kiwi is called with the --debug option. * Tue Sep 21 2021 Marcus Schäfer - Delete obsolete release stage from gitlab Now done as github action * Tue Sep 21 2021 Marcus Schäfer - Bump version: 9.23.59 → 9.23.60 * Tue Sep 21 2021 Marcus Schäfer - Fixed pypi tox release target Only needs the creation of the sdist tarball * Tue Sep 21 2021 Marcus Schäfer - Bump version: 9.23.58 → 9.23.59 * Tue Sep 21 2021 Marcus Schäfer - Moved pages and pypi publish to github actions Moved gh-pages doc update and pypi upload from gitlab to github actions * Tue Sep 21 2021 Marcus Schäfer - Fixed RNC schema definition From the compact form of the schema the RNG schema is created. The latest changes to support the target_dir attribute in the section were added wrong to the compact form of the schema * Fri Sep 17 2021 Marcus Schäfer - Fixed Tumbleweed integration tests Due to changes in the distribution the tests needs some adaptions. The kernel as provided now by TW uses symlinks from boot to /usr/lib/modules/... to point to the kernel binary. Of course this breaks for any system that uses /boot on another partition. Those image tests which were testing this aspect needs fixing. * Wed Sep 15 2021 Marcus Schäfer - Bump version: 9.23.57 → 9.23.58 * Wed Sep 15 2021 Marcus Schäfer - Fixed MANIFEST Make sure all test data is included into the source tarball not only a recursive inclusion of a portion of it. This is needed to run tests at build time from the pypi provided source tarball * Wed Sep 15 2021 Marcus Schäfer - Bump version: 9.23.56 → 9.23.57 * Tue Sep 14 2021 Marcus Schäfer - Fixed python manifest Deleted no longer existing doc source from manifest and add the full set of documentation sources * Fri Sep 10 2021 Marcus Schäfer - Bump version: 9.23.55 → 9.23.56 * Fri Sep 10 2021 Marcus Schäfer - Only wipe bundle dir when required The given result bundle dir must only be wiped if the request to turn the result files into an rpm was given. Only in this case the given bundle dir must start empty * Fri Sep 10 2021 Marcus Schäfer - Fixed uninstall handling via dnf, microdnf, zypper The above package managers supports uninstall instructions like \'iwl *\'. In kiwi there was code checking via rpm if the packages given to uninstall actually exists. That code does not work if the given package to uninstall is an instruction that matches a pattern. Therefore if we use the uninstall section in the kiwi image description, just pass the provided information to the package manager and don\'t try to be clever in kiwi itself. * Thu Sep 09 2021 Marcus Schäfer - Allow to set --logfile for result namespace Setting a logfile for e.g \'kiwi-ng result bundle ...\' is useful and should be possible * Thu Sep 09 2021 Marcus Schäfer - Bump version: 9.23.54 → 9.23.55 * Wed Sep 08 2021 Marcus Schäfer - Added support for building rpm package from bundle With the new option --package-as-rpm it is possible to call the kiwi result bundler such that the image build results gets packaged into an rpm. I think this is a handy feature to transport image builds via repositories * Wed Sep 08 2021 Marcus Schäfer - Fixed MicroOS integration test With ignition/combustion in place it\'s not allowed to use tmp as a subvolume * Tue Sep 07 2021 Marcus Schäfer - Bump version: 9.23.53 → 9.23.54 * Mon Sep 06 2021 Marcus Schäfer - Fixed condition for GRUB_DISABLE_LINUX_UUID=\"true\" The grub config parameter GRUB_DISABLE_LINUX_UUID must only be set if the device persistence setting is not UUID. However, in kiwi UUID device names are the default and doesn\'t have to be expressed explicitly. Therefore the condition to check for different than \'by-uuid\' is wrong for the default case were no device persistence setting exists. This results in a wrong grub option to be set. This commit fixes it in a way to disable UUID device names in grub if the only other device persistency setting in kiwi named: \'by-label\' is explicitly configured. This Fixes #1842 * Mon Sep 06 2021 Marcus Schäfer - Added force_trailing_slash argument to sync_data A speciality of the rsync tool is that it behaves differently if the given source_dir ends with a \'/\' or not. If it ends with a slash the data structure below will be synced to the target_dir. If it does not end with a slash the source_dir and its contents are synced to the target_dir. For example: source └── some_data 1. $ rsync -a source target target └── source └── some_data 2. $ rsync -a source/ target target └── some_data The parameter force_trailing_slash in the DataSync::sync_data method can be used to make sure rsync behaves like shown in the second case. This Fixes #1786 * Mon Sep 06 2021 Marcus Schäfer - Added type hints for DataSync class * Fri Sep 03 2021 Marcus Schäfer - Bump version: 9.23.52 → 9.23.53 * Thu Sep 02 2021 Marcus Schäfer - Add missing bootloader tests Merging #1850 exposed the missing bootloader tests. This reminds me to move the gitlab driven unit tests to github actions because for forked repos the gitlab tests does not run but github actions tests would run * Tue Aug 31 2021 Robert Schneider <48757730+data-intelligence-robotAATTusers.noreply.github.com>- Fix logging of ISO publisher * Tue Aug 31 2021 Mexit - Improving text formatting * Mon Aug 30 2021 Mexit - Added documentation for grub2 loopback ISO images * Fri Aug 27 2021 Marcus Schäfer - Bump version: 9.23.51 → 9.23.52 * Fri Aug 27 2021 Marcus Schäfer - Fixed pep E711 code smell comparison to None should be \'if cond is not None:\' * Fri Aug 27 2021 Marcus Schäfer - Bump version: 9.23.50 → 9.23.51 * Fri Aug 27 2021 Robert Schweikert - No compression with encryption When an image is setup to use encryption the resulting image appears as a random stream of bytes and cannot be compressed. Simply skip the compression in this case. * Thu Aug 26 2021 Marcus Schäfer - Fix typo in schema documentation ciper -> cipher. Fix originally done by Robert Schweikert and moved to the right place, see Issue #1906 for details * Thu Aug 12 2021 Jesus Bermudez Velazquez - Allow target dir for archive - Add the option to specify a target directory to unpack the archive - Update doc for target dir attribute This Fixes #1794 * Tue Aug 10 2021 Marcus Schäfer - Log deprecation errors to stderr Make sure information about deprecated shell methods logs their information to stderr. This will cause the error message to be exposed to the user and not only in the log file * Tue Aug 10 2021 Marcus Schäfer - Fixed TW build test Explicitly added packages that causes conflicts due to the busybox alternatives * Tue Aug 10 2021 Marcus Schäfer - Bump version: 9.23.49 → 9.23.50 * Thu Aug 05 2021 Marcus Schäfer - Added support for repo customization script repo files allows for several customization options which could not be set by kiwi through the current repository schema. As the options used do not follow any standard and are not compatible between package managers and distributions the only generic way to handle this is through a script which is invoked with the repo file as parameter for each file created to describe a repo for the selected package manager. This allows users to update/change the repo file content on their individual needs. In the kiwi description the path to the custom script can be specified as follows This Fixes #1896 * Fri Jul 30 2021 Marcus Schäfer - Bump version: 9.23.48 → 9.23.49 * Thu Jul 29 2021 Marcus Schäfer - Fixed fstab entry for swap on LVM If an LVM setup is used together with a swapspace the swap is created as a volume in the volume group. The required fstab entry to activate swap was not using the LVM exposed device but the UUID of the low level block layer. This low level device is not created by udev because LVM takes over precedence in this case.