summaryrefslogtreecommitdiffstats
path: root/tests/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'tests/desktop')
-rwxr-xr-xtests/desktop120
1 files changed, 120 insertions, 0 deletions
diff --git a/tests/desktop b/tests/desktop
new file mode 100755
index 0000000..bf40549
--- /dev/null
+++ b/tests/desktop
@@ -0,0 +1,120 @@
+#!/bin/sh
+# Try to guess at whether the user would like a desktop installed on their
+# system. Of course Debian has many users who use it on a wide array of
+# hardware, so this is tricky, but it's only a default.
+set -e
+
+if ! [ "$NEW_INSTALL" ]; then
+ exit 3
+fi
+
+arch="$(dpkg --print-architecture)"
+
+unmark () {
+ exit 3
+}
+mark () {
+ exit 2
+}
+
+# A few arches have the lion's share of desktops.
+common_desktop_architecture () {
+ case "$arch" in
+ i386|amd64|powerpc*)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+# On some arches it's almost unheard of to run a desktop, at least using
+# this task.
+unlikely_desktop_architecture () {
+ case "$arch" in
+ m68k|s390|s390x|hppa)
+ return 0
+ ;;
+ *)
+ return 1
+ ;;
+ esac
+}
+
+# Modern desktops take a lot of ram.
+enough_ram () {
+ min_ram=64 # MiB
+ ram=$(grep ^MemTotal: /proc/meminfo | { read x y z; echo $y; }) || true # kb
+ # The 4 is a fuzz factor to allow for kernel ram usage.
+ if [ "$ram" ] && [ "$ram" -ge "$(expr $(expr $min_ram - 4) \* 1024)" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# The desktop task requires 2 gb or so of disk in /usr, and .5 in /var for
+# the debs.
+# FIXME: this should really be generalised and used for tasksel to not
+# suggest any task for which there is not enough disk.
+enough_disk () {
+ min_disk=3
+ disk=$(df -P /usr | tail -1 | awk '{print $4}')
+ if [ "$disk" ] && [ "$disk" -ge "$(expr $min_disk \* 1024 \* 1024)" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+desktop_hardware () {
+ if which laptop-detect >/dev/null 2>&1 && \
+ laptop-detect; then
+ # Nearly always appropriate to include a desktop.
+ return 0
+ else
+ # TODO: test for the existence of a framebuffer and a mouse.
+ # A mouse, in particular, almost always indicates a
+ # desktop.
+ :
+ fi
+ return 1
+}
+
+rack_hardware () {
+ if which dmidecode >/dev/null 2>&1 && \
+ dmidecode | grep -q 'Type: Rack Mount Chassis'; then
+ return 0
+ fi
+
+ # XXX further heuristics here to avoid selecting the task on
+ # high-end hardware that's intended to be used as a server.
+ # For example, if it has two NICs with link, it's probably a
+ # server.
+
+ return 1
+}
+
+if ! enough_ram || ! enough_disk; then
+ unmark
+fi
+
+if desktop_hardware; then
+ mark
+fi
+
+if unlikely_desktop_architecture; then
+ unmark
+elif common_desktop_architecture; then
+ if rack_hardware; then
+ unmark
+ else
+ mark # probably a desktop ...
+ fi
+else
+ # XXX further heuristics here
+ :
+fi
+
+unmark