#!/bin/sh
# Speed up package installation by disabling all file system
# flushing.  If something go wrong on first time installation,
# reinstall.  This override is put in place post-base-installer.d and
# pre-pkgsel.d and undone in finish-install.  See also bug #613428.

set -e

log() { logger -t edu-eatmydata-install "$@"; }
info() { log  "info: $@"; }
warning() { log  "warning: $@"; }
error() { log  "error: $@"; }

at_exit() {
    error "script $0 terminated unexpectedly."
}
disable_exception() { trap - INT TERM EXIT; }
trap at_exit INT TERM EXIT

enable_override() {
    apt-install eatmydata || true
    if [ -x /target/usr/bin/eatmydata ] ; then
      if [ ! -f /target/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata ]; then
        info "Adding apt config to call dpkg via eatmydata"
        printf "#!/bin/sh\nexec eatmydata dpkg \"\$@\"\n" \
            > /target/var/tmp/dpkg-eatmydata
        chmod 755 /target/var/tmp/dpkg-eatmydata
        cat > /target/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata <<EOF
Dir::Bin::dpkg "/var/tmp/dpkg-eatmydata";
EOF
      else
	    info "apt redirect for eatmydata already in place"
      fi
    else
        error "unable to find /usr/bin/eatmydata after installing the eatmydata package"
    fi
}

disable_override() {
    for override in \
	/etc/apt/apt.conf.d/95debian-edu-install-dpkg-eatmydata \
	/var/tmp/dpkg-eatmydata ; do
	info "Removing apt config to call dpkg via eatmydata"
	if [ -f /target$override ] ; then
            rm -f /target$override
	else
            warning "missing /target$override"
	fi
    done
    sync # Flush file buffers before continuing
}

case "$1" in
    enable)
        enable_override
        ;;
    disable)
        disable_override
        ;;
    *)
        error "invalid argument $1"
        ;;

esac

disable_exception
