. lib/constants_installer # FILENAME_PRESEED_CFG, PATH_PRESEED_CFG
. lib/expect_n_args
. lib/get_mountable_device_path
+. lib/path_tmp_timestamped
+. lib/trapp
expect_n_args 1 1 'DEVICE (e.g. "sdb")' $@
abort_if_not_user root
abort_if_command_unknown parted
abort_if_command_unknown rsync
abort_if_command_unknown wget
-PATH_STICK="$(get_mountable_device_path $1)"
-
+PATH_DEV="$(get_mountable_device_path $1)"
PATH_MNT_ISO=/mnt/iso
+
+PATH_PROCESSING="$(path_tmp_timestamped make_writable_installer)"
+RM_PROCESSING="rm -rf ${PATH_PROCESSING}"
+echo "Setting up processing directory at ${PATH_PROCESSING} …"
+mkdir "${PATH_PROCESSING}"
+trapp "${RM_PROCESSING}"
+cd "${PATH_PROCESSING}"
+
FILENAME_ISO="debian-${INSTALLER_VERSION}-amd64-netinst.iso"
-echo "Retrieving ${FILENAME_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}"
+wget --quiet --output-document "${FILENAME_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 "Preparing partition/filesystem on ${PATH_DEV} …"
+parted --script "${PATH_DEV}" mklabel msdos
+parted --script "${PATH_DEV}" mkpart primary fat32 0% 100%
+PATH_PARTITION="${PATH_DEV}1"
+mkfs.vfat "${PATH_PARTITION}" > /dev/null
-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() {
+PATH_MNT_DEV='/mnt/'$(basename "${PATH_PARTITION}")
+echo -n "Mounting ${PATH_MNT_ISO} and ${PATH_MNT_DEV} …"
+mkdir -p "${PATH_MNT_ISO}" "${PATH_MNT_DEV}"
+do_umount() {
+ echo "Unmounting $1 …"
set +e
- echo "Unmounting ${PATH_MNT_ISO}"
- umount "${PATH_MNT_ISO}"
- echo "Unmounting ${PATH_MNT_STICK}"
- umount "${PATH_MNT_STICK}"
+ umount "$1"
set -e
}
-trap do_umounts EXIT INT TERM
+mount "${PATH_PARTITION}" "${PATH_MNT_DEV}"
+trapp "${RM_PROCESSING}; do_umount ${PATH_MNT_DEV}"
+mount -o loop "${FILENAME_ISO}" "${PATH_MNT_ISO}" 2>&1 | sed 's|mount: /mnt/iso: WARNING: source write-protected, mounted read-only.||'
+trapp "${RM_PROCESSING}; do_umount ${PATH_MNT_DEV}; do_umount ${PATH_MNT_ISO}"
-echo "Copying contents of ${PATH_MNT_ISO} to ${PATH_MNT_STICK}/."
-PATH_RSYNC_ERRORS=/tmp/rsync_errors
+echo "Copying contents of ${PATH_MNT_ISO} to ${PATH_MNT_DEV}/ …"
+FILENAME_RSYNC_ERRORS="rsync_errors"
set +e
-rsync -a "${PATH_MNT_ISO}/" "${PATH_MNT_STICK}/" 2> "${PATH_RSYNC_ERRORS}"
+rsync -a "${PATH_MNT_ISO}/" "${PATH_MNT_DEV}/" 2> "${FILENAME_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}"
+ echo 'RSYNC ERRORS:'
+ cat "${FILENAME_RSYNC_ERRORS}"
+ echo '\nrsync encountered errors, see above – continue? (Y/N)'
read ANSWER
FIRST_CHAR=$(echo "${ANSWER}" | cut -c1)
if ! [ "${FIRST_CHAR}" = 'y' -o "${FIRST_CHAR}" = 'Y' ]; then
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"
+echo "Installing preseed file …"
+cp "${PATH_PRESEED_CFG}" "${PATH_MNT_DEV}/"
+sed --in-place 's/ --- / --- preseed\/file=\/cdrom\/'"${FILENAME_PRESEED_CFG}"' /g' "${PATH_MNT_DEV}/boot/grub/grub.cfg"
-rm "${PATH_ISO}"
echo "Done!"
. lib/abort_if_offline
. lib/expect_n_args
. lib/path_tmp_timestamped
+. lib/trapp
PATH_LOGS_LOCAL="${HOME}/chatlogs/catgirl"
PATH_DECRYPTION_KEY_ENCRYPTED="${HOME}/.ssh/id_rsa"
SERVER="$1"
PATH_PROCESSING="$(path_tmp_timestamped pull_catgirl_logs)"
-ON_TRAP_RM_PROCESSING="rm -rf ${PATH_PROCESSING}"
-ON_TRAP="${ON_TRAP_RM_PROCESSING}"
+RM_PROCESSING="rm -rf ${PATH_PROCESSING}"
echo "Setting up processing directory at ${PATH_PROCESSING} …"
mkdir "${PATH_PROCESSING}"
-trap "${ON_TRAP}" EXIT INT TERM
+trapp "${RM_PROCESSING}"
cd "${PATH_PROCESSING}"
# Highly questionable acrobatics to work around "age" not supporting ssh-agent.
# (NB: not using lib/retry_until here cuz ssh-keygen returns non-workable exit codes)
echo -n 'Enter key decryption password: '
stty -echo
-ON_TRAP="${ON_TRAP}; stty echo"
-trap "${ON_TRAP}" EXIT INT TERM
+trapp "${RM_PROCESSING}; stty echo"
read SSHPASS
stty echo
-ON_TRAP="${ON_TRAP_RM_PROCESSING}"
-trap "${ON_TRAP}" EXIT INT TERM
+trapp "${RM_PROCESSING}"
echo ''
echo "\n\n" | ssh-keygen -q -P "${SSHPASS}" -p -f "${PATH_DECRYPTION_KEY}" > /dev/null