Add workaround for broken "file" utility in Rawhide (RHBZ#1945122).
This commit is contained in:
parent
8f6ba6d789
commit
a6a11a65c9
@ -1,7 +1,7 @@
|
|||||||
From 49b8b69cb8e10e5476bbe86a708ee1babfe330e8 Mon Sep 17 00:00:00 2001
|
From 49b8b69cb8e10e5476bbe86a708ee1babfe330e8 Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Tue, 30 Mar 2021 12:56:06 +0100
|
Date: Tue, 30 Mar 2021 12:56:06 +0100
|
||||||
Subject: [PATCH 1/4] daemon/xfs.c: Fix error message.
|
Subject: [PATCH 1/5] daemon/xfs.c: Fix error message.
|
||||||
|
|
||||||
Fixes: commit 87206e4e9e3b0ca813a4ff7b5fac0eccc07a484a
|
Fixes: commit 87206e4e9e3b0ca813a4ff7b5fac0eccc07a484a
|
||||||
---
|
---
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 2216ab2e328457ef172d6bfa534272edf2f81a3a Mon Sep 17 00:00:00 2001
|
From 2216ab2e328457ef172d6bfa534272edf2f81a3a Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Tue, 30 Mar 2021 12:41:58 +0100
|
Date: Tue, 30 Mar 2021 12:41:58 +0100
|
||||||
Subject: [PATCH 2/4] tests: Prefer xorriso over genisoimage to generate
|
Subject: [PATCH 2/5] tests: Prefer xorriso over genisoimage to generate
|
||||||
test.iso
|
test.iso
|
||||||
|
|
||||||
This Debian page explains the upstream situation:
|
This Debian page explains the upstream situation:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From efb8a766cac4ba8e413594946136bf91e176bb8c Mon Sep 17 00:00:00 2001
|
From efb8a766cac4ba8e413594946136bf91e176bb8c Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Tue, 30 Mar 2021 13:54:22 +0100
|
Date: Tue, 30 Mar 2021 13:54:22 +0100
|
||||||
Subject: [PATCH 3/4] daemon: Allow xorriso as an alternative to isoinfo.
|
Subject: [PATCH 3/5] daemon: Allow xorriso as an alternative to isoinfo.
|
||||||
|
|
||||||
Currently the guestfs_isoinfo and guestfs_isoinfo_device APIs run
|
Currently the guestfs_isoinfo and guestfs_isoinfo_device APIs run
|
||||||
isoinfo inside the appliance to extract the information.
|
isoinfo inside the appliance to extract the information.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 2f587bbaec718e414e46c7e6f2a3e2662c3a1c2a Mon Sep 17 00:00:00 2001
|
From 2f587bbaec718e414e46c7e6f2a3e2662c3a1c2a Mon Sep 17 00:00:00 2001
|
||||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
Date: Wed, 31 Mar 2021 10:32:52 +0100
|
Date: Wed, 31 Mar 2021 10:32:52 +0100
|
||||||
Subject: [PATCH 4/4] daemon: Read ISO9660 Primary Volume Descriptor directly.
|
Subject: [PATCH 4/5] daemon: Read ISO9660 Primary Volume Descriptor directly.
|
||||||
|
|
||||||
It turns out we can read the information we need for the isoinfo API
|
It turns out we can read the information we need for the isoinfo API
|
||||||
directly from the ISO9660 PVD. We don't need to use either isoinfo or
|
directly from the ISO9660 PVD. We don't need to use either isoinfo or
|
||||||
|
127
0005-lib-appliance-kcmdline.c-Read-UUID-directly-from-app.patch
Normal file
127
0005-lib-appliance-kcmdline.c-Read-UUID-directly-from-app.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
From 278d0d3226f4bdb7c6586986ca46d0a25c976fe4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||||
|
Date: Wed, 31 Mar 2021 13:40:11 +0100
|
||||||
|
Subject: [PATCH 5/5] lib/appliance-kcmdline.c: Read UUID directly from
|
||||||
|
appliance.
|
||||||
|
|
||||||
|
Instead of using the external file utility, read the UUID directly
|
||||||
|
from the extfs filesystem. file 5.40 broke parsing of UUIDs
|
||||||
|
(https://bugs.astron.com/view.php?id=253).
|
||||||
|
|
||||||
|
Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1945122
|
||||||
|
---
|
||||||
|
lib/appliance-kcmdline.c | 75 +++++++++++++++++++++++++---------------
|
||||||
|
1 file changed, 48 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/appliance-kcmdline.c b/lib/appliance-kcmdline.c
|
||||||
|
index 6d0deef86..8b78655eb 100644
|
||||||
|
--- a/lib/appliance-kcmdline.c
|
||||||
|
+++ b/lib/appliance-kcmdline.c
|
||||||
|
@@ -27,6 +27,9 @@
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
+#include <fcntl.h>
|
||||||
|
+#include <libintl.h>
|
||||||
|
+#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "c-ctype.h"
|
||||||
|
#include "ignore-value.h"
|
||||||
|
@@ -56,49 +59,67 @@
|
||||||
|
#define EARLYPRINTK "earlyprintk=pl011,0x9000000"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-COMPILE_REGEXP (re_uuid, "UUID=([-0-9a-f]+)", 0)
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-read_uuid (guestfs_h *g, void *retv, const char *line, size_t len)
|
||||||
|
-{
|
||||||
|
- char **ret = retv;
|
||||||
|
-
|
||||||
|
- *ret = match1 (g, line, re_uuid);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
/**
|
||||||
|
* Given a disk image containing an extX filesystem, return the UUID.
|
||||||
|
- * The L<file(1)> command does the hard work.
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
get_root_uuid_with_file (guestfs_h *g, const char *appliance)
|
||||||
|
{
|
||||||
|
- CLEANUP_CMD_CLOSE struct command *cmd = guestfs_int_new_command (g);
|
||||||
|
- char *ret = NULL;
|
||||||
|
- int r;
|
||||||
|
+ unsigned char magic[2], uuid[16];
|
||||||
|
+ char *ret;
|
||||||
|
+ int fd;
|
||||||
|
|
||||||
|
- guestfs_int_cmd_add_arg (cmd, "file");
|
||||||
|
- guestfs_int_cmd_add_arg (cmd, "--");
|
||||||
|
- guestfs_int_cmd_add_arg (cmd, appliance);
|
||||||
|
- guestfs_int_cmd_set_stdout_callback (cmd, read_uuid, &ret, 0);
|
||||||
|
- r = guestfs_int_cmd_run (cmd);
|
||||||
|
- if (r == -1) {
|
||||||
|
- if (ret) free (ret);
|
||||||
|
+ fd = open (appliance, O_RDONLY|O_CLOEXEC);
|
||||||
|
+ if (fd == -1) {
|
||||||
|
+ perrorf (g, _("open: %s"), appliance);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
- if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) {
|
||||||
|
- guestfs_int_external_command_failed (g, r, "file", NULL);
|
||||||
|
- if (ret) free (ret);
|
||||||
|
+ if (lseek (fd, 0x438, SEEK_SET) != 0x438) {
|
||||||
|
+ magic_error:
|
||||||
|
+ error (g, _("%s: cannot read extfs magic in superblock"), appliance);
|
||||||
|
+ close (fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
+ if (read (fd, magic, 2) != 2)
|
||||||
|
+ goto magic_error;
|
||||||
|
+ if (magic[0] != 0x53 || magic[1] != 0xEF) {
|
||||||
|
+ error (g, _("%s: appliance is not an extfs filesystem"), appliance);
|
||||||
|
+ close (fd);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ if (lseek (fd, 0x468, SEEK_SET) != 0x468) {
|
||||||
|
+ super_error:
|
||||||
|
+ error (g, _("%s: cannot read UUID in superblock"), appliance);
|
||||||
|
+ close (fd);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+ if (read (fd, uuid, 16) != 16)
|
||||||
|
+ goto super_error;
|
||||||
|
+ close (fd);
|
||||||
|
|
||||||
|
+ /* The UUID is a binary blob, but we must return it as a printable
|
||||||
|
+ * string. The caller frees this.
|
||||||
|
+ */
|
||||||
|
+ ret = safe_asprintf (g,
|
||||||
|
+ "%02x%02x%02x%02x" "-"
|
||||||
|
+ "%02x%02x" "-"
|
||||||
|
+ "%02x%02x" "-"
|
||||||
|
+ "%02x%02x" "-"
|
||||||
|
+ "%02x%02x%02x%02x%02x%02x",
|
||||||
|
+ uuid[0], uuid[1], uuid[2], uuid[3],
|
||||||
|
+ uuid[4], uuid[5],
|
||||||
|
+ uuid[6], uuid[7],
|
||||||
|
+ uuid[8], uuid[9],
|
||||||
|
+ uuid[10], uuid[11], uuid[12], uuid[13],
|
||||||
|
+ uuid[14], uuid[15]);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * Read the first 256k bytes of the in_file with L<qemu-img(1)> command
|
||||||
|
- * and write them into the out_file. That may be useful to get UUID of
|
||||||
|
- * the QCOW2 disk image with further L<file(1)> command.
|
||||||
|
+ * Read the first 256k bytes of the in_file with L<qemu-img(1)>
|
||||||
|
+ * command and write them into the out_file. That may be useful to get
|
||||||
|
+ * UUID of the QCOW2 disk image with C<get_root_uuid_with_file>.
|
||||||
|
+ *
|
||||||
|
* The function returns zero if successful, otherwise -1.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
--
|
||||||
|
2.29.0.rc2
|
||||||
|
|
@ -61,7 +61,7 @@ Summary: Access and modify virtual machine disk images
|
|||||||
Name: libguestfs
|
Name: libguestfs
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 1.45.3
|
Version: 1.45.3
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
|
|
||||||
# Build only for architectures that have a kernel
|
# Build only for architectures that have a kernel
|
||||||
@ -96,6 +96,8 @@ Patch0001: 0001-daemon-xfs.c-Fix-error-message.patch
|
|||||||
Patch0002: 0002-tests-Prefer-xorriso-over-genisoimage-to-generate-te.patch
|
Patch0002: 0002-tests-Prefer-xorriso-over-genisoimage-to-generate-te.patch
|
||||||
Patch0003: 0003-daemon-Allow-xorriso-as-an-alternative-to-isoinfo.patch
|
Patch0003: 0003-daemon-Allow-xorriso-as-an-alternative-to-isoinfo.patch
|
||||||
Patch0004: 0004-daemon-Read-ISO9660-Primary-Volume-Descriptor-direct.patch
|
Patch0004: 0004-daemon-Read-ISO9660-Primary-Volume-Descriptor-direct.patch
|
||||||
|
# Workaround for file 5.40 which is broken in Fedora Rawhide.
|
||||||
|
Patch0005: 0005-lib-appliance-kcmdline.c-Read-UUID-directly-from-app.patch
|
||||||
|
|
||||||
# Downstream (RHEL-only) patches.
|
# Downstream (RHEL-only) patches.
|
||||||
%if 0%{?rhel}
|
%if 0%{?rhel}
|
||||||
@ -1124,8 +1126,9 @@ rm ocaml/html/.gitignore
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Wed Mar 31 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-5
|
* Wed Mar 31 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-6
|
||||||
- Don't require genisoimage or xorriso for the appliance.
|
- Don't require genisoimage or xorriso for the appliance.
|
||||||
|
- Add workaround for broken "file" utility in Rawhide (RHBZ#1945122).
|
||||||
|
|
||||||
* Tue Mar 30 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-4
|
* Tue Mar 30 2021 Richard W.M. Jones <rjones@redhat.com> - 1:1.45.3-4
|
||||||
- Add downstream (RHEL-only) patches (RHBZ#1931724).
|
- Add downstream (RHEL-only) patches (RHBZ#1931724).
|
||||||
|
Loading…
Reference in New Issue
Block a user