%global _hardened_build 1 %ifarch aarch64 %{arm} %{ix86} x86_64 ppc %{power64} %global have_libguestfs 1 %endif Name: nbdkit Version: 1.1.12 Release: 3%{?dist} Summary: NBD server License: BSD URL: https://github.com/libguestfs/nbdkit Source0: http://libguestfs.org/download/nbdkit/%{name}-%{version}.tar.gz # All upstream patches since 1.1.12, up to the point that # Python 3 support was added. Patch1: 0001-docs-Small-clarification-to-nbdkit-plugin-man-page.patch Patch2: 0002-Mention-Ruby-in-the-README.patch Patch3: 0003-Implement-dump-plugin-option.patch Patch4: 0004-Update-copyright-date-on-a-few-files.patch Patch5: 0005-tests-Multiple-small-additions-and-cleanups-to-the-t.patch Patch6: 0006-Add-support-for-testing-under-valgrind.patch Patch7: 0007-tests-Fix-memory-leak-in-OCaml-test-harness-found-by.patch Patch8: 0008-Improve-memory-management-of-nbdkit-python-plugin-ex.patch Patch9: 0009-nbdkit-Talk-about-Python-in-the-Python-plugin.patch Patch10: 0010-Fix-build-for-Python-3.patch Patch11: 0011-tests-python-Use-bytearray-in-the-test.patch # Because the patches touch Makefile.am etc. BuildRequires: autoconf, automake, libtool BuildRequires: /usr/bin/pod2man %if 0%{?have_libguestfs} BuildRequires: libguestfs-devel %endif BuildRequires: libvirt-devel BuildRequires: xz-devel BuildRequires: zlib-devel BuildRequires: libcurl-devel BuildRequires: perl-devel BuildRequires: perl(ExtUtils::Embed) BuildRequires: python2-devel BuildRequires: python3-devel %ifarch %{ocaml_native_compiler} # Requires OCaml 4.02.2 which contains fix for # http://caml.inria.fr/mantis/view.php?id=6693 BuildRequires: ocaml >= 4.02.2 %endif BuildRequires: ruby-devel # For complicated reasons, this is required so that # /bin/kernel-install puts the kernel directly into /boot, instead of # into a /boot/ subdirectory (in Fedora >= 23). Read the # kernel-install script to understand why. BuildRequires: grubby %description NBD is a protocol for accessing block devices (hard disks and disk-like things) over the network. 'nbdkit' is a toolkit for creating NBD servers. The key features are: * Multithreaded NBD server written in C with good performance. * Well-documented, simple plugin API with a stable ABI guarantee. Allows you to export "unconventional" block devices easily. * Liberal license (BSD) allows nbdkit to be linked to proprietary libraries or included in proprietary code. You probably want to install one of more plugins (%{name}-plugin-*). To develop plugins, install the %{name}-devel package and start by reading the nbdkit(1) and nbdkit-plugin(3) manual pages. %package plugin-curl Summary: HTTP/FTP/SSH (cURL) plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-curl This package contains cURL (HTTP/FTP/SSH) support for %{name}. %package plugin-examples Summary: Example plugins for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-examples This package contains example plugins for %{name}. %package plugin-file Summary: File serving plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-file This package is a file serving plugin for %{name}. %if 0%{?have_libguestfs} %package plugin-guestfs Summary: libguestfs plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-guestfs This package is a libguestfs plugin for %{name}. %endif %package plugin-gzip Summary: GZip file serving plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-gzip This package is a gzip file serving plugin for %{name}. %package plugin-libvirt Summary: Libvirt plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-libvirt This package is a libvirt plugin for %{name}. It lets you access libvirt guest disks readonly. It is implemented using the libvirt virDomainBlockPeek API. %ifarch %{ocaml_native_compiler} %package plugin-ocaml Summary: OCaml plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-ocaml This package lets you run OCaml plugins for %{name}. To compile OCaml plugins you will also need to install %{name}-plugin-ocaml-devel. %package plugin-ocaml-devel Summary: OCaml development environment for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-plugin-ocaml%{?_isa} = %{version}-%{release} %description plugin-ocaml-devel This package lets you write OCaml plugins for %{name}. %endif %package plugin-perl Summary: Perl plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-perl This package lets you write Perl plugins for %{name}. %package plugin-python-common Summary: Python 2 and 3 plugin common files for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-python-common This package contains common files shared between Python 2 and Python 3 %{name} plugins. You should not install this package directly. Instead install either %{name}-plugin-python2 or %{name}-plugin-python3. %package plugin-python2 Summary: Python 2 plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-plugin-python-common = %{version}-%{release} Provides: %{name}-plugin-python = %{version}-%{release} Obsoletes: %{name}-plugin-python <= %{version}-%{release} %description plugin-python2 This package lets you write Python 2 plugins for %{name}. %package plugin-python3 Summary: Python 3 plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-plugin-python-common = %{version}-%{release} %description plugin-python3 This package lets you write Python 3 plugins for %{name}. %package plugin-ruby Summary: Ruby plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-ruby This package lets you write Ruby plugins for %{name}. %package plugin-streaming Summary: Streaming file serving plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-streaming This package is a streaming plugin for %{name}. %package plugin-xz Summary: XZ file serving plugin for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description plugin-xz This package is a xz file serving plugin for %{name}. %package devel Summary: Development files and documentation for %{name} License: BSD Requires: %{name}%{?_isa} = %{version}-%{release} %description devel This package contains development files and documentation for %{name}. Install this package if you want to develop plugins for %{name}. %prep %setup -q %autopatch -p1 # Because the patches touch Makefile.am etc. autoreconf -i %build # Force immediate binding for hardened build for plugins. # https://bugzilla.redhat.com/show_bug.cgi?id=977446#c13 export LDFLAGS="$LDFLAGS -Wl,-z,now" # Build for Python 3 in a separate subdirectory. Upstream does not # support srcdir!=builddir so copy the whole source. copy="$(mktemp -d)" cp -a . "$copy" mv "$copy" python3 %configure --disable-static make %{?_smp_mflags} pushd python3 PYTHON=/usr/bin/python3 \ %configure --disable-static --disable-perl --disable-ocaml --disable-ruby make %{?_smp_mflags} popd %install # Install for Python 2 and Python 3 separately. # We do the Python 3 install first since that build is # incomplete. pushd python3 %make_install popd pushd $RPM_BUILD_ROOT%{_libdir}/nbdkit/plugins/ mv nbdkit-python-plugin.so nbdkit-python3-plugin.so popd %make_install pushd $RPM_BUILD_ROOT%{_libdir}/nbdkit/plugins/ mv nbdkit-python-plugin.so nbdkit-python2-plugin.so # For backwards compatibility, "the" python plugin is Python 2. # Probably we will change this in future if Fedora switches # exclusively to Python 3. ln -s nbdkit-python2-plugin.so nbdkit-python-plugin.so popd # Delete libtool crap. find $RPM_BUILD_ROOT -name '*.la' -delete %check # Workaround for broken libvirt (RHBZ#1138604). mkdir -p $HOME/.cache/libvirt # Make sure we can see the debug messages (RHBZ#1230160). export LIBGUESTFS_DEBUG=1 export LIBGUESTFS_TRACE=1 # Unlikely that libguestfs will work on ARM and PPC, so don't try running the # tests there. # Broken on i686 because of https://bugzilla.redhat.com/show_bug.cgi?id=1302071 %ifnarch %{arm} %{ix86} ppc %{power64} # Broken on F25 because of https://bugzilla.redhat.com/show_bug.cgi?id=1344016 %if 0%{?fedora} < 25 make check || { cat tests/test-suite.log exit 1 } pushd python3 make check || { cat tests/test-suite.log exit 1 } popd %endif %endif %ifarch %{ocaml_native_compiler} %post plugin-ocaml -p /sbin/ldconfig %postun plugin-ocaml -p /sbin/ldconfig %endif %files %doc LICENSE README %{_sbindir}/nbdkit %dir %{_libdir}/%{name} %dir %{_libdir}/%{name}/plugins %{_mandir}/man1/nbdkit.1* %files plugin-curl %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-curl-plugin.so %{_mandir}/man1/nbdkit-curl-plugin.1* %files plugin-examples %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-example*-plugin.so %{_mandir}/man1/nbdkit-example*-plugin.1* %files plugin-file %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-file-plugin.so %{_mandir}/man1/nbdkit-file-plugin.1* %if 0%{?have_libguestfs} %files plugin-guestfs %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-guestfs-plugin.so %{_mandir}/man1/nbdkit-guestfs-plugin.1* %endif %files plugin-gzip %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-gzip-plugin.so %{_mandir}/man1/nbdkit-gzip-plugin.1* %files plugin-libvirt %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-libvirt-plugin.so %{_mandir}/man1/nbdkit-libvirt-plugin.1* %ifarch %{ocaml_native_compiler} %files plugin-ocaml %doc LICENSE README %{_libdir}/libnbdkitocaml.so.* %files plugin-ocaml-devel %{_libdir}/libnbdkitocaml.so %{_libdir}/ocaml/NBDKit.* %{_mandir}/man3/nbdkit-ocaml-plugin.3* %endif %files plugin-perl %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-perl-plugin.so %{_mandir}/man3/nbdkit-perl-plugin.3* %files plugin-python-common %doc LICENSE README %{_mandir}/man3/nbdkit-python-plugin.3* %files plugin-python2 %{_libdir}/%{name}/plugins/nbdkit-python-plugin.so %{_libdir}/%{name}/plugins/nbdkit-python2-plugin.so %files plugin-python3 %{_libdir}/%{name}/plugins/nbdkit-python3-plugin.so %files plugin-ruby %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-ruby-plugin.so %{_mandir}/man3/nbdkit-ruby-plugin.3* %files plugin-streaming %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-streaming-plugin.so %{_mandir}/man1/nbdkit-streaming-plugin.1* %files plugin-xz %doc LICENSE README %{_libdir}/%{name}/plugins/nbdkit-xz-plugin.so %{_mandir}/man1/nbdkit-xz-plugin.1* %files devel %doc LICENSE README TODO # Include the source of the example plugins in the documentation. %doc plugins/example*/*.c %doc plugins/perl/example.pl %doc plugins/python/example.py %doc plugins/ruby/example.rb %{_includedir}/nbdkit-plugin.h %{_mandir}/man3/nbdkit-plugin.3* %changelog * Sat Nov 05 2016 Richard W.M. Jones - 1.1.12-3 - Rebuild for OCaml 4.04.0. * Mon Oct 03 2016 Richard W.M. Jones - 1.1.12-2 - Compile Python 2 and Python 3 versions of the plugin. * Wed Jun 08 2016 Richard W.M. Jones - 1.1.12-1 - New upstream version 1.1.12 - Enable Ruby plugin. - Disable tests on Rawhide because libvirt is broken again (RHBZ#1344016). * Wed May 25 2016 Richard W.M. Jones - 1.1.11-10 - Add another upstream patch since 1.1.11. * Mon May 23 2016 Richard W.M. Jones - 1.1.11-9 - Add all patches upstream since 1.1.11 (fixes RHBZ#1336758). * Tue May 17 2016 Jitka Plesnikova - 1.1.11-7 - Perl 5.24 rebuild * Wed Mar 09 2016 Richard W.M. Jones - 1.1.11-6 - When tests fail, dump out test-suite.log so we can debug it. * Fri Feb 05 2016 Richard W.M. Jones - 1.1.11-5 - Don't run tests on x86, because kernel is broken there (https://bugzilla.redhat.com/show_bug.cgi?id=1302071) * Thu Feb 04 2016 Fedora Release Engineering - 1.1.11-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild * Mon Jan 11 2016 Richard W.M. Jones - 1.1.11-3 - Add support for newstyle NBD protocol (RHBZ#1297100). * Sat Oct 31 2015 Richard W.M. Jones - 1.1.11-1 - New upstream version 1.1.11. * Thu Jul 30 2015 Richard W.M. Jones - 1.1.10-3 - OCaml 4.02.3 rebuild. * Sat Jun 20 2015 Richard W.M. Jones - 1.1.10-2 - Enable libguestfs plugin on aarch64. * Fri Jun 19 2015 Richard W.M. Jones - 1.1.10-1 - New upstream version. - Enable now working OCaml plugin (requires OCaml >= 4.02.2). * Wed Jun 17 2015 Fedora Release Engineering - 1.1.9-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Thu Jun 11 2015 Jitka Plesnikova - 1.1.9-5 - Perl 5.22 rebuild * Wed Jun 10 2015 Richard W.M. Jones - 1.1.9-4 - Enable debugging messages when running make check. * Sat Jun 06 2015 Jitka Plesnikova - 1.1.9-3 - Perl 5.22 rebuild * Tue Oct 14 2014 Richard W.M. Jones - 1.1.9-2 - New upstream version 1.1.9. - Add the streaming plugin. - Include fix for streaming plugin in 1.1.9. * Wed Sep 10 2014 Richard W.M. Jones - 1.1.8-4 - Rebuild for updated Perl in Rawhide. - Workaround for broken libvirt (RHBZ#1138604). * Sun Aug 17 2014 Fedora Release Engineering - 1.1.8-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Sat Jun 21 2014 Richard W.M. Jones - 1.1.8-1 - New upstream version 1.1.8. - Add support for cURL, and new nbdkit-plugin-curl package. * Fri Jun 20 2014 Richard W.M. Jones - 1.1.7-1 - New upstream version 1.1.7. - Remove patches which are now all upstream. * Sat Jun 07 2014 Fedora Release Engineering - 1.1.6-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild * Thu Mar 06 2014 Dan HorĂ¡k - 1.1.6-4 - libguestfs is available only on selected arches * Fri Feb 21 2014 Richard W.M. Jones - 1.1.6-3 - Backport some upstream patches, fixing a minor bug and adding more tests. - Enable the tests since kernel bug is fixed. * Sun Feb 16 2014 Richard W.M. Jones - 1.1.6-1 - New upstream version 1.1.6. * Sat Feb 15 2014 Richard W.M. Jones - 1.1.5-2 - New upstream version 1.1.5. - Enable the new Python plugin. - Perl plugin man page moved to section 3. - Perl now requires ExtUtils::Embed. * Mon Feb 10 2014 Richard W.M. Jones - 1.1.4-1 - New upstream version 1.1.4. - Enable the new Perl plugin. * Sun Aug 4 2013 Richard W.M. Jones - 1.1.3-1 - New upstream version 1.1.3 which fixes some test problems. - Disable tests because Rawhide kernel is broken (RHBZ#991808). - Remove a single quote from description which confused emacs. - Remove patch, now upstream. * Sat Aug 03 2013 Fedora Release Engineering - 1.1.2-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild * Sun Jul 21 2013 Richard W.M. Jones - 1.1.2-3 - Fix segfault when IPv6 client is used (RHBZ#986601). * Tue Jul 16 2013 Richard W.M. Jones - 1.1.2-2 - New development version 1.1.2. - Disable the tests on Fedora <= 18. * Tue Jun 25 2013 Richard W.M. Jones - 1.1.1-1 - New development version 1.1.1. - Add libguestfs plugin. - Run the test suite. * Mon Jun 24 2013 Richard W.M. Jones - 1.0.0-4 - Initial release.