121 lines
2.3 KiB
Bash
Executable File
121 lines
2.3 KiB
Bash
Executable File
#!/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
|