--- /dev/null
+#!/bin/sh
+set -e
+. ./misc.sh
+
+expect_n_args 2 "(hostname, FQDN)" "$@"
+hostname="$1"
+fqdn="$2"
+shift 2
+
+cd "${setup_scripts_dir}"
+
+# Adapt /etc/ to our needs by copying from ./etc_files. This will set
+# basic configurations affecting following steps, such as setup of APT
+# and the locale selection, so needs to be right at the beginning.
+./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" all "$@"
+
+# Set hostname and FQDN.
+./set_hostname_and_fqdn.sh "${hostname}" "${fqdn}"
+
+# Ensure package installation state as defined by what packages are
+# defined as required by Debian policy and by settings in ./apt-mark/.
+apt update
+./install_for_target.sh all "$@"
+./purge_nonrequireds.sh all "$@"
+
+# Ensure our desired locale is available.
+locale-gen
+
+# Only upgrade after reducing the system to the desired minimum, so that
+# we don't need to get more data than necessary.
+apt -y dist-upgrade
+
+# Set Berlin localtime.
+ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
 
+++ /dev/null
-#!/bin/sh
-set -e
-. ./misc.sh
-
-expect_n_args 2 "(hostname, FQDN)" "$@"
-hostname="$1"
-fqdn="$2"
-shift 2
-
-cd "${setup_scripts_dir}"
-
-# Adapt /etc/ to our needs by copying from ./etc_files. This will set
-# basic configurations affecting following steps, such as setup of APT
-# and the locale selection, so needs to be right at the beginning.
-./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" all "$@"
-
-# Set hostname and FQDN.
-./set_hostname_and_fqdn.sh "${hostname}" "${fqdn}"
-
-# Ensure package installation state as defined by what packages are
-# defined as required by Debian policy and by settings in ./apt-mark/.
-apt update
-./install_for_target.sh all "$@"
-./purge_nonrequireds.sh all "$@"
-
-# Ensure our desired locale is available.
-locale-gen
-
-# Only upgrade after reducing the system to the desired minimum, so that
-# we don't need to get more data than necessary.
-apt -y dist-upgrade
-
-# Set Berlin localtime.
-ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
 
 
 # Set up system without user environment.
 cd "${setup_scripts_dir}"
-./setup.sh "${system_name}" "" user desktop thinkpad "${system_name}"
+./_setup.sh "${system_name}" "" user desktop thinkpad "${system_name}"
 
 # Set up printer.
 ppd_deb="hll2350dwpdrv-4.0.0-1.i386.deb"
 
 fqdn="$2"
 additional_arg="$3"
 
+# Set up basic server system.
+cd "${setup_scripts_dir}"
+./_setup.sh "${hostname}" "${fqdn}" server "$@"
+
 # If we have not yet set the shell for user plom, ensure it here. This
 # is mostly for convenience.
 usermod -s /bin/bash plom
 
 # Enable firewall.
 systemctl enable nftables.service
+
+touch "$HOME/setup_server_has_been_run"
 
 expect_n_args 1 "(domain name)" "$@"
 domain="$1"
 
+if [ ! -f "$HOME/setup_server_has_been_run" ]; then
+    echo "First need to run setup_server.sh."
+    false
+fi
+
 # Install configs, set up firewall.
 ./install_for_target.sh web static_websites
 ./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" web static_websites