The osinfo has an "installer" attribute in <media>, which defaults to true, and there are few entries which are marked as not. --- src/guestfs-internal.h | 1 + src/inspect-fs-cd.c | 3 ++- src/osinfo.c | 11 ++++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 03f1034..2b49011 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -861,6 +861,7 @@ struct osinfo { int minor_version; char *arch; int is_live_disk; + bool is_installer; #if 0 /* Not yet available in libosinfo database. */ diff --git a/src/inspect-fs-cd.c b/src/inspect-fs-cd.c index bb28c0f..10e9d54 100644 --- a/src/inspect-fs-cd.c +++ b/src/inspect-fs-cd.c @@ -526,7 +526,8 @@ guestfs_int_check_installer_iso (guestfs_h *g, struct inspect_fs *fs, /* Otherwise we matched an ISO, so fill in the fs fields. */ fs->mountable = safe_strdup (g, device); fs->is_root = 1; - fs->format = OS_FORMAT_INSTALLER; + if (osinfo->is_installer) + fs->format = OS_FORMAT_INSTALLER; fs->type = osinfo->type; fs->distro = osinfo->distro; fs->product_name = diff --git a/src/osinfo.c b/src/osinfo.c index 22f1e92..fc18075 100644 --- a/src/osinfo.c +++ b/src/osinfo.c @@ -412,7 +412,7 @@ read_osinfo_db_xml (guestfs_h *g, const char *pathname) } #if 0 - debug (g, "osinfo: %s: %s%s%s%s=> arch %s live %s product %s type %d distro %d version %d.%d", + debug (g, "osinfo: %s: %s%s%s%s=> arch %s live %s installer %s product %s type %d distro %d version %d.%d", pathname, osinfo->re_system_id ? "<system-id/> " : "", osinfo->re_volume_id ? "<volume-id/> " : "", @@ -420,6 +420,7 @@ read_osinfo_db_xml (guestfs_h *g, const char *pathname) osinfo->re_application_id ? "<application-id/> " : "", osinfo->arch ? osinfo->arch : "(none)", osinfo->is_live_disk ? "true" : "false", + osinfo->is_installer ? "true" : "false", osinfo->product_name ? osinfo->product_name : "(none)", (int) osinfo->type, (int) osinfo->distro, osinfo->major_version, osinfo->minor_version); @@ -495,6 +496,14 @@ read_media_node (guestfs_h *g, xmlXPathContextPtr xpathCtx, osinfo->is_live_disk = XMLSTREQ (content, BAD_CAST "true"); } + osinfo->is_installer = true; /* If no 'installer' attr, defaults to true. */ + { + CLEANUP_XMLFREE xmlChar *content = NULL; + content = xmlGetProp (media_node, BAD_CAST "installer"); + if (content) + osinfo->is_installer = XMLSTREQ (content, BAD_CAST "true"); + } + return 0; } -- 2.7.4