File _patchinfo of Package patchinfo.10406
<patchinfo incident="10406">
<issue tracker="bnc" id="1108508">Custom KIWI initrd fails to boot</issue>
<issue tracker="bnc" id="1110869">Kiwi does not allow using SCC repos</issue>
<issue tracker="bnc" id="1110871">python2-kiwi fails when using a locale other than en_US/C</issue>
<issue tracker="bnc" id="1119416">[RPi3][Build29.115] grub2 error: file `/boot/grub2/fonts/unicode.pf2' not found after update-bootloader</issue>
<issue tracker="bnc" id="1123185">[kiwi] It is not possible to build ARM and x86_64 images from the same image description</issue>
<issue tracker="bnc" id="1123186">[kiwi] It is not possible to build ARM and x86_64 images from the same image description</issue>
<issue tracker="bnc" id="1126283">Disk resize broken for multipath systems</issue>
<issue tracker="bnc" id="1126318">Disk resize broken for multipath systems</issue>
<issue tracker="fate" id="326960"/>
<category>recommended</category>
<rating>moderate</rating>
<packager>sax2</packager>
<description>This update for python-kiwi provides the following fixes:
- Fix some code issues reported by new flake8 version.
- Change the default value for bundler compression. If no compression is configured in the
kiwi config file, the default was set to False. However this led to problems on the OBS
side for images which have fixed storage disk sizes configured (for example Azure images
which request 30G disk size per instance). Thus the default changed to True.
- Fix grub theme lookup. If the theme was not found at the expected place an exception was
thrown. However the alternative lookup code in /boot was not reached with that exception.
- Add a runtime check for preferences metadata, specifically verifying that there is a
packagemanager defined and an image version defined.
- Support alternative EFI and grub modules paths. In SUSE products EFI binaries are
historically located in /usr/lib*/efi. In a recent move to package grub2 as noarch, a
collision between x86_64 and aarch64 has been identified, as both place platform-specific
files to the same location. To fix this, a new location was devised:
/usr/share/efi/$(uname -m). At the same time /usr/lib/grub2 will move to /usr/share/grub2.
(fate#326960)
- Fix Xen guest detection. Xen setup (e.g in the Amazon Cloud) is only supported for the
x86_64 architecture. (bsc#1123186, bsc#1123185)
- Fix the location of grub unicode font file. grub2 is expecting the unicode font under
the fonts directory in the /boot/grub*/ depending on how the distribution installs
grub2. (bsc#1119416)
- Add container history metadata on umoci repack call. This change makes sure that
`umoci repack` call includes history metadata and skips that in `umoci config` call.
- Do not assume package manager is always there. This change modifies the behavior for
zypper to not assume rpm binary is always part of the image. An image could be
bootstrapped only without zypper or rpm, in that case it does not make sense and it is
not possible to dump and reload the rpmdb.
- Allow to switch off install image boot timeout. This commit adds a new attribute called:
<type ... install_continue_on_timeout="true|false"/>
It allows to setup the boot timeout for install images build with KIWI. If not set or
set to 'true', the configured boottimeout or its default applies to the install image as
it was before. If set to 'false' there will be no timeout in the install image bootloader
setup and the boot only continues on manual intervention.
- Make result compression in the bundler optional. Calling kiwi result bundle will take
the image build results and bundle the relevant image files according to their image
type. Depending on the result configuration this could instruct the bundler to compress
one or more files from the result. If compression is activated the result image has to be
uncompressed before it can be used.
- Fix using SysConfig objects. Objects of that class do not provide a get method but
overload the bracket [] operator. Using the get() method would fail.
- Use chkstat to verify and fix file permissions. Call chkstat in system mode which reads
/etc/sysconfig/security to determine the configured security level and applies the
appropriate permission definitions from the /etc/permissions* files. It is possible to
provide those files as overlay files in the image description to apply a certain
permission setup when needed. Otherwise the default setup as provided on the package
level applies. It is required that the image root system has chkstat installed. If not
present KIWI will skip this step and continue with a warning.
- Allow setting the protocol to tcp or upd (e.g. "80/tcp") for exposed container ports. If
no protocol is provided, OCI defaults are applied.
- Fix disk size calculation for VMX. Disk size calculation must take into account the empty
volumes that are to be mounted in a directory that does not exist in the root tree,
otherwise there is KeyError. The result of storate/setup._calculate_volume_mbytes must
be a dict including all defined volumes.
- More clarity on kernel version lookup. Lookup of the kernel version is done by directly
reading the kernel image via a small tool named kversion. The scope of the tool is
limited and does not work for e.g kernel images which contain their own decompressor
code. For the special cases exceptions were defined, one was zImage. The recently added
exception for vmlinuz seemed too intrusive and was also not well documented. This change
tries to clarify and get back to explicit and easy to read coding.
- Refactor kernel version lookup. Check the presence of the gzip compressed kernel binary
and use it. If not present use the arbitrary kernel image format with the known
limitations.
- Refactor OCI tools. In order to provide buildah support some of the logic about temporary
directories for OCI images creation needed to be moved to the dedicated OCI tool class.
While umoci can operate in any directory and this is passed as an argument, this is not
the case for buildah. In buildah workflow the storage path of work-in-progress images
and containers and the mountpoint of the container rootfs are not customizable.
- Use cow file on persistent grub live loop boot. When using tools like live-grub-stick,
the live iso as generated by kiwi will be copied as file on the target device and a grub
loopback setup is created there to boot the live system from file. In such a case the
persistent write setup which tries to create an extra write partition on the target
fails in almost all cases because the target has no free and unpartitioned space
available. Therefore in case of such a loopback mounted system we create a cow file
(live_system.cow) instead of a partition to setup persistent writing. The cow file will
be created in the same directory the live iso image file was read from grub.
- Better exception handling in OEM installer. If an error condition applies in the kiwi
dump dracut code, the reaction was to stop the process with a dracut die() call. If the
option 'rd.debug' was set on boot, this lead to a debugging shell which is good, but in
a standard process this lead to a lock of the machine which is an unfortunate situation.
This fix changes the behavior to always print the error message as a dialog message box
on the primary console and reboot the system after keypress or timeout. In case of the
debug switch configured the system die()'s as before.
- Add parted dependency for dracut-kiwi-live package. dracut-kiwi-live requires the
`partprobe` tool and this is provided by parted package. Persistent overlay setup fails
if parted is not installed in the image.
- Add support for --no-history umoci's flag. By using this flag kiwi appends only a single
history entry for OCI containers.
- Improve dialog usage in kiwi-dump-image. Dialog's "--radiolist" feature requires to
navigate to the item, press "space" to select the item and then "enter" to execute.
With "--menu", it is enough to just navigate to the item and press "enter" to execute,
which is much more intuitive for most users.
- Fixed OEM installer. In the implementation of the ramdisk installer, an error for the
standard case was introduced such that the lsblk call was invalid. This led to no
devices being present for the installation.
- Fix rsync call for filesystem images. For filesystem images the rsync call was missing a
trail slash for the source path causing the sync to include also the containing
directory. With this change the filesystem image does not include the rootfs in any
subdirectory.
- Add history metadata for container builds. This change adds the history section in
containerconfig. With that, 'author', 'created_by' and 'comment' can be customized. In
addition, 'created' is always included with the image creation date time. 'created_by'
entry is set to 'KIWI __version__' by default if nothing is provided.
- Change bundling of image formats. By default none of the image formats were stored as
compressed files. The reason behind this was the assumption that some formats
automatically make use of compression, which is true but only in their processing and
not in their data blocks at creation time. Storage and handling of the image file itself
becomes cumbersome and therefore the default bundle setup for image formats was changed
to be compressed. This means the image, as it gets packed by KIWI, needs to be
uncompressed before use. The following image formats are affected by the change in a
call of the result bundler:
* qcow2 (.qcow2.xz)
* vdi (.vdi.xz)
* vhd (.vhd.xz)
* vhdx (.vhdx.xz)
* vmdk (.vmdk.xz)
- Fixed firmware strip and lookup for kiwi initrd. In a kiwi initrd the function
baseStripFirmware can be used to strip down the firmware to the actually used kernel
drivers in that initrd. The code to do this was broken due to some other changes. This
change fixes the method to work correctly again.
- kiwi-partitions-lib: Wait for udev before lsblk. An LVM-enabled OEM image spuriously
did not resize its PV / LVs due to lsblk sometimes racing with udev and the disk was
just not available during get_partition_node_name(). Call udev_pending() before all
lsblk calls to avoid that. (the lsblk man page also advocates this to synchronize with
udev)
- Refactor containerconfig xml evaluation. This change refactors the extracted data from
containerconfig section to be tool agnostic.
- Support ramdisk deployment in OEM images. Using the rd.kiwi.ramdisk boot option enables
the deployment into a ramdisk. If this option is enabled, only ramdisk devices as
provided by the brd kernel driver will be available for deployment.
- Distinguish install and image dracut config. This fix distinguishes the files that
should be installed inside the image dracut only than the ones installed in both, in
install initrd and image initrd.
- Apply OCI interface for container and root_import. Instead of directly calling the
container archiving tool, in this case umoci, the code has been changed to use the new
OCI interface class.
- Added OCI tooling interface class. An initiative to formulate industry standards around
container formats and runtime is available at https://www.opencontainers.org. Different
tools to implement the specifications had been created. The purpose of this class and
its sub-classes is to provide a common interface in kiwi to allow using all tools such
that the container support in kiwi covers every linux distribution no matter what
tooling was preferred.
- Warn on modifications to intermediate configuration files. Some files are taken from the
host and managed as intermediate config files during the build of the image. Changes to
those files during the build run by e.g a script will not become effective because the
file gets restored. With this fix the modification condition is detected and a warning
message is displayed so that the author of the image can adapt the description as
suggested in the message.
- Move the default rpm database path into Defaults class.
- Add a hardcoded rpm database path to import trusted keys so that they are in the
expected location for zypper.
- Allow simple path source in Uri class. This patch is needed as follow up fix for the
setup of the package cache in local repositories. The is_remote method from the Uri
class is used to identify if a repository source is remote or local. At that point the
initial repository source was already translated into its components. In case of a
local repository the Uri instance now receives a simple path and the is_remote method
raised with a style error. This patch allows the Uri class to be more friendly and
initializes a local path as file:/ typed source.
- Do not cache packages from local repos for zypper. Access to packages from local
repositories is as fast as reading them from a cache location. The additional package
copy and cache update is superfluous and should be avoided.
- Update /etc/machine-id management docs. Update the information about how /etc/machine-id
is treated in KIWI and provide some hints for old systems where /var/lib/dbus/machine-id
is not a symlink to /etc/machine-id.
- Added machine id setup in dracut preparation. In case of a dracut booted image we empty
out the systemd machine-id configuration file to trigger the rebuild of that information
by the dracut boot code at boot time. This allows for unique systemd identifiers if the
same image gets deployed on different machines. This also obsoletes the scripts people
put in in config.sh or images.sh to solve this problem obsolete.
- Add Codec utils for bytes literals decoding. In case of a literal decoding failure it
tries to decode the result in utf-8. This is handy in python2 environments where python
and the host might be using different charset configurations. In python3 this issue
seems to be solved. (bsc#1110871)
- Include livenet module with dmsquash-live support. The upstream dracut dmsquash-live
module supports network mode with the livenet module. But that module must be explicitly
included and is not fetched automatically.
- Fixed URI handling with token query option. So far only the query format "?credentials="
was supported. In case of "?random_token_data" the returned uri was truncated and also
the format check on the query caused a python trace. (bsc#1110869, bsc#1108508)
- Make use of the quiet flag of mountpoint command. This sets the use of -q flag of
mountpoint. Kiwi only checks the return code, thus any stdout is useless in this case.
- Fixes LVM based image creation in OBS. Attempting to create LVM based images under the
Open Build Service would run into some issues related to the fact that there is no udev
running in the chroot environment used to build kiwi based images. Two workarounds have
been implemented in this patch:
1. When calling lvcreate, include the `-Zn` option to disable the automatic zeroing of
the header of the newly created LV device. Doing so requires that the LV device's
/dev entry exists immediately after it has been created, but in a chroot environment
udev is not going to be running to automatically populate /dev/<vg_name>/<lv_name>
or /dev/mapper/<vg_name>-<lv_name>. This should be safe to do since the LV
is being created within a loopback device based partition, which is backed by a zero
filled file, created by qemu-img.
2. After creating an LV we need to run `vgscan --mknodes` to create the required device
nodes under /dev, which won't be automatically created since udev is not running in
the chroot environment.
- Fix disk size calculation for VMX. Disk size calculation must take into account the
empty volumes that are to be mounted in a directory that does not exist in the root tree
otherwise there is KeyError. The result of storate/setup._calculate_volume_mbytes must
be a dictionary including all defined volumes.
- Fixed disk detection from root device. The method lookup_disk_device_from_root assigns
the disk device matching the root device uuid. However in a multipath environment
multiple disk devices matches the same root device. The code to assign the multipath map
in this case was missing in the dracut code base. (bsc#1126283, bsc#1126318)
</description>
<summary>Recommended update for python-kiwi</summary>
</patchinfo>