#!/bin/sh

# lh_buildbinary

if [ ! -f "${LIVE_ROOT}"/.stage/image_binary ]
then
	# Configure chroot
	lh_patchchroot apply
	lh_patchrunlevel apply

	# Configure network
	lh_patchnetwork apply

	mkdir -p "${LIVE_ROOT}"/binary/casper
	for MANIFEST in "${LIVE_ROOT}"/filesystem.manifest*
	do
		if [ -e "${MANIFEST}" ]; then
			mv "${MANIFEST}" "${LIVE_ROOT}"/binary/casper/
		fi
	done

	if [ "${LIVE_TYPE}" = "Net" ]
	then
		# Mount proc
		mount proc-live -t proc "${LIVE_CHROOT}"/proc

		# Installing smbfs
		lh_chroot "aptitude install --assume-yes smbfs"

		# Unmount proc
		umount "${LIVE_CHROOT}"/proc

		if [ "${LIVE_ARCHITECTURE}" = "amd64" ] || [ "${LIVE_ARCHITECTURE}" = "i386" ]
		then
			if [ ! -d "${LIVE_CHROOT}"/etc/initramfs-tools ]
			then
				mkdir "${LIVE_CHROOT}"/etc/initramfs-tools
			fi

			# Configuring initramfs for NFS
cat >> "${LIVE_CHROOT}"/etc/initramfs-tools/initramfs.conf << EOF
MODULES=netboot
BOOT=nfs
NFSROOT=auto
EOF
			lh_chroot "update-initramfs -tu"
		fi
	fi

	lh_cleanapt

	# Switching package indices to default
	if [ "${LIVE_GENERIC_INDICES}" = "yes" ]
	then
		lh_setupapt default
		lh_configapt deapply-proxy
		lh_configapt deapply-recommends
	fi

	# Deconfigure network
	lh_patchnetwork deapply

	# Deconfigure chroot
	lh_patchrunlevel deapply
	lh_patchchroot deapply

	# Generating rootfs image
	lh_genrootfs

	# Configure chroot
	lh_patchchroot apply
	lh_patchrunlevel apply

	# Configure network
	lh_patchnetwork apply

	lh_cleanapt

	# Switching package indices to custom
	lh_setupapt custom
	lh_configapt apply-proxy
	lh_configapt apply-recommends

	case "${LIVE_TYPE}" in
		Iso)
			TYPE=iso
			;;
		Usb)
			TYPE=usb
			;;
		Net)
			TYPE=net
			;;
	esac

	# Mount proc
	mount proc-live -t proc "${LIVE_CHROOT}"/proc

	# Install depends
	lh_depends install $TYPE

	# Installing syslinux
	lh_installsyslinux $TYPE

	# Installing linux-image
	lh_installlinux $TYPE

	# Installing memtest
	lh_installmemtest86+ $TYPE

	# Deconfigure network
	lh_patchnetwork deapply

	# Deconfigure chroot
	lh_patchrunlevel deapply
	lh_patchchroot deapply

	# Installing templates
	if [ "${LIVE_FLAVOUR}" != "minimal" ] || [ "${LIVE_FLAVOUR}" != "mini" ]
	then
		if [ "${TYPE}" != "usb" ]
		then
			cp -r "${LIVE_TEMPLATES}"/common/* "${LIVE_ROOT}"/binary
		fi

		if [ "${TYPE}" = "iso" ] || [ "${TYPE}" = "usb" ]
		then
			cp -r "${LIVE_TEMPLATES}"/iso/* "${LIVE_ROOT}"/binary
		fi
	fi

	# Calculating md5sums
	lh_md5sums

	case "${TYPE}" in
		iso)
			if [ "${LIVE_ARCHITECTURE}" = "amd64" ] || [ "${LIVE_ARCHITECTURE}" = "i386" ]
			then
				# Create image
				${GENISOIMAGE} -A "Debian Live" -p "Debian Live; http://debian-live.alioth.debian.org/; debian-live-devel@lists.alioth.debian.org" -publisher "Debian Live; http://debian-live.alioth.debian.org/; debian-live-devel@lists.alioth.debian.org" -o "${LIVE_ROOT}"/"${LIVE_IMAGE}"binary.iso -r -J -l -V "${LIVE_DISK_VOLUME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table "${LIVE_ROOT}"/binary ${LIVE_INCLUDE_IMAGE}
			else
				echo "W: Bootloader on your architecture not yet supported (Continuing in 5 seconds)."
				sleep 5
				# Create image
				${GENISOIMAGE} -A "Debian Live" -p "Debian Live; http://debian-live.alioth.debian.org/; debian-live-devel@lists.alioth.debian.org" -publisher "Debian Live; http://debian-live.alioth.debian.org/; debian-live-devel@lists.alioth.debian.org" -o "${LIVE_ROOT}"/"${LIVE_IMAGE}"binary.iso -r -J -l -V "${LIVE_DISK_VOLUME}" "${LIVE_ROOT}"/binary ${LIVE_INCLUDE_IMAGE}
			fi
			;;

		net)
			cd "${LIVE_ROOT}" && \
			mv binary "`basename ${LIVE_SERVER_PATH}`" && \
			cd .. && \
			tar cfz binary.tar.gz "`basename ${LIVE_ROOT}`/`basename ${LIVE_SERVER_PATH}`" "`basename ${LIVE_ROOT}`/tftpboot" && \
			mv binary.tar.gz "${LIVE_ROOT}" && \
			cd "${OLDPWD}" && \
			mv "`basename ${LIVE_SERVER_PATH}`" binary
			;;

		usb)
			# Everything which comes here needs to be cleaned up,
			DU_DIM="`du -ms ${LIVE_ROOT}/binary | cut -f1`"
			REAL_DIM="`expr ${DU_DIM} + ${DU_DIM} / 20`" # Just 5% more to be sure, need something more sophistcated here...
			dd if=/dev/zero of="${LIVE_ROOT}"/binary.img bs=1024k count=${REAL_DIM}

			FREELO="`lh_chroot 'losetup -f'`"

			echo "!!! The following error/warning messages can be ignored !!!"
			lh_losetup $FREELO "${LIVE_ROOT}"/binary.img 0
			set +e
			lh_chroot "parted -s ${FREELO} mklabel msdos"
			lh_chroot "parted -s ${FREELO} mkpartfs primary fat16 0.0 100%"
			lh_chroot "parted -s ${FREELO} set 1 boot on"
			lh_chroot "parted -s ${FREELO} set 1 lba off"
			set -e
			cat "${LIVE_CHROOT}"/usr/lib/syslinux/mbr.bin > ${FREELO}
			losetup -d ${FREELO}

			lh_losetup $FREELO "${LIVE_ROOT}"/binary.img 1
			lh_chroot "mkfs.msdos -n DEBIAN_LIVE ${FREELO}"
			mkdir "${LIVE_ROOT}"/binary.tmp
			mount ${FREELO} "${LIVE_ROOT}"/binary.tmp
			cp -r "${LIVE_ROOT}"/binary/* "${LIVE_ROOT}"/binary.tmp
			umount "${LIVE_ROOT}"/binary.tmp
			rmdir "${LIVE_ROOT}"/binary.tmp
			lh_chroot "syslinux ${FREELO}"
			losetup -d ${FREELO}

			echo "!!! The above error/warning messages can be ignored !!!"
			;;
	esac

	# Remove depends
	lh_depends remove $TYPE

	# Unmount proc
	umount "${LIVE_CHROOT}"/proc

	# Touching stage file
	touch "${LIVE_ROOT}"/.stage/image_binary
fi
