Skip to content

Instantly share code, notes, and snippets.

@ccooke
Forked from anonymous/overlay-changes
Created January 11, 2016 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ccooke/d9255a619f66de42dbcc to your computer and use it in GitHub Desktop.
Save ccooke/d9255a619f66de42dbcc to your computer and use it in GitHub Desktop.
#!/bin/bash
if (( $(id -u) != 0 )); then
echo "This script must be run as root"
exit 127
fi
opt_exit_status=0
write_diff="overlay.diff"
while [ "$1" ]; do
case $1 in
--no-diff)
write_diff=""
;;
--diff)
write_diff="$2"
shift 1
;;
--no-*)
var="${1##--no-}"
var="opt_${var//-/_}"
if [[ ${!var} ]]; then
eval "$var=0"
fi
;;
--*)
var="${1##--}"
var="opt_${var//-/_}"
if [[ ${!var} ]]; then
eval "$var=1"
fi
;;
--|*)
break
;;
esac
shift 1
done
if temp="$( mktemp --directory /tmp/overlay-runner-XXX )"; then
trap "rm -rf $temp" EXIT
mkdir "$temp/overlay"
mkdir "$temp/root"
mkdir "$temp/work"
mount -t overlayfs -o rw,lowerdir=/,upperdir="$temp/overlay",workdir="$temp/work" overlayfs "$temp/root"
chroot "$temp/root" "${@}"
exit_code="$?"
umount "${temp}/root"
DIFF="$(diff -ru "/" "${temp}/overlay" | grep -v ^Only)"
if [[ $write_diff ]]; then
echo "$DIFF" > "$write_diff"
fi
if (( $opt_exit_status )); then
exit $exit_code
elif [[ "$DIFF" == "" ]]; then
exit 0
else
exit 1
fi
else
exit 126
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment