ram=$(grep ^MemTotal: /proc/meminfo | { read x y z; echo $y; }) || true # in kilobytes

if [ -z "$ram" ]; then
	echo "Cannot determine system memory, skipping lowmem probe" >&2
else
	ram=$(expr $ram / 1024) # convert to megabytes


	# Set level1 to the lowest amount of memory that will support an
	# install not in lowmem mode. (This is the max memory footprint of
	# the installer in non lowmem mode up to running the partitioner
	# and swapon.)
	# Use Portuguese as language and choose Guided partitioning with all
	# partitions separate to test this!
	#
	# Set level2 to the lowest amount of memory that will support an
	# install in lowmem mode. (This is the max memory footprint of the
	# installer in lowmem mode up to running the partitioner
	# and swapon.)
	# Again, choose Guided partitioning with all partitions separate.
	#
	# Set min to absolute minimum amount of memory needed for an install.
	#
	# NB: the minimum memory required to run the graphical installer must
	# also be tested. See rootskel (debian-installer.d/S60frontend).

	ARCH=$(udpkg --print-architecture)
	case $ARCH in
		alpha)
			level1=82
			level2=55
			min=39
		;;
		amd64)
			level1=50 # MT=52108, qemu: -m 56
			level2=46 # MT=48068, qemu: -m 52
			min=31    # MT=31912, qemu: -m 36
		;;
		arm|armel)
			level1=60 # not sure but more than 32
			level2=33
			min=18
		;;
		armeb)
			level1=60 # not sure but more than 32
			level2=24
			min=18
		;;
		i386)
			level1=39 # MT=40456, qemu: -m 44
			level2=36 # MT=37392, qemu: -m 40
			min=24    # MT=25224, qemu: -m 28
		;;
		mips)
			level1=57
			level2=33
			min=21
		;;
		mipsel)
			level1=60
			level2=33
			min=19
		;;
		m68k)
			level1=64
			level2=32
			min=0 #FIXME
		;;
		s390)
			level1=44 # needs MAINSIZE=48 in Hercules
			level2=28
			min=20
		;;
		*)
			level1=64
			level2=32
			min=0 #FIXME
		;;
	esac

	use_level=0
	if  [ $ram -lt $min ]; then
		use_level=9
	elif [ $ram -lt $level2 ]; then
		use_level=2
	elif [ $ram -lt $level1 ]; then
		use_level=1
	fi

	# Check for lowmem level set by user; only 1 and 2 supported
	# We cannot use preseeding yet, so parse /proc/cmdline directly
	user_level=$(grep "lowmem=[12]" /proc/cmdline | \
			sed "s/^.*lowmem=\([0-9]*\).*$/\1/")
	if [ "$user_level" ] && [ $user_level -gt $use_level ]; then
		logger -t lowmem "Using $user_level instead of default level $use_level"
		use_level=$user_level
	fi

	if [ $use_level -gt 0 ]; then
		logger -t lowmem "Entering low memory mode"

		if [ $use_level -le 2 ]; then
			echo $use_level > /var/lib/lowmem
		else
			echo 2 > /var/lib/lowmem
			# 4 mb fuzz for kernel
			echo "$(($min + 4))" > /var/lib/lowmem_insufficient
		fi
		
	       	trimtemplates /var/lib/dpkg/info || true
	fi
fi
