1+ .SHELLFLAGS := -eu -o pipefail -c
2+ .ONESHELL :
3+
4+ CRIU ?= ../../../criu/criu
5+ BUILD_DIR ?= build
6+ SOCKET_NAME ?= criu_service.socket
7+ PIDFILE_NAME ?= pidfile
8+ SERVICE_LOG ?= service.log
9+ PYTHON ?= python3
10+
11+ PIDFILE := $(BUILD_DIR ) /$(PIDFILE_NAME )
12+ CRIU_SOCKET := $(BUILD_DIR ) /$(SOCKET_NAME )
13+ STATUS_FIFO := $(BUILD_DIR ) /startup.status
14+ STATUS_FD := 200
15+
16+ run : start
17+ cleanup () { $( MAKE) --no-print-directory stop || true ; }
18+ trap cleanup EXIT INT TERM
19+ " $( PYTHON) " test_check.py
20+ " $( PYTHON) " test_check_fail.py
21+ " $( PYTHON) " test_check_images_dir.py
22+ " $( PYTHON) " test_check_work_dir_fd.py
23+
24+ start :
25+ mkdir -p " $( BUILD_DIR) "
26+ if [ -s " $( PIDFILE) " ] && kill -0 " $$ (cat " $( PIDFILE) " )" 2> /dev/null; then
27+ echo " Service running (PID $$ (cat " $(PIDFILE ) " ))."
28+ exit 0
29+ fi
30+ if ! command -v " $( CRIU) " > /dev/null 2>&1 ; then
31+ echo " CRIU not found at $( CRIU) "
32+ exit 1
33+ fi
34+ mkfifo " $( STATUS_FIFO) "
35+ exec $(STATUS_FD ) <> " $( STATUS_FIFO) "
36+ " $( CRIU) " service \
37+ -v4 \
38+ -W " $( BUILD_DIR) " \
39+ --address " $( SOCKET_NAME) " \
40+ -d \
41+ --pidfile " $( PIDFILE_NAME) " \
42+ -o " $( SERVICE_LOG) " \
43+ --status-fd " $( STATUS_FD) "
44+ " $( PYTHON) " read.py " $( STATUS_FIFO) "
45+
46+ stop :
47+ if [ ! -s " $( PIDFILE) " ]; then
48+ echo " pidfile missing or empty"
49+ exit 1
50+ fi
51+ pid=$$(cat "$(PIDFILE ) " )
52+ if kill -0 " $$ pid" 2> /dev/null; then
53+ kill -9 " $$ pid" || true
54+ fi
55+ rm -f " $( PIDFILE) " " $( CRIU_SOCKET) " " $( STATUS_FIFO) "
56+
57+ clean :
58+ if [ -s " $( PIDFILE) " ] && kill -0 " $$ (cat " $( PIDFILE) " )" 2> /dev/null; then
59+ kill -9 " $$ (cat " $(PIDFILE ) " )" || true
60+ fi
61+ rm -rf " $( BUILD_DIR) "
62+
63+ .PHONY : start stop clean run
0 commit comments