Commit Graph

12063 Commits

Author SHA1 Message Date
Richard W.M. Jones
98d94d847f daemon/inspect_fs_windows.ml: Ignore blank disks in drive mapping
If HKLM\System\MountedDevices references a blank disk, then when we
try to search for the actual backing device we will get an error from
parted:

  parted: /dev/sdb: parted exited with status 1: Error: /dev/sdb: unrecognised disk label: Invalid argument

Just ignore these errors instead of failing inspection.

Fixes: https://issues.redhat.com/browse/RHEL-108803
Reported-by: Ameen Barakat
Thanks: Ming Xie
(cherry picked from commit 1c00248ac1)
2025-08-14 15:59:13 +01:00
Richard W.M. Jones
3720994fca daemon/inspect_fs_windows.ml: Add debugging when we start registry analysis
Add some debugging when we begin the process of analyzing the Windows
registry of a guest.

(cherry picked from commit 5c7e15cfae)
2025-08-14 15:59:08 +01:00
Richard W.M. Jones
cbd75c2017 daemon/inspect_fs_windows.ml: Add debugging for MBR drive mappings
The function 'map_registry_disk_blob_gpt' immediately below this one
has a debugging statement.  Add the equivalent to the function
'map_registry_disk_blob_mbr'.

The output looks like:

  map_registry_disk_blob_mbr: searching for MBR disk ID 31 32 33 34
  map_registry_disk_blob_mbr: searching for MBR partition offset 00 00 00 10 00 00 00 00

(cherry picked from commit e18bd72c8e)
2025-08-14 15:59:05 +01:00
Richard W.M. Jones
b448164dff appliance/init: Add lsblk and blkid output to verbose log
This is useful for debugging.  The output looks like:

  + lsblk
  NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  sda           8:0    0    1G  0 disk
  |-sda1        8:1    0  512M  0 part
  `-sda2        8:2    0  512M  0 part
    |-VG-Root 252:0    0   32M  0 lvm
    |-VG-LV1  252:1    0   32M  0 lvm
    |-VG-LV2  252:2    0   32M  0 lvm
    `-VG-LV3  252:3    0   64M  0 lvm
  sdb           8:16   0    4G  0 disk /
  + blkid
  /dev/mapper/VG-LV1: UUID="cc8a3437-4169-4b1c-b432-ee8adc563f6d" BLOCK_SIZE="4096" TYPE="ext2"
  /dev/sdb: UUID="30c70ddc-d00b-4620-a408-025890e59aa6" BLOCK_SIZE="4096" TYPE="ext2"
  /dev/mapper/VG-LV2: UUID="747009aa-e183-46ba-a034-0c437b15cebc" BLOCK_SIZE="1024" TYPE="ext2"
  /dev/mapper/VG-Root: LABEL="ROOT" UUID="01234567-0123-0123-0123-012345678902" BLOCK_SIZE="4096" TYPE="ext2"
  /dev/sda2: UUID="DfEjc1-wRU6-vh8U-we7U-ivEl-FRwo-rG0ZuL" TYPE="LVM2_member" PARTUUID="184cbb43-02"
  /dev/sda1: LABEL="BOOT" UUID="01234567-0123-0123-0123-012345678901" BLOCK_SIZE="4096" TYPE="ext2" PARTUUID="184cbb43-01"
  /dev/mapper/VG-LV3: UUID="f9e5dc21-9a2a-45a0-85b0-e2889607139a" BLOCK_SIZE="2048" TYPE="ext2"

Fixes: https://issues.redhat.com/browse/RHEL-106490
(cherry picked from commit 217823da95)
2025-07-30 12:21:50 +01:00
Richard W.M. Jones
dbdc5bc786 daemon: Add contents of /etc/fstab to verbose log
Also some mdadm configuration files.  This is useful for debugging.

The output looks like this:

  info: /etc/fstab in /dev/VG/Root
  LABEL=BOOT /boot ext2 default 0 0$
  LABEL=ROOT / ext2 default 0 0$

