summaryrefslogtreecommitdiff
path: root/guestfs-tools.spec
blob: 6a5f7a2ba949377d566fa04d8abc65b1ed88826a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
# Architectures that we run the test suite on.
#
# As the test suite takes a very long time to run and is somewhat
# unreliable on !x86 architectures, only run it on x86-64.
%global test_arches x86_64

# Verify tarball signature with GPGv2.
%global verify_tarball_signature 1

# If there are patches which touch autotools files, set this to 1.
%global patches_touch_autotools 1

# The source directory.
%global source_directory 1.51-development

# Filter perl provides.
%{?perl_default_filter}

Summary:       Tools to access and modify virtual machine disk images
Name:          guestfs-tools
Version:       1.51.6
Release:       2%{?dist}
License:       GPL-2.0-or-later AND LGPL-2.0-or-later

# Build only for architectures that have a kernel
ExclusiveArch: %{kernel_arches}
%if 0%{?rhel}
# No qemu-kvm on POWER (RHBZ#1946532).
ExcludeArch: %{power64}
%endif

# Source and patches.
URL:           http://libguestfs.org/
Source0:       http://download.libguestfs.org/guestfs-tools/%{source_directory}/%{name}-%{version}.tar.gz
%if 0%{verify_tarball_signature}
Source1:       http://download.libguestfs.org/guestfs-tools/%{source_directory}/%{name}-%{version}.tar.gz.sig
%endif

# Keyring used to verify tarball signature.
%if 0%{verify_tarball_signature}
Source2:       libguestfs.keyring
%endif

# Maintainer script which helps with handling patches.
Source3:       copy-patches.sh

# Patches are maintained in the following repository:
# https://github.com/rwmjones/guestfs-tools/commits/rhel-9.4

# Patches.
Patch0001:     0001-Update-common-submodule.patch
Patch0002:     0002-builder-Add-a-test-of-the-chown-parameter.patch
Patch0003:     0003-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch
Patch0004:     0004-RHEL-builder-Disable-opensuse-repository.patch

%if 0%{patches_touch_autotools}
BuildRequires: autoconf, automake, libtool, gettext-devel
%endif

# Basic build requirements.
BuildRequires: gcc, gcc-c++
BuildRequires: make
BuildRequires: libguestfs-devel >= 1:1.49.8-1
BuildRequires: libguestfs-xfs
BuildRequires: perl(Pod::Simple)
BuildRequires: perl(Pod::Man)
BuildRequires: perl(Module::Build)
BuildRequires: perl(Test::More)
BuildRequires: /usr/bin/pod2text
BuildRequires: po4a
BuildRequires: pcre2-devel
BuildRequires: libxml2-devel
BuildRequires: jansson-devel
BuildRequires: libvirt-devel
BuildRequires: libosinfo-devel
BuildRequires: libxcrypt-devel
BuildRequires: ncurses-devel
%ifarch x86_64
BuildRequires: glibc-static
%endif
BuildRequires: ocaml-libguestfs-devel
BuildRequires: ocaml-findlib-devel
BuildRequires: ocaml-gettext-devel
%if !0%{?rhel}
BuildRequires: ocaml-ounit-devel
%endif
BuildRequires: flex
BuildRequires: bison
BuildRequires: xz-devel
%if !0%{?rhel}
BuildRequires: zip
BuildRequires: unzip
%endif
%if !0%{?rhel}
BuildRequires: perl(Expect)
%endif
BuildRequires: bash-completion
BuildRequires: /usr/bin/qemu-img
BuildRequires: xorriso
BuildRequires: hwdata-devel
BuildRequires: perl(Locale::TextDomain)
BuildRequires: perl(Sys::Guestfs)
BuildRequires: perl(Win::Hivex)
BuildRequires: perl(Win::Hivex::Regedit)
BuildRequires: perl-generators

%if 0%{verify_tarball_signature}
BuildRequires: gnupg2
%endif

# Ensure a minimum version of libguestfs is installed.  This contains
# a workaround for openssl bug RHBZ#2133884 and the hang where we
# called setenv between fork and exec.
Requires:      libguestfs >= 1.49.6-1

# For virt-builder:
Requires:      curl
Requires:      gnupg2
Requires:      /usr/bin/qemu-img
Requires:      xz

