lxc-test-checkpoint-restore revision 735f2c6e504a541cbb2592a3f94858bf337a24ff
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#!/bin/sh
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs# Do an end to end checkpoint and restore with criu.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsset -e
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsFAIL() {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs echo -n "Failed " >&2
355b4669e025ff377602b6fc7caaf30dbc218371jacobs echo "$*" >&2
355b4669e025ff377602b6fc7caaf30dbc218371jacobs exit 1
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsif [ "$(id -u)" != "0" ]; then
355b4669e025ff377602b6fc7caaf30dbc218371jacobs echo "ERROR: Must run as root."
355b4669e025ff377602b6fc7caaf30dbc218371jacobs exit 1
355b4669e025ff377602b6fc7caaf30dbc218371jacobsfi
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsif [ "$(criu --version | head -n1 | cut -d' ' -f 2)" != "1.3-rc2" ]; then
355b4669e025ff377602b6fc7caaf30dbc218371jacobs echo "SKIP: skipping test because no (or wrong) criu installed."
355b4669e025ff377602b6fc7caaf30dbc218371jacobs exit 0
355b4669e025ff377602b6fc7caaf30dbc218371jacobsfi
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsname=lxc-test-criu
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-create -t ubuntu -n $name || FAIL "creating container"
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobscat >> "$(lxc-config lxc.lxcpath)/$name/config" <<EOF
355b4669e025ff377602b6fc7caaf30dbc218371jacobs# hax for criu
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc.console = none
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc.tty = 0
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc.cgroup.devices.deny = c 5:1 rwm
355b4669e025ff377602b6fc7caaf30dbc218371jacobsEOF
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-start -n $name -d || FAIL "starting container"
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-wait -n $name -s RUNNING || FAIL "waiting for container to run"
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs# Let the container boot and get into a steady state.
355b4669e025ff377602b6fc7caaf30dbc218371jacobssleep 5s
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs# The first time this usually fails because CRIU cannot checkpoint things with
355b4669e025ff377602b6fc7caaf30dbc218371jacobs# data on a socket.
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-checkpoint -n $name -v -s -D /tmp/checkpoint || FAIL "failed checkpointing"
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-wait -n u1 -s STOPPED
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-checkpoint -n $name -v -r -D /tmp/checkpoint || FAIL "failed restoring"
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-stop -n $name -t 1
355b4669e025ff377602b6fc7caaf30dbc218371jacobslxc-destroy -f -n $name
355b4669e025ff377602b6fc7caaf30dbc218371jacobs