mkksiso: Check the iso's arch against the host's

mkksiso cannot be run on an iso from another arch, some of the files and
tools are arch specific. Catch this problem and tell the user that the
iso doesn't match the host's architecture.

Related: rhbz#2028048
This commit is contained in:
Brian C. Lane 2021-12-07 14:13:11 -08:00
parent b4a95c3584
commit ddd02891b0
2 changed files with 13 additions and 1 deletions

View File

@ -10,7 +10,9 @@ the iso is booted. If the original iso was created with EFI and Mac support the
kickstart boot.iso will include this support as well. kickstart boot.iso will include this support as well.
``mkksiso`` needs to be run as root, it depends on mounting the original iso ``mkksiso`` needs to be run as root, it depends on mounting the original iso
and you need to be root to be able to do that. and you need to be root to be able to do that. The host system architecture
needs to match that of the iso. ``mkksiso`` will raise an error if it finds a
.discinfo on the iso with a mismatched arch.
mkksiso cmdline arguments mkksiso cmdline arguments

View File

@ -398,6 +398,16 @@ class MakeKickstartISO():
self.label = self.iso.label if volid is None else volid self.label = self.iso.label if volid is None else volid
if not self.label: if not self.label:
raise RuntimeError("No volume id found, cannot create iso.") raise RuntimeError("No volume id found, cannot create iso.")
# If the iso contains a .discinfo file check the arch against the host's
if os.path.exists(os.path.join(self.iso.mount_dir, ".discinfo")):
with open(os.path.join(self.iso.mount_dir, ".discinfo")) as f:
discinfo = [l.strip() for l in f.readlines()]
log.info("iso arch = %s", discinfo[2])
if os.uname().machine != discinfo[2]:
raise RuntimeError("iso arch does not match the host arch.")
log.info("Volume Id = %s", self.label) log.info("Volume Id = %s", self.label)
if os.path.exists(os.path.join(self.iso.mount_dir, "images/efiboot.img")): if os.path.exists(os.path.join(self.iso.mount_dir, "images/efiboot.img")):