# Copyright (c) 2020 The Regents of the University of California.
# SPDX-License-Identifier: BSD 3-Clause

# Choosing keyboard layout
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select us

# Choosing network interface
d-i netcfg/choose_interface select auto

# Assigning hostname and domain
d-i netcfg/get_hostname string gem5-host
d-i netcfg/get_domain string gem5-domain

d-i netcfg/wireless_wep string

# https://unix.stackexchange.com/q/216348
# The above link says there's no way to not to set a mirror
# Should choose a local minor
d-i mirror/country string manual
d-i mirror/http/hostname string archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string

# Setting up `root` password
d-i passwd/root-login boolean false

# Creating a normal user account. This account has sudo permission.
d-i passwd/user-fullname string gem5
d-i passwd/username string gem5
d-i passwd/user-password password 12345
d-i passwd/user-password-again password 12345
d-i user-setup/allow-password-weak boolean true

# No home folder encryption
d-i user-setup/encrypt-home boolean false

# Choosing the clock timezone
d-i clock-setup/utc boolean true
d-i time/zone string US/Eastern
d-i clock-setup/ntp boolean true

# Choosing partition scheme
# This setting should result in MBR
# gem5 doesn't work with logical volumes
d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true

# Ignoring an option to set the home folder in another partition
#d-i partman-auto/choose_recipe select atomic

d-i partman-auto/expert_recipe string                         \
      bootable-root ::                                        \
              500 10000 1000000000 ext4                       \
                      method{ format }                        \
                      format{ }                               \
                      use_filesystem{ } filesystem{ ext4 }    \
                      mountpoint{ / }                         \
              .                                               \
              64 512 300% linux-swap                          \
                      method{ swap }                          \
                      format{ }                               \
              .


d-i partman-auto/choose_recipe select bootable-root

# Finishing disk partition settings
d-i partman-md/confirm boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Installing standard packages and ubuntu-server packages
# More details about ubuntu standard packages:
# https://packages.ubuntu.com/bionic/ubuntu-standard
# More details about ubuntu-server packages:
# https://packages.ubuntu.com/bionic/ubuntu-server
tasksel tasksel/first multiselect standard, ubuntu-server

# openssh-server is required for communicating with Packer
# build-essential has standard compiling tools, could be removed
d-i pkgsel/include string openssh-server build-essential
# No package upgrade
d-i pkgsel/upgrade select none

# Updating packages automatically is unnecessary
d-i pkgsel/update-policy select none

# Choosing not to report installed software to some servers
popularity-contest popularity-contest/participate boolean false

# Installing grub
d-i grub-installer/only_debian boolean true

# Install to the above partition
d-i grub-installer/bootdev  string default

# Answering the prompt saying the installation is finished
d-i finish-install/reboot_in_progress note

# Answering the prompt saying no bootloader is installed
# This will appear if grub is not installed
nobootloader nobootloader/confirmation_common note
