%global _hardened_build 1 %ifarch aarch64 x86_64 %global have_libguestfs 1 %endif %global complete_test_arches x86_64 %if 0%{?rhel} != 7 %global have_python3 1 %endif %ifnarch riscv64 %global have_libvirt 1 %endif %global verify_tarball_signature 1 %global patches_touch_autotools %{nil} Name: nbdkit Version: 1.6.2 Release: 2 Summary: NBD server License: BSD URL: https://github.com/libguestfs/nbdkit Source0: http://libguestfs.org/download/nbdkit/1.6-stable/%{name}-%{version}.tar.gz %if 0%{verify_tarball_signature} Source1: http://libguestfs.org/download/nbdkit/1.6-stable/%{name}-%{version}.tar.gz.sig Source2: libguestfs.keyring %endif %if 0%{patches_touch_autotools} BuildRequires: autoconf, automake, libtool %endif %if 0%{?rhel} == 7 ExclusiveArch: x86_64 %endif %ifnarch %{complete_test_arches} BuildRequires: autoconf, automake, libtool %endif BuildRequires: /usr/bin/pod2man gnutls-devel libselinux-devel %if 0%{?have_libguestfs} BuildRequires: libguestfs-devel %endif %if 0%{?have_libvirt} BuildRequires: libvirt-devel %endif BuildRequires: xz-devel zlib-devel libcurl-devel e2fsprogs-devel BuildRequires: bash-completion perl-devel perl(ExtUtils::Embed) python2-devel %if 0%{?have_python3} BuildRequires: python3-devel %endif BuildRequires: ocaml >= 4.02.2 ruby-devel tcl-devel lua-devel %if 0%{verify_tarball_signature} BuildRequires: gnupg2 %endif BuildRequires: /usr/bin/certtool /usr/bin/qemu-img BuildRequires: /usr/bin/socat /usr/sbin/ss Requires: nbdkit-server nbdkit-basic-plugins nbdkit-basic-filters %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 braries or included in proprietary code. In Fedora, '%{name}' is a meta-package which pulls in the core server and a useful subset of plugins and filters. If you want just the server, install '%{name}-server'. To develop plugins, install the '%{name}-devel' package and start by reading the nbdkit(1) and nbdkit-plugin(3) manual pages. %package server Summary: The %{name} server License: BSD %description server This package contains the %{name} server with no plugins or filters. %package basic-plugins Summary: Basic plugins for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Obsoletes: %{name}-plugin-file < 1.1.19-1 Obsoletes: %{name}-plugin-nbd < 1.1.19-1 Obsoletes: %{name}-plugin-streaming < 1.1.19-1 %description basic-plugins This package contains some basic plugins for %{name} which have only trivial dependencies. * nbdkit-data-plugin Serve small files directly from the command line. * nbdkit-file-plugin A file serving plugin. * nbdkit-memory-plugin A virtual memory plugin. * nbdkit-nbd-plugin An NBD forwarding plugin. It provides an NBD server that forwards all traffic as a client to another existing NBD server. A primary usage of this setup is to alter the set of features available to the ultimate end client, without having to change the original server (for example, to convert between oldstyle and newtyle, or to add TLS support where the original server lacks it). * nbdkit-null-plugin A null (bitbucket) plugin. * nbdkit-pattern-plugin Fixed test pattern. * nbdkit-random-plugin Random content plugin for testing. * nbdkit-split-plugin Concatenate one or more files into a single virtual disk. * nbdkit-streaming-plugin A streaming file serving plugin. * nbdkit-zero-plugin Zero-length plugin for testing. %package plugins Summary: Plugins set License: BSD Provides: %{name}-example-plugins Obsoletes: %{name}-example-plugins %{name}-plugin-examples < 1.1.19-1 Provides: %{name}-curl-plugin %{name}-plugin-curl = %{version}-%{release} Obsoletes: %{name}-curl-plugin %{name}-plugin-curl <= %{version}-%{release} Provides: %{name}-ext2-plugin %{name}-plugin-ext2 = %{version}-%{release} Obsoletes: %{name}-ext2-plugin %{name}-plugin-ext2 <= %{version}-%{release} Provides: %{name}-gzip-plugin %{name}-plugin-gzip = %{version}-%{release} Obsoletes: %{name}-gzip-plugin %{name}-plugin-gzip <= %{version}-%{release} Provides: %{name}-lua-plugin %{name}-plugin-lua = %{version}-%{release} Obsoletes: %{name}-lua-plugin %{name}-plugin-lua <= %{version}-%{release} Provides: %{name}-ruby-plugin %{name}-plugin-ruby = %{version}-%{release} Obsoletes: %{name}-ruby-plugin %{name}-plugin-ruby <= %{version}-%{release} Provides: %{name}-tar-plugin %{name}-plugin-tar = %{version}-%{release} Obsoletes: %{name}-tar-plugin %{name}-plugin-tar <= %{version}-%{release} Provides: %{name}-tcl-plugin %{name}-plugin-tcl = %{version}-%{release} Obsoletes: %{name}-tcl-plugin %{name}-plugin-tcl <= %{version}-%{release} Provides: %{name}-xz-plugin %{name}-plugin-xz = %{version}-%{release} Obsoletes: %{name}-xz-plugin %{name}-plugin-xz <= %{version}-%{release} Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: %{name}-perl-plugin %description plugins This package contains a set of plugins for %{name}. %if 0%{?have_libguestfs} %package guestfs-plugin Summary: libguestfs plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-guestfs = %{version}-%{release} Obsoletes: %{name}-plugin-guestfs <= %{version}-%{release} %description guestfs-plugin This package is a libguestfs plugin for %{name}. %endif %if 0%{?have_libvirt} %package libvirt-plugin Summary: Libvirt plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-libvirt = %{version}-%{release} Obsoletes: %{name}-plugin-libvirt <= %{version}-%{release} %description libvirt-plugin This package is a libvirt plugin for %{name}. It lets you access libvirt guest disks readonly. It is implemented using the libvirt virDomainBlockPeek API. %endif %package ocaml-plugin Summary: OCaml plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-ocaml = %{version}-%{release} Obsoletes: %{name}-plugin-ocaml <= %{version}-%{release} %description ocaml-plugin This package lets you run OCaml plugins for %{name}. To compile OCaml plugins you will also need to install %{name}-ocaml-plugin-devel. %package ocaml-plugin-devel Summary: OCaml development environment for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: %{name}-ocaml-plugin%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-ocaml-devel = %{version}-%{release} Obsoletes: %{name}-plugin-ocaml-devel <= %{version}-%{release} %description ocaml-plugin-devel This package lets you write OCaml plugins for %{name}. %package perl-plugin Summary: Perl plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-perl = %{version}-%{release} Obsoletes: %{name}-plugin-perl <= %{version}-%{release} %description perl-plugin This package lets you write Perl plugins for %{name}. %package python-plugin-common Summary: Python 2 and 3 plugin common files for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-python-common = %{version}-%{release} Obsoletes: %{name}-plugin-python-common <= %{version}-%{release} %description python-plugin-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}-python2-plugin or %{name}-python3-plugin. %package python2-plugin Summary: Python 2 plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: %{name}-python-plugin-common = %{version}-%{release} Provides: %{name}-plugin-python = %{version}-%{release} Provides: %{name}-plugin-python2 = %{version}-%{release} Obsoletes: %{name}-plugin-python <= %{version}-%{release} Obsoletes: %{name}-plugin-python2 <= %{version}-%{release} %description python2-plugin This package lets you write Python 2 plugins for %{name}. %if 0%{?have_python3} %package python3-plugin Summary: Python 3 plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: %{name}-python-plugin-common = %{version}-%{release} Provides: %{name}-plugin-python3 = %{version}-%{release} Obsoletes: %{name}-plugin-python3 <= %{version}-%{release} %description python3-plugin This package lets you write Python 3 plugins for %{name}. %endif %ifarch x86_64 %package vddk-plugin Summary: VMware VDDK plugin for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Provides: %{name}-plugin-vddk = %{version}-%{release} Obsoletes: %{name}-plugin-vddk <= %{version}-%{release} %description vddk-plugin This package is a plugin for %{name} which connects to VMware VDDK for accessing VMware disks and servers. %endif %package basic-filters Summary: Basic filters for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} %description basic-filters This package contains some basic filters for %{name} which have only trivial dependencies. * nbdkit-blocksize-filter Adjust block size of requests sent to plugins. * nbdkit-cache-filter Server-side cache. * nbdkig-cow-filter Copy-on-write overlay for read-only plugins. * nbdkit-delay-filter Inject read and write delays. * nbdkit-error-filter Inject errors. * nbdkit-fua-filter Modify flush behaviour in plugins. * nbdkit-log-filter Log all transactions to a file. * nbdkit-nozero-filter Adjust handling of zero requests by plugins. * nbdkit-offset-filter Serve an offset and range. * nbdkit-partition-filter Serve a single partition. * nbdkit-truncate-filter Truncate, expand, round up or round down a plugin size. %package devel Summary: Development files and documentation for %{name} License: BSD Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: pkgconfig %description devel This package contains development files and documentation for %{name}. Install this package if you want to develop plugins for %{name}. %package bash-completion Summary: Bash tab-completion for %{name} BuildArch: noarch Requires: bash-completion >= 2.0 Requires: %{name}-server = %{version}-%{release} %description bash-completion Install this package if you want intelligent bash tab-completion for %{name}. %package help Summary: Documents for %{name} Buildarch: noarch Requires: man info %description help Man pages and other related documents for %{name} %prep %if 0%{verify_tarball_signature} tmphome="$(mktemp -d)" gpgv2 --homedir "$tmphome" --keyring %{SOURCE2} %{SOURCE1} %{SOURCE0} %endif %autosetup -p1 %if 0%{patches_touch_autotools} autoreconf -i %endif %ifnarch %{complete_test_arches} sed -i -e '/^if HAVE_LIBGUESTFS/,/^endif HAVE_LIBGUESTFS/d' tests/Makefile.am sed -i -e '/^if HAVE_GUESTFISH/,/^endif HAVE_GUESTFISH/d' tests/Makefile.am autoreconf -i %endif %build export LDFLAGS="$LDFLAGS -Wl,-z,now" copy="$(mktemp -d)" cp -a . "$copy" mv "$copy" python3 %configure \ --disable-static \ %if 0%{?have_libguestfs} --with-libguestfs \ %else --without-libguestfs \ %endif %if 0%{?have_libvirt} --with-libvirt \ %else --without-libvirt \ %endif --with-tls-priority=@NBDKIT,SYSTEM make %{?_smp_mflags} %if 0%{?have_python3} pushd python3 export PYTHON=%{_bindir}/python3 %configure \ --disable-static \ --disable-lua \ --disable-perl \ --disable-ocaml \ --disable-ruby \ --disable-tcl \ --without-curl \ --without-ext2 \ --without-libvirt \ --without-liblzma \ --without-zlib grep '^PYTHON_VERSION = 3' Makefile make %{?_smp_mflags} unset PYTHON popd %endif %install %if 0%{?have_python3} pushd python3 %make_install popd pushd $RPM_BUILD_ROOT%{_libdir}/nbdkit/plugins/ mv nbdkit-python-plugin.so nbdkit-python3-plugin.so popd %endif %make_install pushd $RPM_BUILD_ROOT%{_libdir}/nbdkit/plugins/ mv nbdkit-python-plugin.so nbdkit-python2-plugin.so ln -s nbdkit-python2-plugin.so nbdkit-python-plugin.so popd find $RPM_BUILD_ROOT -name '*.la' -delete %ifnarch %{ix86} x86_64 rm $RPM_BUILD_ROOT%{_libdir}/%{name}/plugins/nbdkit-vddk-plugin.so rm $RPM_BUILD_ROOT%{_mandir}/man1/nbdkit-vddk-plugin.1* %endif %check mkdir -p $HOME/.cache/libvirt export LIBGUESTFS_DEBUG=1 export LIBGUESTFS_TRACE=1 make check -j1 || { cat tests/test-suite.log exit 1 } %ifarch %{complete_test_arches} %if 0%{?have_libguestfs} %if 0%{?have_python3} pushd python3 make check -j1 -C tests TESTS=test-python || { cat tests/test-suite.log exit 1 } popd %endif %endif %endif %ldconfig_scriptlets plugin-ocaml %files %files server %doc README %license LICENSE %{_sbindir}/nbdkit %dir %{_libdir}/%{name} %dir %{_libdir}/%{name}/plugins %dir %{_libdir}/%{name}/filters %files basic-plugins %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-data-plugin.so %{_libdir}/%{name}/plugins/nbdkit-file-plugin.so %{_libdir}/%{name}/plugins/nbdkit-memory-plugin.so %{_libdir}/%{name}/plugins/nbdkit-nbd-plugin.so %{_libdir}/%{name}/plugins/nbdkit-null-plugin.so %{_libdir}/%{name}/plugins/nbdkit-pattern-plugin.so %{_libdir}/%{name}/plugins/nbdkit-random-plugin.so %{_libdir}/%{name}/plugins/nbdkit-split-plugin.so %{_libdir}/%{name}/plugins/nbdkit-streaming-plugin.so %{_libdir}/%{name}/plugins/nbdkit-zero-plugin.so %files plugins %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-example*-plugin.so %{_libdir}/%{name}/plugins/nbdkit-example4-plugin %{_libdir}/%{name}/plugins/nbdkit-curl-plugin.so %{_libdir}/%{name}/plugins/nbdkit-ext2-plugin.so %{_libdir}/%{name}/plugins/nbdkit-gzip-plugin.so %{_libdir}/%{name}/plugins/nbdkit-lua-plugin.so %{_libdir}/%{name}/plugins/nbdkit-ruby-plugin.so %{_libdir}/%{name}/plugins/nbdkit-tar-plugin %{_libdir}/%{name}/plugins/nbdkit-tcl-plugin.so %{_libdir}/%{name}/plugins/nbdkit-xz-plugin.so %if 0%{?have_libguestfs} %files guestfs-plugin %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-guestfs-plugin.so %{_mandir}/man1/nbdkit-guestfs-plugin.1* %endif %if 0%{?have_libvirt} %files libvirt-plugin %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-libvirt-plugin.so %{_mandir}/man1/nbdkit-libvirt-plugin.1* %endif %files ocaml-plugin %doc README %license LICENSE %{_libdir}/libnbdkitocaml.so.* %files ocaml-plugin-devel %{_libdir}/libnbdkitocaml.so %{_libdir}/ocaml/NBDKit.* %files perl-plugin %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-perl-plugin.so %files python-plugin-common %doc README %license LICENSE %files python2-plugin %{_libdir}/%{name}/plugins/nbdkit-python-plugin.so %{_libdir}/%{name}/plugins/nbdkit-python2-plugin.so %if 0%{?have_python3} %files python3-plugin %{_libdir}/%{name}/plugins/nbdkit-python3-plugin.so %endif %ifarch x86_64 %files vddk-plugin %doc README %license LICENSE %{_libdir}/%{name}/plugins/nbdkit-vddk-plugin.so %{_mandir}/man1/nbdkit-vddk-plugin.1* %endif %files basic-filters %doc README %license LICENSE %{_libdir}/%{name}/filters/nbdkit-blocksize-filter.so %{_libdir}/%{name}/filters/nbdkit-cache-filter.so %{_libdir}/%{name}/filters/nbdkit-cow-filter.so %{_libdir}/%{name}/filters/nbdkit-delay-filter.so %{_libdir}/%{name}/filters/nbdkit-error-filter.so %{_libdir}/%{name}/filters/nbdkit-fua-filter.so %{_libdir}/%{name}/filters/nbdkit-log-filter.so %{_libdir}/%{name}/filters/nbdkit-nozero-filter.so %{_libdir}/%{name}/filters/nbdkit-offset-filter.so %{_libdir}/%{name}/filters/nbdkit-partition-filter.so %{_libdir}/%{name}/filters/nbdkit-truncate-filter.so %files devel %doc OTHER_PLUGINS README TODO %license LICENSE %doc plugins/example*/*.c %doc plugins/example4/nbdkit-example4-plugin %doc plugins/lua/example.lua %doc plugins/perl/example.pl %doc plugins/python/example.py %doc plugins/ruby/example.rb %doc plugins/tcl/example.tcl %{_includedir}/nbdkit-common.h %{_includedir}/nbdkit-filter.h %{_includedir}/nbdkit-plugin.h %{_libdir}/pkgconfig/nbdkit.pc %files bash-completion %license LICENSE %dir %{_datadir}/bash-completion/completions %{_datadir}/bash-completion/completions/nbdkit %files help %{_mandir}/man1/nbdkit.1* %{_mandir}/man1/nbdkit-captive.1* %{_mandir}/man1/nbdkit-probing.1* %{_mandir}/man1/nbdkit-protocol.1* %{_mandir}/man1/nbdkit-service.1* %{_mandir}/man1/nbdkit-tls.1* %{_mandir}/man1/nbdkit-data-plugin.1* %{_mandir}/man1/nbdkit-file-plugin.1* %{_mandir}/man1/nbdkit-memory-plugin.1* %{_mandir}/man1/nbdkit-nbd-plugin.1* %{_mandir}/man1/nbdkit-null-plugin.1* %{_mandir}/man1/nbdkit-pattern-plugin.1* %{_mandir}/man1/nbdkit-random-plugin.1* %{_mandir}/man1/nbdkit-split-plugin.1* %{_mandir}/man1/nbdkit-streaming-plugin.1* %{_mandir}/man1/nbdkit-zero-plugin.1* %{_mandir}/man1/nbdkit-example*-plugin.1* %{_mandir}/man1/nbdkit-curl-plugin.1* %{_mandir}/man1/nbdkit-ext2-plugin.1* %{_mandir}/man1/nbdkit-gzip-plugin.1* %{_mandir}/man3/nbdkit-lua-plugin.3* %{_mandir}/man3/nbdkit-perl-plugin.3* %{_mandir}/man3/nbdkit-python-plugin.3* %{_mandir}/man3/nbdkit-ruby-plugin.3* %{_mandir}/man1/nbdkit-tar-plugin.1* %{_mandir}/man3/nbdkit-tcl-plugin.3* %{_mandir}/man1/nbdkit-xz-plugin.1* %{_mandir}/man1/nbdkit-blocksize-filter.1* %{_mandir}/man1/nbdkit-cache-filter.1* %{_mandir}/man1/nbdkit-cow-filter.1* %{_mandir}/man1/nbdkit-delay-filter.1* %{_mandir}/man1/nbdkit-error-filter.1* %{_mandir}/man1/nbdkit-fua-filter.1* %{_mandir}/man1/nbdkit-log-filter.1* %{_mandir}/man1/nbdkit-nozero-filter.1* %{_mandir}/man1/nbdkit-offset-filter.1* %{_mandir}/man1/nbdkit-partition-filter.1* %{_mandir}/man1/nbdkit-truncate-filter.1* %{_mandir}/man3/nbdkit-filter.3* %{_mandir}/man3/nbdkit-plugin.3* %{_mandir}/man3/nbdkit-ocaml-plugin.3* %changelog * Thu Dec 12 2019 openEuler Buildteam - 1.6.2-2 - Package init