Blob Blame History Raw
%global _hardened_build 1

%ifarch %{arm} %{ix86} x86_64 ppc %{power64}
%global have_libguestfs 1
%endif

Name:           nbdkit
Version:        1.1.9
Release:        2%{?dist}
Summary:        NBD server

License:        BSD
URL:            https://github.com/libguestfs/nbdkit
Source0:        http://libguestfs.org/download/nbdkit/%{name}-%{version}.tar.gz

Patch1:         0001-streaming-Update-the-buf-pointer-when-doing-partial-.patch

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:  python-devel


%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.


%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
Summary:        Python plugin for %{name}
License:        BSD

Requires:       %{name}%{?_isa} = %{version}-%{release}


%description plugin-python
This package lets you write Python 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

%patch1 -p1


%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"
%configure --disable-static
make %{?_smp_mflags}


%install
%make_install

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


%check
# Workaround for broken libvirt (RHBZ#1138604).
mkdir -p $HOME/.cache/libvirt

# libguestfs 1.20 in Fedora 18 doesn't support NBD client protocol, so
# the tests cannot be run.
%if 0%{?fedora} >= 19
# Unlikely that libguestfs will work on ARM and PPC, so don't try running the
# tests there.
%ifnarch %{arm} ppc %{power64}
make check
%endif
%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*


%files plugin-perl
%doc LICENSE README
%{_libdir}/%{name}/plugins/nbdkit-perl-plugin.so
%{_mandir}/man3/nbdkit-perl-plugin.3*


%files plugin-python
%doc LICENSE README
%{_libdir}/%{name}/plugins/nbdkit-python-plugin.so
%{_mandir}/man3/nbdkit-python-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
%{_includedir}/nbdkit-plugin.h
%{_mandir}/man3/nbdkit-plugin.3*


%changelog
* Tue Oct 14 2014 Richard W.M. Jones <rjones@redhat.com> - 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 <rjones@redhat.com> - 1.1.8-4
- Rebuild for updated Perl in Rawhide.
- Workaround for broken libvirt (RHBZ#1138604).

* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.8-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Sat Jun 21 2014 Richard W.M. Jones <rjones@redhat.com> - 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 <rjones@redhat.com> - 1.1.7-1
- New upstream version 1.1.7.
- Remove patches which are now all upstream.

* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.6-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

* Thu Mar 06 2014 Dan HorĂ¡k <dan[at]danny.cz> - 1.1.6-4
- libguestfs is available only on selected arches

* Fri Feb 21 2014 Richard W.M. Jones <rjones@redhat.com> - 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 <rjones@redhat.com> - 1.1.6-1
- New upstream version 1.1.6.

* Sat Feb 15 2014 Richard W.M. Jones <rjones@redhat.com> - 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 <rjones@redhat.com> - 1.1.4-1
- New upstream version 1.1.4.
- Enable the new Perl plugin.

* Sun Aug  4 2013 Richard W.M. Jones <rjones@redhat.com> - 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 <rel-eng@lists.fedoraproject.org> - 1.1.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild

* Sun Jul 21 2013 Richard W.M. Jones <rjones@redhat.com> - 1.1.2-3
- Fix segfault when IPv6 client is used (RHBZ#986601).

* Tue Jul 16 2013 Richard W.M. Jones <rjones@redhat.com> - 1.1.2-2
- New development version 1.1.2.
- Disable the tests on Fedora <= 18.

* Tue Jun 25 2013 Richard W.M. Jones <rjones@redhat.com> - 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 <rjones@redhat.com> - 1.0.0-4
- Initial release.