--- /dev/null
+#_preseed_V1
+
+d-i passwd/root-login boolean true
+user-setup-udeb passwd/make-user boolean false
+
+d-i netcfg/choose_interface select auto
+d-i netcfg/link_wait_timeout string 3
+d-i netcfg/wireless_wep string
+d-i netcfg/disable_autoconfig boolean false
+d-i netcfg/get_hostname string unassigned-hostname
+d-i netcfg/get_domain string unassigned-domain
+
+# d-i partman-auto/method string crypto
+d-i partman-auto-lvm/guided_size string max
+# d-i partman-auto/choose_recipe select atomic
+d-i partman-auto-crypto/erase_disks boolean false
+# d-i partman-lvm/confirm boolean true
+
+d-i base-installer/kernel/image string linux-image-amd64
+
+d-i mirror/protocol string http
+d-i apt-setup/non-free-firmware boolean true
+d-i apt-setup/non-free boolean true
+d-i apt-setup/contrib boolean true
+
+clock-setup clock-setup/utc boolean true
+d-i finish-install/reboot_in_progress note
--- /dev/null
+abort() {
+ echo "$1"
+ exit 1
+}
--- /dev/null
+. lib/abort
+
+abort_if_not_user() {
+ if [ "$(whoami)" != "$1" ]; then
+ abort "Must be run as ${1}."
+ fi
+}
--- /dev/null
+. lib/abort
+
+abort_if_offline() {
+ if ! ping -c1 -W2 1.1.1.1 > /dev/null 2>&1; then
+ abort 'Must be run online.'
+ fi
+}
--- /dev/null
+FILENAME_PRESEED_CFG=preseed.cfg
+PATH_PRESEED_CFG="../${FILENAME_PRESEED_CFG}"
+PATH_MNT_STICK=/mnt/stick
--- /dev/null
+expect_min_n_args() {
+ MIN_ARGS="$1"
+ EXPLAINER="$2"
+ shift 2
+ if [ "$#" -lt "${MIN_ARGS}" ]; then
+ echo "Need at least ${MIN_ARGS} arguments … ${EXPLAINER}"
+ false
+ fi
+}
--- /dev/null
+. lib/abort
+
+get_mountable_device_path() {
+ PATH_DEV="/dev/$1"
+ if [ ! -b "${PATH_DEV}" ]; then
+ abort "No block device at ${PATH_DEV}."
+ elif [ $(mount | grep -E "^${PATH_DEV}" | wc -l) -gt 0 ]; then
+ abort "${PATH_DEV} already mounted."
+ fi
+ printf "${PATH_DEV}"
+}
--- /dev/null
+#!/bin/sh
+# based on <https://wiki.debian.org/DebianInstaller/WritableUSBStick>
+set -e
+cd $(dirname "$0")
+. lib/abort
+. lib/abort_if_not_user
+. lib/abort_if_offline
+. lib/constants_installer
+. lib/expect_min_n_args
+. lib/get_mountable_device_path
+
+INSTALLER_VERSION=12.10.0
+PATH_MNT_ISO=/mnt/iso
+
+abort_if_not_user root
+abort_if_offline root
+abort_if_command_unknown() {
+ if ! which "$1" > /dev/null; then
+ abort "expected command unavailable: ${1}."
+ fi
+}
+abort_if_command_unknown wget
+abort_if_command_unknown rsync
+abort_if_command_unknown parted
+abort_if_command_unknown mkfs.vfat
+
+expect_min_n_args 1 '(device name, e.g. "sdb")' $@
+PATH_STICK="$(get_mountable_device_path $1)"
+
+FILENAME_ISO="debian-${INSTALLER_VERSION}-amd64-netinst.iso"
+echo "Retrieving ${FILENAME_ISO}."
+URL_ISO="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/${FILENAME_ISO}"
+PATH_ISO="/tmp/${FILENAME_ISO}"
+wget --output-document "${PATH_ISO}" "${URL_ISO}"
+
+echo "Preparing partition/filesystem on ${PATH_STICK}."
+parted --script "${PATH_STICK}" mklabel msdos
+parted --script "${PATH_STICK}" mkpart primary fat32 0% 100%
+PATH_PARTITION="${PATH_STICK}1"
+mkfs.vfat "${PATH_PARTITION}"
+
+echo "Mounting ${PATH_MNT_ISO} and ${PATH_MNT_STICK}."
+mkdir -p "${PATH_MNT_ISO}" "${PATH_MNT_STICK}"
+mount "${PATH_PARTITION}" "${PATH_MNT_STICK}"
+mount -o loop "${PATH_ISO}" "${PATH_MNT_ISO}"
+do_umounts() {
+ set +e
+ echo "Unmounting ${PATH_MNT_ISO}"
+ umount "${PATH_MNT_ISO}"
+ echo "Unmounting ${PATH_MNT_STICK}"
+ umount "${PATH_MNT_STICK}"
+ set -e
+}
+trap do_umounts EXIT INT TERM
+
+echo "Copying contents of ${PATH_MNT_ISO} to ${PATH_MNT_STICK}/."
+PATH_RSYNC_ERRORS=/tmp/rsync_errors
+set +e
+rsync -a "${PATH_MNT_ISO}/" "${PATH_MNT_STICK}/" 2> "${PATH_RSYNC_ERRORS}"
+RESULT=$?
+set -e
+if [ "${RESULT}" != "0" ]; then
+ echo 'rsync errors:'
+ cat "${PATH_RSYNC_ERRORS}"
+ echo 'rsync encountered errors, see above – continue? (Y/N)'
+ rm "${PATH_RSYNC_ERRORS}"
+ read ANSWER
+ FIRST_CHAR=$(echo "${ANSWER}" | cut -c1)
+ if ! [ "${FIRST_CHAR}" = 'y' -o "${FIRST_CHAR}" = 'Y' ]; then
+ abort 'as requested'
+ fi
+fi
+
+echo "Installing preseed file."
+cp "${PATH_PRESEED_CFG}" "${PATH_MNT_STICK}/"
+sed --in-place 's/ --- / --- preseed\/file=\/cdrom\/'"${FILENAME_PRESEED_CFG}"' /g' "${PATH_MNT_STICK}/boot/grub/grub.cfg"
+
+rm "${PATH_ISO}"
+echo "Done!"
--- /dev/null
+#!/bin/sh
+set -e
+set -x
+cd $(dirname "$0")
+. lib/abort_if_not_user
+. lib/constants_installer
+. lib/expect_min_n_args
+. lib/get_mountable_device_path
+
+abort_if_not_user root
+expect_min_n_args 1 '(e.g. "sdb1")' $@
+PATH_STICK="$(get_mountable_device_path $1)"
+
+mount "${PATH_STICK}" "${PATH_MNT_STICK}"
+trap "umount ${PATH_MNT_STICK}" EXIT INT TERM
+cp "${PATH_PRESEED_CFG}" "${PATH_MNT_STICK}/"
+++ /dev/null
-get_passphrase() {
- stty -echo
- read PASSPHRASE
- stty echo
- printf "${PASSPHRASE}"
-}
--- /dev/null
+../../../scripts/lib/get_passphrase
\ No newline at end of file
+++ /dev/null
-path_tmp_timestamped () {
- printf "/tmp/${1}_$(date +'%s')"
-}
--- /dev/null
+../../../scripts/lib/path_tmp_timestamped
\ No newline at end of file
+++ /dev/null
-abort() {
- echo "$1"
- exit 1
-}
--- /dev/null
+../../../bookworm/scripts/lib/abort
\ No newline at end of file
+++ /dev/null
-. lib/abort
-
-abort_if_not_user() {
- if [ "$(whoami)" != "$1" ]; then
- abort "Must be run as ${1}."
- fi
-}
--- /dev/null
+../../../bookworm/scripts/lib/abort_if_not_user
\ No newline at end of file
+++ /dev/null
-. lib/abort
-
-abort_if_offline() {
- if ! ping -c1 -W2 1.1.1.1 > /dev/null 2>&1; then
- abort 'Must be run online.'
- fi
-}
--- /dev/null
+../../../bookworm/scripts/lib/abort_if_offline
\ No newline at end of file
+++ /dev/null
-expect_min_n_args() {
- MIN_ARGS="$1"
- EXPLAINER="$2"
- shift 2
- if [ "$#" -lt "${MIN_ARGS}" ]; then
- echo "Need at least ${MIN_ARGS} arguments … ${EXPLAINER}"
- false
- fi
-}
--- /dev/null
+get_passphrase() {
+ stty -echo
+ read PASSPHRASE
+ stty echo
+ printf "${PASSPHRASE}"
+}
--- /dev/null
+path_tmp_timestamped () {
+ printf "/tmp/${1}_$(date +'%s')"
+}
#!/bin/sh
set -e
cd $(dirname "$0")
-
. lib/constants # PATH_USER_HOME, USERNAME
. lib/expect_min_n_args
. lib/abort
#!/bin/sh
set -e
cd $(dirname "$0")
-
-. lib/constants # PATH_USER_HOME, USERNAME
-. lib/expect_min_n_args
. lib/abort
. lib/abort_if_exists
. lib/abort_if_not_user
. lib/abort_if_offline
-
-. "${PATH_USER_HOME}/.plomlib.sh/get_passphrase"
-. "${PATH_USER_HOME}/.plomlib.sh/path_tmp_timestamped"
+. lib/constants # PATH_USER_HOME, USERNAME
+. lib/expect_min_n_args
+. lib/get_passphrase
+. lib/path_tmp_timestamped
PATH_REL_SECRETS=to_usb
export PATH_SECRETS="${PATH_USER_HOME}/${PATH_REL_SECRETS}"