Fixes: https://issues.redhat.com/browse/RHEL-106490
(cherry picked from commit f4f84a8824)
2025-07-30 12:21:47 +01:00
Richard W.M. Jones
e73ac4912d lib/inspect-osinfo.c: Generate new osinfo shortname for SLES >= 15
libosinfo changes the naming scheme it uses for SUSE starting with
major version 15.  Previously it used names like "sles12" (or
"sles12sp1"), "sled12" for Server and Desktop variants.  In 15+ it
uses "sle15" as there are no variants any longer (instead the
installer asks you what variant you want to install).  We're only
interested in the Server variant.  Change the name that we return to
"sle15" or "sle15sp1".

See: b0fa386699
Fixes: https://issues.redhat.com/browse/RHEL-95791
Thanks: Ming Xie, Victor Toso
Related: https://issues.redhat.com/browse/RHEL-95540
(cherry picked from commit db46bcb535)
2025-06-17 11:08:54 +01:00
Richard W.M. Jones
682765a63e daemon: inspect: Remove duplicate root mountpoints in /etc/fstab
A customer case was found where /etc/fstab contained multiple root
mountpoints, something like:

  LABEL=System / xfs ...
  LABEL=Boot /boot ext2 ...
  LABEL=System / xfs ...

This causes libguestfs and virt-v2v to fail.  Either (on RHEL 9) we
try to mount the second instance of / which gives an error.  Or (on
upstream kernels) we are able to mount the second instance but then
libguestfs gets confused when trying to unmount them.

In this case as the mounted devices are the same we can just delete
the duplicate.  It's also possible that there could be multiple
non-identical root mountpoints, in which case we have to pick one, and
this code arbitrarily picks the first[*] (but emits a warning).

We don't do anything for non-root mountpoints.

Update common submodule to add 'List.same' function from mlstdutils.

[*] Which one is "the first" depends on what version of ocaml-augeas
we are using.  ocaml-augeas version 0.6 Augeas.matches function
returns entries in reverse order (compared to augeas itself).  This is
fixed in version 0.7:
http://git.annexia.org/?p=ocaml-augeas.git;a=commitdiff;h=b703b92e3d26690aa6f7b822132049ce5435983e

Fixes: https://issues.redhat.com/browse/RHEL-90168
(cherry picked from commit 5441d3dd0c)
2025-05-08 21:20:14 +01:00
Richard W.M. Jones
e9a7378d73 daemon/fstrim.c: Issue sync_disks after fstrim
Thanks: Eric Sandeen
(cherry picked from commit e127edcafc)
2025-04-25 15:34:59 +01:00
Richard W.M. Jones
14b2ac2d5f RHEL 9: daemon/fstrim.c: Run the fstrim command twice
Workaround for https://issues.redhat.com/browse/RHEL-88450

Fixes: https://issues.redhat.com/browse/RHEL-88508
Related: https://issues.redhat.com/browse/RHEL-88450
Thanks: Eric Sandeen
2025-04-25 15:34:54 +01:00
Richard W.M. Jones
180293338e daemon: inspect: Resolve Ubuntu 22+ /dev/disk/by-id/dm-uuid-LVM-... in fstab
Linux + LVM supports device names like /dev/disk/by-id/dm-uuid-LVM-
followed by two concatenated UUIDs, firstly for the volume group and
secondly for the logical volume.  We can reverse those to get the
device name (/dev/VG/LV).

fstab entries look like:

  # / was on /dev/vg0/lv-0 during curtin installation
  /dev/disk/by-id/dm-uuid-LVM-OzFWT6NHkstr1hcmrWRRMDGPn9xdZj1YOOycQ533186x288FdU6UubU3OlnWJz6D / ext4 defaults 0 1
  # /usr was on /dev/vg0/lv-1 during curtin installation
  /dev/disk/by-id/dm-uuid-LVM-OzFWT6NHkstr1hcmrWRRMDGPn9xdZj1YZu53m4ZssZ8Jeb3I14RAJwIj5YlHIb9P /usr ext4 defaults 0 1

The upshot of this fix is that we are now able to correctly inspect
and run virt-v2v on Ubuntu 22+ guests with split /usr.  In particular,
we correctly map /etc/fstab entries like the above to LV device names,
which means that /usr merging now works correctly.

