735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen# Do an end to end checkpoint and restore with criu.
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen echo "ERROR: Must run as root."
5f845c928afc5c36f4c06771ce1814a16df3f5a5Tycho Andersen ! [ "$1" = "$(printf "$1\n$2" | sort -V | tail -n1)" ]
5f845c928afc5c36f4c06771ce1814a16df3f5a5Tycho Andersencriu_version="$(criu --version | head -n1 | cut -d' ' -f 2)"
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen echo "SKIP: skipping test because no (or wrong) criu installed."
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc-create -t ubuntu -n $name || FAIL "creating container"
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersencat >> "$(lxc-config lxc.lxcpath)/$name/config" <<EOF
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen# hax for criu
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc.console = none
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc.cgroup.devices.deny = c 5:1 rwm
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc-start -n $name -d || FAIL "starting container"
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc-wait -n $name -s RUNNING || FAIL "waiting for container to run"
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen# Let the container boot and get into a steady state.
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen# The first time this usually fails because CRIU cannot checkpoint things with
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersen# data on a socket.
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc-checkpoint -n $name -v -s -D /tmp/checkpoint || FAIL "failed checkpointing"
735f2c6e504a541cbb2592a3f94858bf337a24ffTycho Andersenlxc-checkpoint -n $name -v -r -D /tmp/checkpoint || FAIL "failed restoring"