Add qosb to generate pre-enrolled Secure Boot VARS files

Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
Patrick Uiterwijk 2018-04-30 11:57:51 +00:00 committed by Cole Robinson
parent d173a3b48a
commit 0792202285

View File

@ -1,7 +1,13 @@
%global edk2_date 20171011 %global edk2_date 20171011
%global edk2_githash 92d07e4 %global edk2_githash 92d07e4
%global openssl_version 1.1.0e %global openssl_version 1.1.0e
%global qosb_version 1.1.2
%define qosb_testing 0
%ifarch x86_64
%define qosb_testing 1
%endif
%if 0%{?fedora:1} %if 0%{?fedora:1}
%define cross 1 %define cross 1
%endif %endif
@ -29,7 +35,7 @@
Name: edk2 Name: edk2
Version: %{edk2_date}git%{edk2_githash} Version: %{edk2_date}git%{edk2_githash}
Release: 5%{dist} Release: 6%{dist}
Summary: EFI Development Kit II Summary: EFI Development Kit II
Group: Applications/Emulators Group: Applications/Emulators
@ -38,6 +44,7 @@ URL: http://www.tianocore.org/edk2/
Source0: edk2-%{edk2_date}-%{edk2_githash}.tar.xz Source0: edk2-%{edk2_date}-%{edk2_githash}.tar.xz
Source1: openssl-%{openssl_version}-hobbled.tar.xz Source1: openssl-%{openssl_version}-hobbled.tar.xz
Source2: ovmf-whitepaper-c770f8c.txt Source2: ovmf-whitepaper-c770f8c.txt
Source3: https://github.com/puiterwijk/qemu-ovmf-secureboot/archive/v%{qosb_version}/qemu-ovmf-secureboot-%{qosb_version}.tar.gz
Source10: hobble-openssl Source10: hobble-openssl
Source11: build-iso.sh Source11: build-iso.sh
Source12: update-tarball.sh Source12: update-tarball.sh
@ -110,6 +117,19 @@ BuildRequires: nasm
BuildRequires: qemu-img BuildRequires: qemu-img
BuildRequires: genisoimage BuildRequires: genisoimage
# These are for QOSB
BuildRequires: python3-requests
BuildRequires: qemu
%if %{?qosb_testing}
# This is used for testing the enrollment: builds are run in a chroot, lacking
# a kernel. The testing is only performed on x86_64 for now, but we can't make
# the BuildRequires only on a specific arch, as that'd come through in the SRPM
# NOTE: The actual enrollment needs to happen in all builds for all architectures,
# because OVMF is built as noarch, which means that koji enforces that the build
# results don't actually differ per arch, and then it picks a random arches' build
# for the actual RPM.
BuildRequires: kernel-core
%endif
%description %description
EDK II is a development code base for creating UEFI drivers, applications EDK II is a development code base for creating UEFI drivers, applications
@ -141,6 +161,15 @@ BuildArch: noarch
This package documents the tools that are needed to This package documents the tools that are needed to
build EFI executables and ROMs using the GNU tools. build EFI executables and ROMs using the GNU tools.
%package qosb
Summary: Tool to enroll secureboot
Group: Development/Tools
Buildarch: noarch
%description qosb
This package contains QOSB (QEMU OVMF Secure Boot), which can enroll OVMF
variable files to enforce Secure Boot.
%if 0%{?build_ovmf_x64:1} %if 0%{?build_ovmf_x64:1}
%package ovmf %package ovmf
Summary: Open Virtual Machine Firmware Summary: Open Virtual Machine Firmware
@ -200,6 +229,11 @@ cp -a -- %{SOURCE2} .
(cd .. && tar -xvf %{SOURCE1}) (cd .. && tar -xvf %{SOURCE1})
cp CryptoPkg/Library/OpensslLib/openssl/LICENSE LICENSE.openssl cp CryptoPkg/Library/OpensslLib/openssl/LICENSE LICENSE.openssl
# Extract QOSB
tar -xvf %{SOURCE3}
mv qemu-ovmf-secureboot-%{qosb_version}/README.md README.qosb
mv qemu-ovmf-secureboot-%{qosb_version}/LICENSE LICENSE.qosb
%autopatch -p1 %autopatch -p1
base64 --decode < MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 > MdeModulePkg/Logo/Logo-OpenSSL.bmp base64 --decode < MdeModulePkg/Logo/Logo-OpenSSL.bmp.b64 > MdeModulePkg/Logo/Logo-OpenSSL.bmp
@ -264,6 +298,15 @@ cp Build/Ovmf3264/*/FV/OVMF_CODE.fd ovmf/OVMF_CODE.secboot.fd
cp Build/Ovmf3264/*/X64/Shell.efi ovmf/ cp Build/Ovmf3264/*/X64/Shell.efi ovmf/
cp Build/Ovmf3264/*/X64/EnrollDefaultKeys.efi ovmf cp Build/Ovmf3264/*/X64/EnrollDefaultKeys.efi ovmf
sh %{_sourcedir}/build-iso.sh ovmf/ sh %{_sourcedir}/build-iso.sh ovmf/
# Build enrolled VARS file
python3 qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator \
--qemu-binary /usr/bin/qemu-system-x86_64 \
--skip-testing \
--ovmf-binary ovmf/OVMF_CODE.secboot.fd \
--ovmf-template-vars ovmf/OVMF_VARS.fd \
--uefi-shell-iso ovmf/UefiShell.iso \
ovmf/OVMF_VARS.secboot.fd
%endif %endif
@ -306,6 +349,23 @@ dd of="arm/QEMU_EFI-pflash.raw" if="arm/QEMU_EFI.fd" conv=notrunc
dd of="arm/vars-template-pflash.raw" if="/dev/zero" bs=1M count=64 dd of="arm/vars-template-pflash.raw" if="/dev/zero" bs=1M count=64
%endif %endif
%check
%if 0%{?build_ovmf_x64:1}
%if 0%{?qosb_testing}
# Verify enrolled VARS file
python3 qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator \
--qemu-binary /usr/bin/qemu-system-x86_64 \
--skip-enrollment \
--print-output \
--ovmf-binary ovmf/OVMF_CODE.secboot.fd \
--ovmf-template-vars ovmf/OVMF_VARS.fd \
--uefi-shell-iso ovmf/UefiShell.iso \
--no-download \
--kernel-path `rpm -ql kernel-core | grep "\/vmlinuz$" -m 1` \
ovmf/OVMF_VARS.secboot.fd
%endif
%endif
%install %install
mkdir -p %{buildroot}%{_bindir} \ mkdir -p %{buildroot}%{_bindir} \
%{buildroot}%{_datadir}/%{name}/Conf \ %{buildroot}%{_datadir}/%{name}/Conf \
@ -337,6 +397,7 @@ mkdir %{buildroot}/usr/share/OVMF
ln -sf ../%{name}/ovmf/OVMF_CODE.fd %{buildroot}/usr/share/OVMF ln -sf ../%{name}/ovmf/OVMF_CODE.fd %{buildroot}/usr/share/OVMF
ln -sf ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}/usr/share/OVMF ln -sf ../%{name}/ovmf/OVMF_CODE.secboot.fd %{buildroot}/usr/share/OVMF
ln -sf ../%{name}/ovmf/OVMF_VARS.fd %{buildroot}/usr/share/OVMF ln -sf ../%{name}/ovmf/OVMF_VARS.fd %{buildroot}/usr/share/OVMF
ln -sf ../%{name}/ovmf/OVMF_VARS.secboot.fd %{buildroot}/usr/share/OVMF
ln -sf ../%{name}/ovmf/UefiShell.iso %{buildroot}/usr/share/OVMF ln -sf ../%{name}/ovmf/UefiShell.iso %{buildroot}/usr/share/OVMF
%endif %endif
%if 0%{?build_ovmf_ia32:1} %if 0%{?build_ovmf_ia32:1}
@ -354,6 +415,8 @@ cp -a arm %{buildroot}/usr/share/%{name}
ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw %{buildroot}/usr/share/AAVMF/AAVMF32_CODE.fd ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw %{buildroot}/usr/share/AAVMF/AAVMF32_CODE.fd
%endif %endif
install qemu-ovmf-secureboot-%{qosb_version}/ovmf-vars-generator %{buildroot}%{_bindir}
%files tools %files tools
%license License.txt %license License.txt
@ -397,6 +460,11 @@ ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw %{buildroot}/usr/share/AAVMF/
%files tools-doc %files tools-doc
%doc BaseTools/UserManuals/*.rtf %doc BaseTools/UserManuals/*.rtf
%files qosb
%license LICENSE.qosb
%doc README.qosb
%{_bindir}/ovmf-vars-generator
%if 0%{?build_ovmf_x64:1} %if 0%{?build_ovmf_x64:1}
%files ovmf %files ovmf
%license OvmfPkg/License.txt %license OvmfPkg/License.txt
@ -448,6 +516,10 @@ ln -sf ../%{name}/arm/QEMU_EFI-pflash.raw %{buildroot}/usr/share/AAVMF/
%changelog %changelog
* Fri Mar 30 2018 Patrick Uiterwijk <puiterwijk@redhat.com> - 20171011git92d07e4-6
- Add qemu-ovmf-secureboot (qosb)
- Generate pre-enrolled Secure Boot OVMF VARS files
* Wed Mar 07 2018 Paolo Bonzini <pbonzini@redhat.com> - 20171011git92d07e4-5 * Wed Mar 07 2018 Paolo Bonzini <pbonzini@redhat.com> - 20171011git92d07e4-5
- Fix GCC 8 compilation - Fix GCC 8 compilation
- Replace dosfstools and mtools with qemu-img vvfat - Replace dosfstools and mtools with qemu-img vvfat