# For virt-builder-repository:
Suggests:      osinfo-db

# For virt-drivers:
Recommends:    hwdata

# For virt-inspector, since Fedora and RHEL >= 7 use XFS:
Recommends:    libguestfs-xfs

# For virt-edit and virt-customize:
Suggests:      perl

# This replaces the libguestfs-tools-c package.
Provides:      libguestfs-tools-c = 1:%{version}-%{release}
Obsoletes:     libguestfs-tools-c <= 1:1.45.2-1


%description
guestfs-tools is a set of tools that can be used to make batch
configuration changes to guests, get disk used/free statistics
(virt-df), perform backups and guest clones, change
registry/UUID/hostname info, build guests from scratch (virt-builder)
and much more.

Virt-alignment-scan scans virtual machines looking for partition
alignment problems.

Virt-builder is a command line tool for rapidly making disk images
of popular free operating systems.

Virt-cat is a command line tool to display the contents of a file in a
virtual machine.

Virt-customize is a command line tool for customizing virtual machine
disk images.

Virt-df is a command line tool to display free space on virtual
machine filesystems.  Unlike other tools, it doesn’t just display the
amount of space allocated to a virtual machine, but can look inside
the virtual machine to see how much space is really being used.  It is
like the df(1) command, but for virtual machines, except that it also
works for Windows virtual machines.

Virt-diff shows the differences between virtual machines.

Virt-drivers detects the bootloader, kernel and drivers inside a guest.

Virt-edit is a command line tool to edit the contents of a file in a
virtual machine.

Virt-filesystems is a command line tool to display the filesystems,
partitions, block devices, LVs, VGs and PVs found in a disk image
or virtual machine.  It replaces the deprecated programs
virt-list-filesystems and virt-list-partitions with a much more
capable tool.

Virt-format is a command line tool to erase and make blank disks.

Virt-get-kernel extracts a kernel/initrd from a disk image.

Virt-inspector examines a virtual machine and tries to determine the
version of the OS, the kernel version, what drivers are installed,
whether the virtual machine is fully virtualized (FV) or
para-virtualized (PV), what applications are installed and more.

Virt-log is a command line tool to display the log files from a
virtual machine.

Virt-ls is a command line tool to list out files in a virtual machine.

Virt-make-fs is a command line tool to build a filesystem out of
a collection of files or a tarball.

Virt-resize can resize existing virtual machine disk images.

Virt-sparsify makes virtual machine disk images sparse (thin-provisioned).

Virt-sysprep lets you reset or unconfigure virtual machines in
preparation for cloning them.

Virt-tail follows (tails) a log file within a guest, like 'tail -f'.


%package -n virt-win-reg
Summary:       Access and modify the Windows Registry of a Windows VM
License:       GPL-2.0-or-later
BuildArch:     noarch

# This replaces the libguestfs-tools package.
Provides:      libguestfs-tools = 1:%{version}-%{release}
Obsoletes:     libguestfs-tools <= 1:1.45.2-1


%description -n virt-win-reg
Virt-win-reg lets you look at and modify the Windows Registry of
Windows virtual machines.


%package bash-completion
Summary:       Bash tab-completion scripts for %{name}
BuildArch:     noarch
Requires:      bash-completion >= 2.0
Requires:      %{name} = %{version}-%{release}


%description bash-completion
Install this package if you want intelligent bash tab-completion
for the virt-* tools.


%package man-pages-ja
Summary:       Japanese (ja) man pages for %{name}
BuildArch:     noarch
Requires:      %{name} = %{version}-%{release}

%description man-pages-ja
%{name}-man-pages-ja contains Japanese (ja) man pages
for %{name}.


%package man-pages-uk
Summary:       Ukrainian (uk) man pages for %{name}
BuildArch:     noarch
Requires:      %{name} = %{version}-%{release}

%description man-pages-uk
%{name}-man-pages-uk contains Ukrainian (uk) man pages
for %{name}.


%prep
%if 0%{verify_tarball_signature}
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%endif
%setup -q
%autopatch -p1

%if 0%{patches_touch_autotools}
autoreconf -i
%endif


%build
%{configure}

# Building index-parse.c by hand works around a race condition in the
# autotools cruft, where two or more copies of yacc race with each
# other, resulting in a corrupted file.
make -j1 -C builder index-parse.c

