lxc-test-checkpoint-restore revision d48d22299d4fc5635f289e4a34967e6cd99cd743
4de2612967d06c4fdbf524a62556a1e8118a006fxs#!/bin/sh
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxs# Do an end to end checkpoint and restore with criu.
4de2612967d06c4fdbf524a62556a1e8118a006fxs
bb25c06cca41ca78e5fb87fbb8e81d55beb18c95jgset -e
bb25c06cca41ca78e5fb87fbb8e81d55beb18c95jg
4de2612967d06c4fdbf524a62556a1e8118a006fxsFAIL() {
4de2612967d06c4fdbf524a62556a1e8118a006fxs echo -n "Failed " >&2
4de2612967d06c4fdbf524a62556a1e8118a006fxs echo "$*" >&2
4de2612967d06c4fdbf524a62556a1e8118a006fxs exit 1
4de2612967d06c4fdbf524a62556a1e8118a006fxs}
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxsif [ "$(id -u)" != "0" ]; then
4de2612967d06c4fdbf524a62556a1e8118a006fxs echo "ERROR: Must run as root."
4de2612967d06c4fdbf524a62556a1e8118a006fxs exit 1
4de2612967d06c4fdbf524a62556a1e8118a006fxsfi
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxsverlte() {
4de2612967d06c4fdbf524a62556a1e8118a006fxs ! [ "$1" = "$(printf "$1\n$2" | sort -V | tail -n1)" ]
4de2612967d06c4fdbf524a62556a1e8118a006fxs}
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxscriu_version="$(criu --version | head -n1 | cut -d' ' -f 2)"
bf56214c0556fa6864189c826d39dbe156bb22a0stevel
4de2612967d06c4fdbf524a62556a1e8118a006fxsif verlte "$criu_version" "1.3.1"; then
4de2612967d06c4fdbf524a62556a1e8118a006fxs echo "SKIP: skipping test because no (or wrong) criu installed."
bb25c06cca41ca78e5fb87fbb8e81d55beb18c95jg exit 0
4de2612967d06c4fdbf524a62556a1e8118a006fxsfi
4ebb14b236958cfe1ef4ff3b7a50216d9e51f997frits
4de2612967d06c4fdbf524a62556a1e8118a006fxsname=lxc-test-criu
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-create -t ubuntu -n $name || FAIL "creating container"
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxscat >> "$(lxc-config lxc.lxcpath)/$name/config" <<EOF
4de2612967d06c4fdbf524a62556a1e8118a006fxs# hax for criu
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc.console = none
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc.tty = 0
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc.cgroup.devices.deny = c 5:1 rwm
4de2612967d06c4fdbf524a62556a1e8118a006fxsEOF
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-start -n $name -d || FAIL "starting container"
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-wait -n $name -s RUNNING || FAIL "waiting for container to run"
4ebb14b236958cfe1ef4ff3b7a50216d9e51f997frits
4ebb14b236958cfe1ef4ff3b7a50216d9e51f997frits# Let the container boot and get into a steady state.
4de2612967d06c4fdbf524a62556a1e8118a006fxssleep 5s
4ebb14b236958cfe1ef4ff3b7a50216d9e51f997frits
4de2612967d06c4fdbf524a62556a1e8118a006fxs# The first time this usually fails because CRIU cannot checkpoint things with
4de2612967d06c4fdbf524a62556a1e8118a006fxs# data on a socket.
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-checkpoint -n $name -v -s -D /tmp/checkpoint || FAIL "failed checkpointing"
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-wait -n u1 -s STOPPED
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-checkpoint -n $name -v -r -D /tmp/checkpoint || FAIL "failed restoring"
4de2612967d06c4fdbf524a62556a1e8118a006fxs
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-stop -n $name -t 1
4de2612967d06c4fdbf524a62556a1e8118a006fxslxc-destroy -f -n $name
4de2612967d06c4fdbf524a62556a1e8118a006fxs