diff --git a/.criu.metadata b/.criu.metadata index d64783e..3058556 100644 --- a/.criu.metadata +++ b/.criu.metadata @@ -1 +1 @@ -91eb1ccac61a7d538db14884091883c6dab5481a SOURCES/criu-3.15.tar.bz2 +f359d9a3af080f5d3293c847af5ab10f58639d85 SOURCES/criu-3.18.tar.gz diff --git a/.gitignore b/.gitignore index 156e6b0..9ac16f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/criu-3.15.tar.bz2 +SOURCES/criu-3.18.tar.gz diff --git a/SOURCES/0001-Fix-building-with-annobin.patch b/SOURCES/0001-Fix-building-with-annobin.patch new file mode 100644 index 0000000..9083f83 --- /dev/null +++ b/SOURCES/0001-Fix-building-with-annobin.patch @@ -0,0 +1,57 @@ +From 4878775c8e0f2ea6869aff139d219f6eb0c4006c Mon Sep 17 00:00:00 2001 +From: Adrian Reber +Date: Fri, 28 Jan 2022 15:10:31 +0000 +Subject: [PATCH] Fix building with annobin + +Annobin (used at least in Fedora and RHEL) injects annotation into the +compiled objects which break the parasite and restorer. + +This removes the annobin flags as used in Fedora and RHEL and makes CRIU +work on Fedora and RHEL with annobin enabled. + +Signed-off-by: Adrian Reber +--- + compel/plugins/Makefile | 2 +- + criu/pie/Makefile | 2 +- + criu/pie/Makefile.library | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/compel/plugins/Makefile b/compel/plugins/Makefile +index e5fa781ac..37630d438 100644 +--- a/compel/plugins/Makefile ++++ b/compel/plugins/Makefile +@@ -1,4 +1,4 @@ +-CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN),$(CFLAGS)) ++CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN) -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1,$(CFLAGS)) + CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 + CFLAGS += -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=0 + +diff --git a/criu/pie/Makefile b/criu/pie/Makefile +index 265dcf82b..386626334 100644 +--- a/criu/pie/Makefile ++++ b/criu/pie/Makefile +@@ -4,7 +4,7 @@ + + target := parasite restorer + +-CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN),$(CFLAGS)) ++CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN) -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1,$(CFLAGS)) + CFLAGS += $(CFLAGS_PIE) + ccflags-y += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 + ccflags-y += -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=0 +diff --git a/criu/pie/Makefile.library b/criu/pie/Makefile.library +index da2a2fab3..6247afe7e 100644 +--- a/criu/pie/Makefile.library ++++ b/criu/pie/Makefile.library +@@ -21,7 +21,7 @@ ifeq ($(ARCH),arm) + lib-y += ./$(ARCH_DIR)/pie-cacheflush.o + endif + +-CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN),$(CFLAGS)) ++CFLAGS := $(filter-out -pg $(CFLAGS-GCOV) $(CFLAGS-ASAN) -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1,$(CFLAGS)) + CFLAGS += $(CFLAGS_PIE) + + ifeq ($(ARCH),mips) +-- +2.34.1 + diff --git a/SOURCES/criu.pc.patch b/SOURCES/criu.pc.patch new file mode 100644 index 0000000..6211f2c --- /dev/null +++ b/SOURCES/criu.pc.patch @@ -0,0 +1,27 @@ +From 341ef149ee259d9432ea4c01507eefab2ef8b83c Mon Sep 17 00:00:00 2001 +From: Radostin Stoyanov +Date: Thu, 14 Oct 2021 12:58:56 +0100 +Subject: [PATCH] criu.pc: Add libprotobuf-c as a dependency + +CRIU has a dependency on protobuf-c-devel. We express this dependency +in pkgconfig to be auto-detected when building a package. + +Signed-off-by: Radostin Stoyanov +--- + lib/c/criu.pc.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/lib/c/criu.pc.in b/lib/c/criu.pc.in +index 33986d10d..bcced5033 100644 +--- a/lib/c/criu.pc.in ++++ b/lib/c/criu.pc.in +@@ -4,5 +4,6 @@ includedir=@includedir@ + Name: CRIU + Description: RPC library for userspace checkpoint and restore + Version: @version@ ++Requires.private: libprotobuf-c + Libs: -L${libdir} -lcriu + Cflags: -I${includedir} +-- +2.31.1 + diff --git a/SOURCES/d739260c57576c636759afb312340fa3827312f6.patch b/SOURCES/d739260c57576c636759afb312340fa3827312f6.patch new file mode 100644 index 0000000..7847bb5 --- /dev/null +++ b/SOURCES/d739260c57576c636759afb312340fa3827312f6.patch @@ -0,0 +1,74 @@ +From d739260c57576c636759afb312340fa3827312f6 Mon Sep 17 00:00:00 2001 +From: Adrian Reber +Date: Mon, 24 Apr 2023 09:28:19 +0200 +Subject: [PATCH] compel: support XSAVE on newer Intel CPUs + +Newer Intel CPUs (Sapphire Rapids) have a much larger xsave area than +before. Looking at older CPUs I see 2440 bytes. + + # cpuid -1 -l 0xd -s 0 + ... + bytes required by XSAVE/XRSTOR area = 0x00000988 (2440) + +On newer CPUs (Sapphire Rapids) it grows to 11008 bytes. + + # cpuid -1 -l 0xd -s 0 + ... + bytes required by XSAVE/XRSTOR area = 0x00002b00 (11008) + +This increase the xsave area from one page to four pages. + +Without this patch the fpu03 test fails, with this patch it works again. + +Signed-off-by: Adrian Reber +--- + .../arch/x86/src/lib/include/uapi/asm/fpu.h | 28 +++++++++++++++++-- + 1 file changed, 26 insertions(+), 2 deletions(-) + +diff --git a/compel/arch/x86/src/lib/include/uapi/asm/fpu.h b/compel/arch/x86/src/lib/include/uapi/asm/fpu.h +index bd3b0cbd5c..8c83dd9ae4 100644 +--- a/compel/arch/x86/src/lib/include/uapi/asm/fpu.h ++++ b/compel/arch/x86/src/lib/include/uapi/asm/fpu.h +@@ -21,7 +21,28 @@ + #define XSTATE_YMM 0x4 + + #define FXSAVE_SIZE 512 +-#define XSAVE_SIZE 4096 ++/* ++ * This used to be 4096 (one page). There is a comment below concerning ++ * this size: ++ * "One page should be enough for the whole xsave state ;-)" ++ * Which is kind of funny as it is no longer enough ;-) ++ * ++ * Older CPUs: ++ * # cpuid -1 -l 0xd -s 0 ++ * ... ++ * bytes required by XSAVE/XRSTOR area = 0x00000988 (2440) ++ * ++ * Newer CPUs (Sapphire Rapids): ++ * # cpuid -1 -l 0xd -s 0 ++ * ... ++ * bytes required by XSAVE/XRSTOR area = 0x00002b00 (11008) ++ * ++ * So one page is no longer enough... But: ++ * ++ * Four pages should be enough for the whole xsave state ;-) ++ */ ++ ++#define XSAVE_SIZE 4*4096 + + #define XSAVE_HDR_SIZE 64 + #define XSAVE_HDR_OFFSET FXSAVE_SIZE +@@ -235,8 +256,11 @@ struct pkru_state { + * + * + * One page should be enough for the whole xsave state ;-) ++ * ++ * Of course it was not ;-) Now using four pages... ++ * + */ +-#define EXTENDED_STATE_AREA_SIZE (4096 - sizeof(struct i387_fxsave_struct) - sizeof(struct xsave_hdr_struct)) ++#define EXTENDED_STATE_AREA_SIZE (XSAVE_SIZE - sizeof(struct i387_fxsave_struct) - sizeof(struct xsave_hdr_struct)) + + /* + * cpu requires it to be 64 byte aligned diff --git a/SOURCES/pycriu-setup-py b/SOURCES/pycriu-setup-py new file mode 100644 index 0000000..6bfe3b1 --- /dev/null +++ b/SOURCES/pycriu-setup-py @@ -0,0 +1,30 @@ +import os +from setuptools import setup, find_packages + +print(find_packages('.')) + +def get_version(): + version = '0.0.1' + env = os.environ + if 'CRIU_VERSION_MAJOR' in env and 'CRIU_VERSION_MINOR' in env: + version = '{}.{}'.format( + env['CRIU_VERSION_MAJOR'], + env['CRIU_VERSION_MINOR'] + ) + if 'CRIU_VERSION_SUBLEVEL' in env and env['CRIU_VERSION_SUBLEVEL']: + version += '.' + env['CRIU_VERSION_SUBLEVEL'] + return version + + +setup( + name='pycriu', + version=get_version(), + description='CRiu Image Tool', + author='CRIU team', + author_email='criu@openvz.org', + license='GPLv2', + url='https://github.com/checkpoint-restore/criu', + packages=['pycriu','pycriu.images'], + package_dir = {'pycriu': '.', 'pycriu.images':'images'} + +) diff --git a/SPECS/criu.spec b/SPECS/criu.spec index da77a98..43b9e80 100644 --- a/SPECS/criu.spec +++ b/SPECS/criu.spec @@ -1,33 +1,41 @@ %global py_prefix python3 %global py_binary %{py_prefix} -# With annobin enabled, CRIU does not work anymore. It seems CRIU's -# parasite code breaks if annobin is enabled. -%undefine _annotated_build +# This package calls LD directly without specifying the LTO plugins. Until +# that is fixed, disable LTO. +%global _lto_cflags %%{nil} Name: criu -Version: 3.15 -Release: 3%{?dist} +Version: 3.18 +Release: 4%{?dist} Provides: crtools = %{version}-%{release} Obsoletes: crtools <= 1.0-2 Summary: Tool for Checkpoint/Restore in User-space License: GPLv2 URL: http://criu.org/ -Source0: http://download.openvz.org/criu/criu-%{version}.tar.bz2 +Source0: https://github.com/checkpoint-restore/criu/archive/v%{version}/criu-%{version}.tar.gz Source1: criu-tmpfiles.conf +Source2: pycriu-setup-py BuildRequires: gcc BuildRequires: systemd BuildRequires: libnet-devel BuildRequires: protobuf-devel protobuf-c-devel %{py_prefix}-devel libnl3-devel libcap-devel BuildRequires: asciidoc xmlto +BuildRequires: %{py_prefix}-pip +BuildRequires: %{py_prefix}-setuptools +BuildRequires: %{py_prefix}-wheel BuildRequires: perl-interpreter BuildRequires: libselinux-devel BuildRequires: gnutls-devel -BuildRequires: nftables-devel BuildRequires: make # Checkpointing containers with a tmpfs requires tar Recommends: tar +Patch0: 0001-Fix-building-with-annobin.patch +Patch1: criu.pc.patch +# Fix to work on CPUs with larger XSAVE area (Sapphire Rapids) +Patch2: https://github.com/checkpoint-restore/criu/commit/d739260c57576c636759afb312340fa3827312f6.patch + # user-space and kernel changes are only available for x86_64, arm, # ppc64le, aarch64 and s390x # https://bugzilla.redhat.com/show_bug.cgi?id=902875 @@ -41,7 +49,7 @@ Linux in user-space. %package devel Summary: Header files and libraries for %{name} Requires: %{name} = %{version}-%{release} -Requires: criu-libs = %{version}-%{release} +Requires: %{name}-libs = %{version}-%{release} %description devel This package contains header files and libraries for %{name}. @@ -72,6 +80,9 @@ their content in human-readable form. %prep %setup -q +%patch -P 0 -p1 +%patch -P 1 -p1 +%patch -P 2 -p1 %build # %{?_smp_mflags} does not work @@ -80,6 +91,10 @@ CFLAGS+=`echo %{optflags} | sed -e 's,-fstack-protector\S*,,g'` make V=1 WERROR= make docs V=1 %install +cp %{SOURCE2} lib/py/setup.py +sed -e "s,--upgrade --force-reinstall,--disable-pip-version-check --verbose,g; + s,\./crit,./crit lib/py,g;" -i lib/Makefile +rm -f crit/pyproject.toml make install-criu DESTDIR=$RPM_BUILD_ROOT PREFIX=%{_prefix} LIBDIR=%{_libdir} make install-lib DESTDIR=$RPM_BUILD_ROOT PREFIX=%{_prefix} LIBDIR=%{_libdir} PYTHON=%{py_binary} make install-man DESTDIR=$RPM_BUILD_ROOT PREFIX=%{_prefix} LIBDIR=%{_libdir} @@ -90,11 +105,17 @@ install -d -m 0755 %{buildroot}/run/%{name}/ # remove static libs rm $RPM_BUILD_ROOT%{_libdir}/*.a rm -rf $RPM_BUILD_ROOT%{_libexecdir}/%{name} +# remove compel man-page +rm $RPM_BUILD_ROOT%{_mandir}/man1/compel.1* +# remove amdgpu plugin man-page +rm $RPM_BUILD_ROOT%{_mandir}/man1/amdgpu_plugin.1* +# remove criu-ns +rm $RPM_BUILD_ROOT%{_sbindir}/criu-ns +rm $RPM_BUILD_ROOT%{_mandir}/man1/criu-ns.1* %files %{_sbindir}/%{name} %{_mandir}/man8/criu.8* -%{_mandir}/man1/compel.1* %dir /run/%{name} %{_tmpfilesdir}/%{name}.conf %doc README.md COPYING @@ -113,30 +134,34 @@ rm -rf $RPM_BUILD_ROOT%{_libexecdir}/%{name} %files -n crit %{_bindir}/crit +%{python3_sitelib}/*egg-info %doc %{_mandir}/man1/crit.1* %changelog -* Fri Aug 06 2021 Jindrich Novy - 3.15-3 -- add Requires: criu-libs = %%{version}-%%{release} in criu-devel -- add gating tests -- Related: #1934415 +* Tue May 16 2023 Jindrich Novy - 3.18-4 +- switch to egg-info on 8.9 +- Related: #2176055 -* Tue Jul 20 2021 Jindrich Novy - 3.15-2 +* Mon May 15 2023 Jindrich Novy - 3.18-3 +- remove --progress-bar option +- Related: #2176055 + +* Thu May 04 2023 Jindrich Novy - 3.18-2 +- update to 3.18 +- Related: #2176055 + +* Tue Apr 11 2023 Jindrich Novy - 3.17-1 +- update to 3.17 +- Resolves: #2175794 + +* Mon Aug 02 2021 Jindrich Novy - 3.15-2 +- add gating tests +- Related: #1971718 + +* Fri Jul 30 2021 Jindrich Novy - 3.15-1 - add -devel and -libs subpackages - Resolves: #1971718 -* Wed Nov 04 2020 Jindrich Novy - 3.15-1 -- update to https://github.com/checkpoint-restore/criu/releases/tag/v3.15 -- Related: #1883490 - -* Mon May 25 2020 Jindrich Novy - 3.14-2 -- fix "Need to fix bugs found by coverity." -- Related: #1821193 - -* Tue May 12 2020 Jindrich Novy - 3.14-1 -- synchronize containter-tools 8.3.0 with 8.2.1 -- Related: #1821193 - * Mon May 13 2019 Adrian Reber - 3.12-9 - Added additional fixup patches for the socket labelling