- Only need to get the list of supported filesystems *once*,
not for each and every filesystem that is going to be unpacked.
- Be more Python-idiomatic.
Unfortunately, rsync returns exit code 23 (Partial transfer due to
error) if it cannot write extended attributes (with -X) because the
target file system does not support it, e.g., the FAT EFI system
partition. We need -X because distributions using file system
capabilities and/or SELinux require the extended attributes. But
distributions using SELinux may also have SELinux labels set on files
under /boot/efi, and rsync complains about those. The only clean way
would be to split the rsync into one with -X and --exclude /boot/efi and
a separate one without -X for /boot/efi, but only if /boot/efi is
actually an EFI system partition. For now, this hack will have to do.
See also:
https://bugzilla.redhat.com/show_bug.cgi?id=868755#c50
for the same issue in Anaconda, which uses a similar workaround.
mount: Remember the extraMounts (and extraMountsEfi, if applicable) in
the global storage (as "extraMounts").
unpackfs: Read the extra mounts from the global storage to generate the
exclude list instead of trying to detect it from the "mount" command's
output, because the latter also includes normally-mounted destination
partitions.
This makes having separate partitions for non-/ mountpoints work again.
Add the following flags to rsync:
* `-H, --hard-links preserve hard links`
* `-A, --acls preserve ACLs (implies --perms)`
* `-X, --xattrs preserve extended attributes`
(i.e., the preservation options not already implied by -a).
Also exclude the special paths that do not make sense to rsync, because
reading the extended attributes from those can cause errors, at least
with SELinux enabled.
This fixes installation of Fedora systems with SELinux enabled.