make V=1 %{?_smp_mflags}


%check
%ifarch %{test_arches}
# Only run the tests with non-debug (ie. non-Rawhide) kernels.
# XXX This tests for any debug kernel installed.
if grep CONFIG_DEBUG_MUTEXES=y /lib/modules/*/config ; then
    echo "Skipping tests because debug kernel is installed"
    exit 0
fi

# Enable debugging.
export LIBGUESTFS_DEBUG=1
export LIBGUESTFS_TRACE=1

# This test is currently broken and needs further investigation.
export SKIP_TEST_MACHINE_READABLE_SH=1

# This test fails for me in local mock and Koji, but not when running
# in an unrestricted environment.
export SKIP_TEST_VIRT_FORMAT_SH=1

# This test takes too long to run under Koji and times out.  It runs
# fine with KVM enabled.
export SKIP_TEST_VIRT_RESIZE_PL=1

if ! make check -k ; then
    # Dump out the log files of any failing tests to make
    # debugging test failures easier.
    for f in `find -name test-suite.log | xargs grep -l ^FAIL:`; do
        echo '*****' $f '*****'
        cat $f
        echo
    done
    exit 1
fi
%endif


%install
make DESTDIR=$RPM_BUILD_ROOT install

# Delete libtool files.
find $RPM_BUILD_ROOT -name '*.la' -delete

# Move installed documentation back to the source directory so
# we can install it using a %%doc rule.
mv $RPM_BUILD_ROOT%{_docdir}/%{name} installed-docs
gzip --best installed-docs/*.xml

# Find locale files.
%find_lang %{name}


# Fix upgrades from old libguestfs-tools-c package
# which had /etc/virt-builder -> xdg/virt-builder.
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Directory_Replacement/
# This can be removed in Fedora > 36.
%pretrans -p <lua>
path = "/etc/virt-builder"
st = posix.stat(path)
if st and st.type == "link" then
  os.remove(path)
end


%files -f %{name}.lang
%license COPYING
%doc README
%doc installed-docs/*
%dir %{_sysconfdir}/virt-builder
%dir %{_sysconfdir}/virt-builder/repos.d
%config(noreplace) %{_sysconfdir}/virt-builder/repos.d/*
%{_bindir}/virt-alignment-scan
%{_bindir}/virt-builder
%{_bindir}/virt-builder-repository
%{_bindir}/virt-cat
%{_bindir}/virt-customize
%{_bindir}/virt-df
%{_bindir}/virt-diff
%{_bindir}/virt-drivers
%{_bindir}/virt-edit
%{_bindir}/virt-filesystems
%{_bindir}/virt-format
%{_bindir}/virt-get-kernel
%{_bindir}/virt-index-validate
%{_bindir}/virt-inspector
%{_bindir}/virt-log
%{_bindir}/virt-ls
%{_bindir}/virt-make-fs
%{_bindir}/virt-resize
%{_bindir}/virt-sparsify
%{_bindir}/virt-sysprep
%{_bindir}/virt-tail
%{_mandir}/man1/guestfs-tools-release-notes-1*.1*
%{_mandir}/man1/virt-alignment-scan.1*
%{_mandir}/man1/virt-builder-repository.1*
%{_mandir}/man1/virt-builder.1*
%{_mandir}/man1/virt-cat.1*
%{_mandir}/man1/virt-customize.1*
%{_mandir}/man1/virt-df.1*
%{_mandir}/man1/virt-diff.1*
%{_mandir}/man1/virt-drivers.1*
%{_mandir}/man1/virt-edit.1*
%{_mandir}/man1/virt-filesystems.1*
%{_mandir}/man1/virt-format.1*
%{_mandir}/man1/virt-get-kernel.1*
%{_mandir}/man1/virt-index-validate.1*
%{_mandir}/man1/virt-inspector.1*
%{_mandir}/man1/virt-log.1*
%{_mandir}/man1/virt-ls.1*
%{_mandir}/man1/virt-make-fs.1*
%{_mandir}/man1/virt-resize.1*
%{_mandir}/man1/virt-sparsify.1*
%{_mandir}/man1/virt-sysprep.1*
%{_mandir}/man1/virt-tail.1*


%files -n virt-win-reg
%license COPYING
%doc README
%{_bindir}/virt-win-reg
%{_mandir}/man1/virt-win-reg.1*


%files bash-completion
%license COPYING
%dir %{_datadir}/bash-completion/completions
%{_datadir}/bash-completion/completions/virt-*


%files man-pages-ja
%lang(ja) %{_mandir}/ja/man1/*.1*


%files man-pages-uk
%lang(uk) %{_mandir}/uk/man1/*.1*


%changelog
* Fri Jan 19 2024 Richard W.M. Jones <rjones@redhat.com> - 1.51.6-2
- Rebase to guestfs-tools 1.51.6
- Implement --key all:...
  resolves: RHEL-19030
- Fix crash because of off-by-one error
  resolves: RHEL-19062
- Fix virt-customize --chown invalid format
  resolves: RHEL-21899

* Thu Jun 08 2023 Laszlo Ersek <lersek@redhat.com> - 1.50.1-3
- let virt-inspector recognize "--key /dev/mapper/VG-LV:key:password"
- reenable "make check"; we now use "-cpu max" (libguestfs 30f74f38bd6e)
  resolves: rhbz#2209280

* Thu Apr 06 2023 Richard W.M. Jones <rjones@redhat.com> - 1.50.1-1
- Rebase to guestfs-tools 1.50.1
  resolves: rhbz#2168626
- Fix virt-drivers inspection of RHEL 9.2 guests
  resolves: rhbz#2184963

* Thu Nov 24 2022 Richard W.M. Jones <rjones@redhat.com> - 1.48.2-8
- Support Rocky Linux in virt-customize
  resolves: rhbz#2133443
- Disable OpenSUSE repo in virt-builder
  resolves: rhbz#2145160

* Fri Jul 15 2022 Richard W.M. Jones <rjones@redhat.com> - 1.48.2-5
- Rebase to guestfs-tools 1.48.2
  resolves: rhbz#2059286
- Default to --selinux-relabel in various tools
  resolves: rhbz#2075718, rhbz#2089748
- Add lvm system.devices cleanup operation to virt-sysprep
  resolves: rhbz#2072493
- Refactor virt-customize --install, --update options in common submodule
- Add support for Clevis & Tang
  resolves: rhbz#1809453
- Fix CVE-2022-2211 Denial of Service in --key parameter
  resolves: rhbz#2102721
- Fix virt-sysprep and LUKS-on-LVM guests
  resolves: rhbz#2106286

* Sat Dec 04 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-6
- Clean up NetworkManager connection files
- Add the copy-patches.sh script from virt-v2v
  resolves: rhbz#1980922

* Tue Nov 23 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-5
- Fix detection of Kylin Desktop
  resolves: rhbz#2025950

* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.46.1-4.1
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
  Related: rhbz#1991688

* Wed Jun  2 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-3.el9.1
- Add gating tests (for RHEL 9)

* Mon May 17 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-3
- Fix virt-win-reg --version
  resolves: rhbz#1961160

* Thu May 13 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-2
- BR perl-generators so deps of virt-win-reg subpackage are correct.
  resolves: rhbz#1960191

* Sat May 08 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.1-1
- New stable branch version 1.46.1.

* Tue Apr 27 2021 Richard W.M. Jones <rjones@redhat.com> - 1.46.0-1
- New stable branch version 1.46.0.

* Wed Apr 07 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.3-4
- Use Epoch 1 for virt-dib subpackage (only).

* Wed Mar 31 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.3-3
- Add BR xorriso, needed to run the tests.

* Mon Mar 29 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.3-1
- New upstream version 1.45.3.
- Fix symlink replacement of virt-builder directory (RHBZ#1943838).

* Fri Mar 26 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.2-5
- Skip test-virt-resize.pl that takes too long to run.

* Thu Mar 25 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.2-4
- Add perl(Test::More) dependency for the Perl test suite.
- Add perl(Module::Build) dependency for the Perl bindings.
- Fix ounit2 dependency again.

* Wed Mar 24 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.2-2
- Add perl(Locale::TextDomain) dependency for virt-win-reg.
- Fix ounit2 dependency upstream.

* Tue Mar 23 2021 Richard W.M. Jones <rjones@redhat.com> - 1.45.2-1
- New guestfs-tools package, split off from libguestfs.