Reported-by: Jaroslav Spanko
Thanks: Daniel Berrange
Fixes: https://issues.redhat.com/browse/RHEL-87493
(cherry picked from commit e43ca19129)
2025-04-16 21:32:20 +01:00
Richard W.M. Jones
80b2fcb243 daemon: Rewrite {pvs,vgs,lvs}-full APIs in OCaml
These were previously written in very convoluted C which had to deal
with parsing the crazy output of the "lvm" command.  In fact the
parsing was so complex that it was generated by the generator.  It's
easier to do this in OCaml.

These are basically legacy APIs.  They cannot be expanded and LVM
already supports many more fields.  We should replace these with APIs
for getting single named fields from LVM.

(cherry picked from commit a73f248369)
2025-04-16 21:32:12 +01:00
Richard W.M. Jones
c7930f2140 Update common submodule
Richard W.M. Jones (1):
      mlstdutils: Implement String.implode
2025-04-16 21:31:49 +01:00
Richard W.M. Jones
1b64c54b8a generator: Fix implementation of FUUID for OCaml functions
This was implemented wrongly.  In the XDR protocol, UUIDs are fixed
buffers of length 32.  We can just use memcpy to copy from the OCaml
string to the UUID, but we have to ensure the string length returned
by OCaml is correct (if not we just assert, it's an internal error).

(It didn't even compile before, so we know it was never used).

(cherry picked from commit bcd6b3ec3a)
2025-04-16 21:31:19 +01:00
Richard W.M. Jones
0d466cb25e daemon: inspect: Resolve Ubuntu 22+ /dev/disk/by-uuid/ in fstab
Ubuntu 22= uses /dev/disk/by-uuid/ followed by a filesystem UUID in
fstab entries.  Resolve these to mountables.

A typical fstab entry looks like this:

  # /boot was on /dev/vda2 during curtin installation
  /dev/disk/by-uuid/b4e56462-5a64-4272-b76d-f5e58bd8f128 /boot ext4 defaults 0 1

The comment is generated by the installer and appears in the fstab.
This entry would be translated to /dev/sda2.

(cherry picked from commit 7a1ffd744b)
2025-04-16 21:31:14 +01:00
Richard W.M. Jones
b306532e7a generator: Use new FDevice type for the pvs-full pv_name field
Remove the code which did explicit reverse device name translation,
and use the generator's code instead.

(cherry picked from commit 5a16d1120f)
2025-04-16 21:31:07 +01:00
Richard W.M. Jones
4e27b259c1 generator: Implement struct FDevice type
This acts just like FString except that we do reverse device name
translation on it.  The only use is in the 'pvs-full' API where we
will use it (in a subsequent commit) to reverse translate the pv_name
field (a device name) before returning it from the daemon.

Compare this to the 'pvs' API which also returns a list of device
names, but using the generator's 'RStructList (RDevice,...)'  return
type, where RDevice is similarly reverse translated.

Note in the library-side bindings, because the name has already been
translated in the daemon, we just treat it exactly the same as
FString.  The vast majority of this patch is this mechanical change.

(cherry picked from commit 0ff73a42c7)
2025-04-16 21:31:02 +01:00
Richard W.M. Jones
68cecb6475 daemon: inspect: Add some debugging of /usr merging
(cherry picked from commit 2d1e894130)
2025-04-16 21:30:58 +01:00
Richard W.M. Jones
fa1c165282 daemon: Fix loongarch64 detection on RHEL 9
$ rpm -q file
file-5.39-16.el9.x86_64
$ file ./test-data/binaries/bin-loongarch64-dynamic
./test-data/binaries/bin-loongarch64-dynamic: ELF 64-bit LSB pie executable, *unknown arch 0x102* version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-loongarch-lp64d.so.1, BuildID[sha1]=7622a1a70bf6e697851ac3790557e1ca686459b5, for GNU/Linux 5.19.0, stripped

Updates: commit 729d6d55ea
(cherry picked from commit 4176b2043f)
2025-03-11 13:44:01 +00:00
Richard W.M. Jones
19c4d1c8b9 lib: Print kernel utsname in debug output
Useful for debugging problems caused by the host kernel.  In
particular we were looking at a problem with passt creating a user
namespace but didn't know what exact kernel was being used.

(cherry picked from commit 31fa712aa0)
2025-03-11 12:45:50 +00:00
Richard W.M. Jones
42ae34115f daemon: New command_out and sh_out APIs
These APIs allow you to capture output from guest commands that
generate more output than the protocol limit allows.

Thanks: Nijin Ashok
Fixes: https://issues.redhat.com/browse/RHEL-80159
(cherry picked from commit 47ac4871b2)
2025-02-24 16:01:19 +00:00
Richard W.M. Jones
0212c0fe22 RHEL: Reject use of libguestfs-winsupport features except for virt-* tools (RHBZ#1240276).
Fix the tests: it doesn't let us use guestfish for arbitrary Windows
edits.
2024-10-30 10:29:50 +00:00
Richard W.M. Jones
1b6dd045a7 RHEL: Disable unsupported remote drive protocols (RHBZ#962113).
This disables support for unsupported remote drive protocols:

 * ftp
 * ftps
 * http
 * https
 * iscsi
 * ssh

Note 'nbd' is not disabled, and of course 'file' works.
2024-10-30 10:29:50 +00:00
Richard W.M. Jones
a5cc27fc95 website: Fix link to latest development version
Fixes: commit 0edaea8f91
2024-10-30 10:29:50 +00:00
Richard W.M. Jones
9255abee02 build: Remove Jansson dependency
After previous changes, this library is no longer used.  We have
switched to json-c, for better compatibility with libvirt.

(cherry picked from
guestfs-tools commit e6dcf7e3a7e9170978e57ce6df1b34f92fac5ae3)
2024-10-22 16:44:53 +01:00
Richard W.M. Jones
9e3c1f44ca lib/qemu.c: Replace jansson with json-c 2024-10-22 16:44:53 +01:00
Richard W.M. Jones
47857751a7 lib: direct: Remove test for qemu mandatory locking
We tested for QEMU >= 2.10 support for mandatory locking.  I believe
this is for all practical purposes always enabled now (and qemu 2.10
is ancient history) so simply assume it's true always.
2024-10-22 16:23:07 +01:00
Richard W.M. Jones
13e3222f34 lib/info.c: Replace jansson with json-c 2024-10-22 16:03:16 +01:00
Richard W.M. Jones
8e34b37bcd common: Update common submodule
Although we don't use JSON_parser in libguestfs, update the submodule
just to get rid of another Jansson dependency:

  Richard W.M. Jones (1):
      mltools: Replace jansson with json-c
2024-10-22 15:35:14 +01:00
Richard W.M. Jones
5ea1e899e0 daemon/ldm.c: Replace jansson with json-c 2024-10-22 11:02:38 +01:00
Richard W.M. Jones
53872a0a1a build: Add new dependency on json-c
This will eventually replace Jansson for all JSON parsing.  However
this commit simply introduces the new dependency in the configure
script and documents it.

I chose json-c 0.14 as the baseline since that is the version in RHEL 9.
Probably earlier versions would work.
2024-10-22 11:01:25 +01:00
Richard W.M. Jones
798e3e59b2 appliance: Refactor the TAR_COMMAND macro
No change, just make it easier to understand.

Updates: commit 53632b4b82
2024-10-22 09:15:56 +01:00
Richard W.M. Jones
53632b4b82 appliance: Use stable owner, group and mtime in appliance tarballs
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2320025
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
2024-10-21 12:14:03 +01:00
Richard W.M. Jones
e37768d889 build: Assume __attribute__((cleanup)) always works
All recent compilers support this (except MS compilers which we don't
care about).  Assume it is supported.  We test it in ./configure and
hard fail if it doesn't work.

We still define HAVE_ATTRIBUTE_CLEANUP but you can now assume it is
always defined and don't have to check it.
2024-10-18 21:55:21 +01:00
Richard W.M. Jones
0f489f8eec lib/inspect-osinfo.c: Add Windows Server 2025 osinfo
The guest was found to have these inspection fields:

    type: windows
    distro: windows
    product_name: Windows Server 2025 Standard
    product_variant: Server
    version: 10.0
    arch: x86_64
    hostname: WIN-84V4KKQ30SM
    build ID: 26080
    windows_systemroot: /Windows
    windows_software_hive: /Windows/System32/config/SOFTWARE
    windows_system_hive: /Windows/System32/config/SYSTEM
    windows_current_control_set: ControlSet001

Reported-by: Ming Xie
Fixes: https://issues.redhat.com/browse/RHEL-62935
2024-10-17 08:59:49 +01:00
Richard W.M. Jones
c25ff1a802 tests/gdisk/test-expand-gpt.pl: Implement SKIP rule for this test
Reported-by: David Runge
Related: https://github.com/libguestfs/libguestfs/issues/155
2024-10-14 10:43:08 +01:00
Richard W.M. Jones
0edaea8f91 website: Add links for 1.54 and 1.55 download locations 2024-10-08 14:53:38 +01:00
Richard W.M. Jones
3fb6ebb342 Version 1.54.0. v1.54.0 2024-10-08 14:37:12 +01:00
Richard W.M. Jones
e4691f66b7 docs: Finalize release notes for libguestfs 1.54 2024-10-08 13:41:43 +01:00
Richard W.M. Jones
715b5def13 Version 1.53.7. v1.53.7 2024-10-03 13:09:36 +01:00
Richard W.M. Jones
49f118e9da docs: Create outline release notes for 1.54 2024-10-02 16:13:52 +01:00
Richard W.M. Jones
e97c6f5933 bugs-in-changelog.sh: List Jira IDs and github issues in output 2024-10-02 16:02:43 +01:00
Richard W.M. Jones
a6639afb74 po-docs: Add mlcustomize POD to po-docs/podfiles
Add these two files from the common/ submodule:

common/mlcustomize/v2v-customize-options.pod
common/mlcustomize/v2v-customize-synopsis.pod

Updates: commit fe1ce09242
2024-10-02 15:48:41 +01:00
Richard W.M. Jones
e55eac12d4 docs: Update libguestfs email address in a couple more places
Reported-by: Julian Euler
2024-09-12 12:45:54 +01:00
Wang Guoquan
1d8924c343 libguestfs: Support openEuler
openEuler is simliar to CentOS, but the ID is not lower-case string,
as below:

    NAME="openEuler"
    VERSION="24.03 (LTS)"
    ID="openEuler"
    VERSION_ID="24.03"
    PRETTY_NAME="openEuler 24.03 (LTS)"
    ANSI_COLOR="0;31"

Signed-off-by: Wang Guoquan <wangguoquan03@foxmail.com>
2024-09-10 11:33:20 +01:00
rwmjones
82ffc1e66e Merge pull request #153 from weblate/weblate-libguestfs-libguestfs-master
Translations update from Fedora Weblate
2024-09-04 13:35:14 +01:00
Yuri Chornoivan
f2e5dbf0ef Translated using Weblate (Ukrainian)
Currently translated at 100.0% (961 of 961 strings)

Translation: libguestfs/libguestfs-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/libguestfs-master/uk/
2024-09-04 12:38:36 +02:00
rwmjones
faec06b6fb Merge pull request #152 from weblate/weblate-libguestfs-libguestfs-master
Translations update from Fedora Weblate
2024-09-02 15:00:44 +01:00
Weblate
6ed520dc00 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: libguestfs/libguestfs-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/libguestfs-master/
2024-09-02 15:40:40 +02:00
Andi Chandler
82b538abae Translated using Weblate (English (United Kingdom))
Currently translated at 54.0% (8671 of 16047 strings)

Translation: libguestfs/libguestfs-docs-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/libguestfs-docs-master/en_GB/

Translated using Weblate (English (United Kingdom))

Currently translated at 3.4% (33 of 970 strings)

Translation: libguestfs/libguestfs-master
Translate-URL: https://translate.fedoraproject.org/projects/libguestfs/libguestfs-master/en_GB/
2024-09-02 15:40:39 +02:00
Richard W.M. Jones
fe1ce09242 generator: Don't include virt-customize --inject* options in virt-v2v
Virt-v2v already includes facilities for injecting QEMU guest agent
etc.  We shouldn't add the virt-customize options for this.

Update common submodule to include:

Richard W.M. Jones (2):
      mlcustomize: Move virt-customize modules to mlcustomize/
      mlcustomize: Update generated options for virt-v2v
2024-08-20 21:22:30 +01:00