cloud-hypervisor/rpm/cloud-hypervisor.spec

132 lines
4.6 KiB
RPMSpec
Raw Normal View History

# This spec file assumes you're building on an environment where:
# * You have access to the internet during the build
# * You have rustup installed on your system
# * You have both x86_64-unknown-linux-gnu and x86_64-unknown-linux-musl
# targets installed.
%define using_rustup 1
%define using_musl_libc 1
Name: cloud-hypervisor
Summary: Cloud Hypervisor is an open source Virtual Machine Monitor (VMM) that runs on top of KVM.
Version: 22.0
Release: 0%{?dist}
License: ASL 2.0 or BSD-3-clause
Group: Applications/System
Source0: https://github.com/cloud-hypervisor/cloud-hypervisor/archive/v%{version}.tar.gz
ExclusiveArch: x86_64
BuildRequires: gcc
BuildRequires: glibc-devel
BuildRequires: binutils
BuildRequires: git
%if ! 0%{?using_rustup}
BuildRequires: rust
BuildRequires: cargo
%endif
Requires: bash
Requires: glibc
Requires: libgcc
Requires: libcap
%description
Cloud Hypervisor is an open source Virtual Machine Monitor (VMM) that runs on top of KVM. The project focuses on exclusively running modern, cloud workloads, on top of a limited set of hardware architectures and platforms. Cloud workloads refers to those that are usually run by customers inside a cloud provider. For our purposes this means modern Linux* distributions with most I/O handled by paravirtualised devices (i.e. virtio), no requirement for legacy devices and recent CPUs and KVM.
%prep
%setup -q
%install
rm -rf %{buildroot}
install -d %{buildroot}%{_bindir}
install -D -m755 ./target/x86_64-unknown-linux-gnu/release/cloud-hypervisor %{buildroot}%{_bindir}
install -D -m755 ./target/x86_64-unknown-linux-gnu/release/ch-remote %{buildroot}%{_bindir}
install -d %{buildroot}%{_libdir}
install -d %{buildroot}%{_libdir}/cloud-hypervisor
install -D -m755 target/x86_64-unknown-linux-gnu/release/vhost_user_block %{buildroot}%{_libdir}/cloud-hypervisor
install -D -m755 target/x86_64-unknown-linux-gnu/release/vhost_user_net %{buildroot}%{_libdir}/cloud-hypervisor
%if 0%{?using_musl_libc}
install -d %{buildroot}%{_libdir}/cloud-hypervisor/static
install -D -m755 target/x86_64-unknown-linux-musl/release/cloud-hypervisor %{buildroot}%{_libdir}/cloud-hypervisor/static
install -D -m755 target/x86_64-unknown-linux-musl/release/vhost_user_block %{buildroot}%{_libdir}/cloud-hypervisor/static
install -D -m755 target/x86_64-unknown-linux-musl/release/vhost_user_net %{buildroot}%{_libdir}/cloud-hypervisor/static
install -D -m755 target/x86_64-unknown-linux-musl/release/ch-remote %{buildroot}%{_libdir}/cloud-hypervisor/static
%endif
%build
cargo_version=$(cargo --version)
if [[ $? -ne 0 ]]; then
echo "Cargo not found, please install cargo. exiting"
exit 0
fi
%if 0%{?using_rustup}
which rustup
if [[ $? -ne 0 ]]; then
echo "Rustup not found please install rustup #curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
fi
%endif
echo ${cargo_version}
%if 0%{?using_rustup}
rustup target list --installed | grep x86_64-unknown-linux-gnu
if [[ $? -ne 0 ]]; then
echo "Target x86_64-unknown-linux-gnu not found, please install(#rustup target add x86_64-unknown-linux-gnu). exiting"
fi
%if 0%{?using_musl_libc}
rustup target list --installed | grep x86_64-unknown-linux-musl
if [[ $? -ne 0 ]]; then
echo "Target x86_64-unknown-linux-musl not found, please install(#rustup target add x86_64-unknown-linux-musl). exiting"
fi
%endif
%endif
cargo build --release --target=x86_64-unknown-linux-gnu --all
%if 0%{?using_musl_libc}
cargo build --release --target=x86_64-unknown-linux-musl --all
%endif
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%{_bindir}/ch-remote
rpm: Don't set cap_net_admin via %post OSTree based systems (such as Fedora CoreOS) behave differently than yum based systems (such as Fedora) with regarding to the RPM installations. While the latter will install the RPM on the running system, modifying it; the former will be layered (installed in a "chroot") and only will be present on the system after the user boots this layer up. While in theory there shouldn't be much differences on the installation itself, when installing cloud-hypervisor on RHCOS, the following issue would be seen: ``` $ sudo sudo rpm-ostree install cloud-hypervisor Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor Updating metadata for 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'; generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Will download: 1 package (3.1 MB) Downloading from 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done Importing packages... done Checking out packages... done Running pre scripts... done Running post scripts... done error: Running %post for cloud-hypervisor: Executing bwrap(/bin/sh): Child process killed by signal 1; run `journalctl -t 'rpm-ostree(cloud-hypervisor.post)'` for more information $ sudo journalctl -t 'rpm-ostree(cloud-hypervisor.post)' -- Logs begin at Fri 2021-11-12 12:18:33 UTC, end at Fri 2021-11-12 12:22:55 UTC. -- Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/bin/cloud-hypervisor' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/lib64/cloud-hypervisor/vhost_user_net' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. ``` It seems to happen as the "chroot" where the package is installed does not have enough privileges to set the binaries capabilities during the `%post` step. Considering this, and also considering that calling `setcap` during `%post` may not be the most elegant solution when speaking RPM spec files, let's take advantage of the already existent `%caps()` directive for the `%files` list to do so. With that change applied, cloud-hypervisor could be successfully installed on RHCOS, as shown below: ``` $ sudo rpm-ostree install cloud-hypervisor-19.0-2.el8.x86_64.rpm Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor' (cached); generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Checking out packages... done Running pre scripts... done Running post scripts... done Running posttrans scripts... done Writing rpmdb... done Writing OSTree commit... done Staging deployment... done Freed: 18.2 MB (pkgcache branches: 2) Added: cloud-hypervisor-19.0-2.el8.x86_64 Run "systemctl reboot" to start a reboot ... $ getcap /usr/bin/cloud-hypervisor /usr/bin/cloud-hypervisor = cap_net_admin+ep $ getcap /usr/lib64/cloud-hypervisor/vhost_user_net /usr/lib64/cloud-hypervisor/vhost_user_net = cap_net_admin+ep ``` Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
2021-11-12 13:45:32 +00:00
%caps(cap_net_admin=ep) %{_bindir}/cloud-hypervisor
%{_libdir}/cloud-hypervisor/vhost_user_block
rpm: Don't set cap_net_admin via %post OSTree based systems (such as Fedora CoreOS) behave differently than yum based systems (such as Fedora) with regarding to the RPM installations. While the latter will install the RPM on the running system, modifying it; the former will be layered (installed in a "chroot") and only will be present on the system after the user boots this layer up. While in theory there shouldn't be much differences on the installation itself, when installing cloud-hypervisor on RHCOS, the following issue would be seen: ``` $ sudo sudo rpm-ostree install cloud-hypervisor Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor Updating metadata for 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'; generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Will download: 1 package (3.1 MB) Downloading from 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done Importing packages... done Checking out packages... done Running pre scripts... done Running post scripts... done error: Running %post for cloud-hypervisor: Executing bwrap(/bin/sh): Child process killed by signal 1; run `journalctl -t 'rpm-ostree(cloud-hypervisor.post)'` for more information $ sudo journalctl -t 'rpm-ostree(cloud-hypervisor.post)' -- Logs begin at Fri 2021-11-12 12:18:33 UTC, end at Fri 2021-11-12 12:22:55 UTC. -- Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/bin/cloud-hypervisor' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/lib64/cloud-hypervisor/vhost_user_net' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. ``` It seems to happen as the "chroot" where the package is installed does not have enough privileges to set the binaries capabilities during the `%post` step. Considering this, and also considering that calling `setcap` during `%post` may not be the most elegant solution when speaking RPM spec files, let's take advantage of the already existent `%caps()` directive for the `%files` list to do so. With that change applied, cloud-hypervisor could be successfully installed on RHCOS, as shown below: ``` $ sudo rpm-ostree install cloud-hypervisor-19.0-2.el8.x86_64.rpm Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor' (cached); generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Checking out packages... done Running pre scripts... done Running post scripts... done Running posttrans scripts... done Writing rpmdb... done Writing OSTree commit... done Staging deployment... done Freed: 18.2 MB (pkgcache branches: 2) Added: cloud-hypervisor-19.0-2.el8.x86_64 Run "systemctl reboot" to start a reboot ... $ getcap /usr/bin/cloud-hypervisor /usr/bin/cloud-hypervisor = cap_net_admin+ep $ getcap /usr/lib64/cloud-hypervisor/vhost_user_net /usr/lib64/cloud-hypervisor/vhost_user_net = cap_net_admin+ep ``` Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
2021-11-12 13:45:32 +00:00
%caps(cap_net_admin=ep) %{_libdir}/cloud-hypervisor/vhost_user_net
%if 0%{?using_musl_libc}
%{_libdir}/cloud-hypervisor/static/ch-remote
rpm: Don't set cap_net_admin via %post OSTree based systems (such as Fedora CoreOS) behave differently than yum based systems (such as Fedora) with regarding to the RPM installations. While the latter will install the RPM on the running system, modifying it; the former will be layered (installed in a "chroot") and only will be present on the system after the user boots this layer up. While in theory there shouldn't be much differences on the installation itself, when installing cloud-hypervisor on RHCOS, the following issue would be seen: ``` $ sudo sudo rpm-ostree install cloud-hypervisor Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor Updating metadata for 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'; generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Will download: 1 package (3.1 MB) Downloading from 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done Importing packages... done Checking out packages... done Running pre scripts... done Running post scripts... done error: Running %post for cloud-hypervisor: Executing bwrap(/bin/sh): Child process killed by signal 1; run `journalctl -t 'rpm-ostree(cloud-hypervisor.post)'` for more information $ sudo journalctl -t 'rpm-ostree(cloud-hypervisor.post)' -- Logs begin at Fri 2021-11-12 12:18:33 UTC, end at Fri 2021-11-12 12:22:55 UTC. -- Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/bin/cloud-hypervisor' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/lib64/cloud-hypervisor/vhost_user_net' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. ``` It seems to happen as the "chroot" where the package is installed does not have enough privileges to set the binaries capabilities during the `%post` step. Considering this, and also considering that calling `setcap` during `%post` may not be the most elegant solution when speaking RPM spec files, let's take advantage of the already existent `%caps()` directive for the `%files` list to do so. With that change applied, cloud-hypervisor could be successfully installed on RHCOS, as shown below: ``` $ sudo rpm-ostree install cloud-hypervisor-19.0-2.el8.x86_64.rpm Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor' (cached); generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Checking out packages... done Running pre scripts... done Running post scripts... done Running posttrans scripts... done Writing rpmdb... done Writing OSTree commit... done Staging deployment... done Freed: 18.2 MB (pkgcache branches: 2) Added: cloud-hypervisor-19.0-2.el8.x86_64 Run "systemctl reboot" to start a reboot ... $ getcap /usr/bin/cloud-hypervisor /usr/bin/cloud-hypervisor = cap_net_admin+ep $ getcap /usr/lib64/cloud-hypervisor/vhost_user_net /usr/lib64/cloud-hypervisor/vhost_user_net = cap_net_admin+ep ``` Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
2021-11-12 13:45:32 +00:00
%caps(cap_net_admim=ep) %{_libdir}/cloud-hypervisor/static/cloud-hypervisor
%{_libdir}/cloud-hypervisor/static/vhost_user_block
rpm: Don't set cap_net_admin via %post OSTree based systems (such as Fedora CoreOS) behave differently than yum based systems (such as Fedora) with regarding to the RPM installations. While the latter will install the RPM on the running system, modifying it; the former will be layered (installed in a "chroot") and only will be present on the system after the user boots this layer up. While in theory there shouldn't be much differences on the installation itself, when installing cloud-hypervisor on RHCOS, the following issue would be seen: ``` $ sudo sudo rpm-ostree install cloud-hypervisor Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor Updating metadata for 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'; generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Will download: 1 package (3.1 MB) Downloading from 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor'... done Importing packages... done Checking out packages... done Running pre scripts... done Running post scripts... done error: Running %post for cloud-hypervisor: Executing bwrap(/bin/sh): Child process killed by signal 1; run `journalctl -t 'rpm-ostree(cloud-hypervisor.post)'` for more information $ sudo journalctl -t 'rpm-ostree(cloud-hypervisor.post)' -- Logs begin at Fri 2021-11-12 12:18:33 UTC, end at Fri 2021-11-12 12:22:55 UTC. -- Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/bin/cloud-hypervisor' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Failed to set capabilities on file `/usr/lib64/cloud-hypervisor/vhost_user_net' (Operation not supported) Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: usage: setcap [-q] [-v] [-n <rootid>] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Nov 12 12:22:40 rhcoslatest rpm-ostree(cloud-hypervisor.post)[1637]: Note <filename> must be a regular (non-symlink) file. ``` It seems to happen as the "chroot" where the package is installed does not have enough privileges to set the binaries capabilities during the `%post` step. Considering this, and also considering that calling `setcap` during `%post` may not be the most elegant solution when speaking RPM spec files, let's take advantage of the already existent `%caps()` directive for the `%files` list to do so. With that change applied, cloud-hypervisor could be successfully installed on RHCOS, as shown below: ``` $ sudo rpm-ostree install cloud-hypervisor-19.0-2.el8.x86_64.rpm Checking out tree 9c1cdf9... done Enabled rpm-md repositories: copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor rpm-md repo 'copr:copr.fedorainfracloud.org:fidencio:cloud-hypervisor' (cached); generated: 2021-11-08T19:02:32Z Importing rpm-md... done Resolving dependencies... done Checking out packages... done Running pre scripts... done Running post scripts... done Running posttrans scripts... done Writing rpmdb... done Writing OSTree commit... done Staging deployment... done Freed: 18.2 MB (pkgcache branches: 2) Added: cloud-hypervisor-19.0-2.el8.x86_64 Run "systemctl reboot" to start a reboot ... $ getcap /usr/bin/cloud-hypervisor /usr/bin/cloud-hypervisor = cap_net_admin+ep $ getcap /usr/lib64/cloud-hypervisor/vhost_user_net /usr/lib64/cloud-hypervisor/vhost_user_net = cap_net_admin+ep ``` Signed-off-by: Fabiano Fidêncio <fabiano.fidencio@intel.com>
2021-11-12 13:45:32 +00:00
%caps(cap_net_admin=ep) %{_libdir}/cloud-hypervisor/static/vhost_user_net
%endif
%license LICENSE-APACHE
%license LICENSE-BSD-3-Clause
%changelog
* Thu Mar 03 2022 Rob Bradford <robert.bradford@intel.com> 22.0-0
- Update to 22.0
* Thu Jan 20 2022 Rob Bradford <robert.bradford@intel.com> 21.0-0
- Update to 21.0
* Thu Dec 02 2021 Sebastien Boeuf <sebastien.boeuf@intel.com> 20.0-0
- Update to 20.0
* Mon Nov 08 2021 Fabiano Fidêncio <fabiano.fidencio@intel.com> 19.0-0
- Update to 19.0
* Fri May 28 2021 Muminul Islam <muislam@microsoft.com> 15.0-0
- Update version to 15.0
* Wed Jul 22 2020 Muminul Islam <muislam@microsoft.com> 0.8.0-0
- Initial version