From: Marcus Folkesson <marcus.folkesson@gmail.com>
To: buildroot@buildroot.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Julien Olivain <ju.o@free.fr>
Cc: Marcus Folkesson <marcus.folkesson@gmail.com>
Subject: [Buildroot] [PATCH v3] package/criu: new package
Date: Mon, 18 Sep 2023 10:48:25 +0200 [thread overview]
Message-ID: <20230918084825.786715-1-marcus.folkesson@gmail.com> (raw)
Checkpoint/Restore In Userspace (CRIU), is a software tool for the
Linux operating system to make it possible to freeze a running
application and checkpoint it to persistent storage as a collection of files.
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
---
Notes:
v2:
- Addressed comments from Thomas.
- Tested on ARM target and on x86_64 with qemu.
v3:
- set CONFIG_CHECKPOINT_RESTORE in kernel config
- Only be available for ARMv6, ARMv7 and ARMv8
DEVELOPERS | 1 +
package/Config.in | 1 +
package/criu/Config.in | 48 ++++++++++++++++++++++++++++++++++
package/criu/criu.hash | 3 +++
package/criu/criu.mk | 59 ++++++++++++++++++++++++++++++++++++++++++
5 files changed, 112 insertions(+)
create mode 100644 package/criu/Config.in
create mode 100644 package/criu/criu.hash
create mode 100644 package/criu/criu.mk
diff --git a/DEVELOPERS b/DEVELOPERS
index 7fae4841e4..d6e6a98202 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1986,6 +1986,7 @@ F: support/testing/tests/package/test_python_pytest.py
F: support/testing/tests/package/test_python_pytest_asyncio.py
N: Marcus Folkesson <marcus.folkesson@gmail.com>
+F: package/criu/
F: package/libcamera/
F: package/libcamera-apps/
F: package/libostree/
diff --git a/package/Config.in b/package/Config.in
index e8dbadadf3..9a754cb072 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -2667,6 +2667,7 @@ menu "System tools"
source "package/coreutils/Config.in"
source "package/cpulimit/Config.in"
source "package/cpuload/Config.in"
+ source "package/criu/Config.in"
source "package/crun/Config.in"
source "package/daemon/Config.in"
source "package/dc3dd/Config.in"
diff --git a/package/criu/Config.in b/package/criu/Config.in
new file mode 100644
index 0000000000..06e809fb83
--- /dev/null
+++ b/package/criu/Config.in
@@ -0,0 +1,48 @@
+# criu only builds on certain architectures
+config BR2_PACKAGE_CRIU_ARCH_SUPPORTS
+ bool
+ default y if BR2_ARM_CPU_ARMV6
+ default y if BR2_ARM_CPU_ARMV7A
+ default y if BR2_ARM_CPU_ARMV7M
+ default y if BR2_ARM_CPU_ARMV8A
+ default y if BR2_ARM_CPU_ARMV8M
+ default y if BR2_aarch64
+ default y if BR2_i386
+ default y if BR2_mips
+ default y if BR2_x86_64
+ default y if BR2_powerpc64
+ default y if BR2_s390x
+
+menuconfig BR2_PACKAGE_CRIU
+ bool "criu"
+ depends on BR2_PACKAGE_CRIU_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_HOST_PYTHON3 # host-python3-ssl
+ depends on BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS # protobuf-c
+ depends on BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS
+ depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS
+ depends on BR2_INSTALL_LIBSTDCPP # protobuf
+ depends on BR2_TOOLCHAIN_HAS_THREADS # protobuf, libnl
+ depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # protobuf
+ depends on !BR2_STATIC_LIBS # protobuf, libbsd
+ depends on BR2_USE_WCHAR # libbsd
+ depends on BR2_USE_MMU # libcap
+ select BR2_PACKAGE_HOST_PYTHON3_SSL
+ select BR2_PACKAGE_PROTOBUF
+ select BR2_PACKAGE_PROTOBUF_C
+ select BR2_PACKAGE_LIBAIO
+ select BR2_PACKAGE_LIBBSD
+ select BR2_PACKAGE_LIBCAP
+ select BR2_PACKAGE_LIBNET
+ select BR2_PACKAGE_LIBNL
+ select BR2_PACKAGE_PYTHON3
+ help
+ Checkpoint/Restore In Userspace (CRIU), is a software
+ tool for the Linux operating system to make it possible
+ to freeze a running application and checkpoint it to
+ persistent storage as a collection of files.
+
+ https://criu.org/Main_Page
+
+comment "criu needs a toolchain w/ threads, dynamic library, wchar"
+ depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS \
+ || !BR2_USE_WCHAR
diff --git a/package/criu/criu.hash b/package/criu/criu.hash
new file mode 100644
index 0000000000..2c4a07252b
--- /dev/null
+++ b/package/criu/criu.hash
@@ -0,0 +1,3 @@
+# Locally calculated
+sha256 6a9997981c9fe4730c848ce59346b3a22fad69b803607cb67a3f6ec0557fa474 criu-3.18.tar.gz
+sha256 568a1fa9d90e18a1a1a61ea58ec2eece16b56a5042cc72c1b4f8d4455ae6fcb7 COPYING
diff --git a/package/criu/criu.mk b/package/criu/criu.mk
new file mode 100644
index 0000000000..3da7ec90ab
--- /dev/null
+++ b/package/criu/criu.mk
@@ -0,0 +1,59 @@
+################################################################################
+#
+# CRIU
+#
+################################################################################
+
+CRIU_VERSION = 3.18
+CRIU_SOURCE = criu-$(CRIU_VERSION).tar.gz
+CRIU_SITE = https://github.com/checkpoint-restore/criu/archive/refs/tags/v$(CRIU_VERSION)
+
+CRIU_LICENSE = GPL-2.0
+CRIU_LICENSE_FILES = COPYING
+CRIU_DEPENDENCIES =\
+ host-pkgconf \
+ host-protobuf-c \
+ host-python3 \
+ host-python-pip \
+ libaio \
+ libbsd \
+ libcap \
+ libnet \
+ libnl \
+ protobuf \
+ protobuf-c \
+ python3
+
+CRIU_MAKE_ENV =\
+ $(TARGET_MAKE_ENV) \
+ $(TARGET_CONFIGURE_OPTS) \
+ CROSS_COMPILE=$(TARGET_CROSS) \
+ WERROR=0
+
+#x86_64 is treated as x86 in criu
+#Also, powerpc64 is refered to as ppc64 in criu.
+ifeq ($(BR2_ARCH),"x86_64")
+CRIU_MAKE_ENV += ARCH=x86
+else ifeq ($(BR2_ARCH),"powerpc64")
+CRIU_MAKE_ENV += ARCH=ppc64
+else
+CRIU_MAKE_ENV += ARCH=$(BR2_ARCH)
+endif
+
+ # Criu needs Kernel Checkpoint/restore support which is not enabled
+ # by default.
+ define CRIU_LINUX_CONFIG_FIXUPS
+ $(call KCONFIG_ENABLE_OPT,CONFIG_CHECKPOINT_RESTORE)
+ endef
+
+define CRIU_BUILD_CMDS
+ rm -rf $(@D)/images/google/protobuf/descriptor.proto
+ ln -s $(STAGING_DIR)/usr/include/google/protobuf/descriptor.proto $(@D)/images/google/protobuf/descriptor.proto
+ $(CRIU_MAKE_ENV) $(MAKE) USERCFLAGS="$(TARGET_CFLAGS)" -C $(@D)
+endef
+
+define CRIU_INSTALL_TARGET_CMDS
+ $(CRIU_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) PREFIX=/usr -C $(@D) install-criu install-lib install-compel
+endef
+
+$(eval $(generic-package))
--
2.41.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next reply other threads:[~2023-09-18 8:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-18 8:48 Marcus Folkesson [this message]
2023-10-06 11:46 ` [Buildroot] [PATCH v3] package/criu: new package Marcus Folkesson
2023-10-06 20:35 ` Julien Olivain
2023-10-09 8:29 ` Marcus Folkesson
2023-10-06 20:52 ` Julien Olivain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230918084825.786715-1-marcus.folkesson@gmail.com \
--to=marcus.folkesson@gmail.com \
--cc=buildroot@buildroot.org \
--cc=ju.o@free.fr \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.