#!/bin/sh

## live-tools(7) - System Support Scripts
## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org>
##
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
## This is free software, and you are welcome to redistribute it
## under certain conditions; see COPYING for details.


set -e

if [ ! -e /usr/sbin/update-initramfs.orig.initramfs-tools ]
then
	echo "E: /usr/sbin/update-initramfs.orig.initramfs-tools - command not found"
	echo "E: On Debian based systems, update-initramfs from initramfs-tools"
	echo "E: can be installed with:"
	echo "E:   apt-get install initramfs-tools"

	exit 1
fi

if grep -qs "boot=live" /proc/cmdline
then
	if grep -qs "\/lib\/live\/image" /proc/mounts
	then
		# live system with live media mounted as /lib/live/image
		_DEVICE="$(awk '/\/lib\/live\/image/ { print $1 }' /proc/mounts)"

		mount -o remount,rw ${_DEVICE} > /dev/null 2>&1 || true

		if touch /lib/live/image/.test > /dev/null 2>&1
		then
			_READ_WRITE="true"

			rm -f /lib/live/image/.test
		else
			_READ_WRITE="false"
		fi
	else
		# live system without live media mounted as /lib/live/image
		echo "I: update-initramfs is disabled (live system is running without media mounted on /lib/live/image)."

		exit 0
	fi
else
	# non-live system
	/usr/sbin/update-initramfs.orig.initramfs-tools "${@}"

	exit "${?}"
fi

case "${_READ_WRITE}" in
	true)
		# Updating initramfs
		/usr/sbin/update-initramfs.orig.initramfs-tools "${@}"

		# FIXME: needs to exclude initrd backup files
		if [ "$(ls initrd.img-* | wc -l)" -gt 1 ]
		then
			_NUMBER="1"

			for _INITRD in /boot/initrd.img-*
			do
				_VERSION="$(echo ${_INITRD} | sed -e 's|initrd.img-||')"

				cp /boot/vmlinuz-${_VERSION} /lib/live/image/live/vmlinuz${_NUMBER}.new
				cp /boot/initrd.img-${_VERSION} /lib/live/image/live/initrd${_NUMBER}.img.new

				mv /lib/live/image/live/vmlinuz${_NUMBER}.new /lib/live/image/live/vmlinuz${_NUMBER}
				mv /lib/live/image/live/initrd${_NUMBER}.img.new /lib/live/image/live/initrd${_NUMBER}.img

				_NUMBER="$((${_NUMBER} + 1))"
			done
		else
			cp /boot/vmlinuz-* /lib/live/image/live/vmlinuz.new
			cp /boot/initrd.img-* /lib/live/image/live/initrd.img.new

			mv /lib/live/image/live/vmlinuz.new /lib/live/image/live/vmlinuz
			mv /lib/live/image/live/initrd.img.new /lib/live/image/live/initrd.img
		fi
		;;

	false)
		echo "I: update-initramfs is disabled (live system is running on read-only media)."
		exit 0
		;;
esac
