#_preseed_V1
-# "Keymap to use"
-d-i keyboard-configuration/xkb-keymap select us
-
-# "Select a language"
+# "Choose language"
+# "Choose language"->"Select a language"->"Language:"
d-i debian-installer/language string en
+# "Choose language"->"Select your location"->"Country, territory or area:"
d-i debian-installer/country string US
+# "Choose language"->"Configure locales"->"Country to base default locale settings on:"
d-i debian-installer/locale string en_US.UTF-8
+# "Choose language"->"Configure locales"->"Additional locales:"
d-i localechooser/supported-locales multiselect
-# "Configure the clock"
-d-i clock-setup/ntp boolean false
-d-i time/zone select UTC
+# "Configure the keyboard"
+# "Configure the keyboard"->"Keymap to use:"
+d-i keyboard-configuration/xkb-keymap select us
+# "Detect and mount installation media"
+# "Load debconf preconfiguration file"
# "Load installer components from installation media"
+# "Load installer components from installation media"->"Installer components to load:"
d-i anna/choose_modules multiselect
# "Detect network hardware"
+
# "Configure the network"
+# "Configure the network"->"Waiting time (in seconds) for link detection:" (run once for each interface)
d-i netcfg/link_wait_timeout string 3
+# "Configure the network"->"Primary network interface:"
d-i netcfg/choose_interface select auto
-# d-i netcfg/wireless_essid string REPLACE_WITH_WIFI_ESSID
-# d-i netcfg/wireless_essid seen true
+# "Configure the network"->"Wireless network:"
d-i netcfg/wireless_show_essids select REPLACE_WITH_WIFI_ESSID
+### TODO: make expert installer skip the ESSID selection since we already know what we want, above attempt at least pre-selected the ESSID in the select list, following attempts helped nothing:
+###d-i netcfg/wireless_essid string REPLACE_WITH_WIFI_ESSID
+###d-i netcfg/wireless_essid seen true
+# "Configure the network"->"Wireless network type for wlp0s20f3:"
d-i netcfg/wireless_security_type select wpa
+# "Configure the network"->"WPA/WPA2 passphrase for wireless device wlp0s20f3:"
d-i netcfg/wireless_wpa string REPLACE_WITH_WIFI_PASSWORD
+# "Configure the network"->"Auto-configure networking?"
d-i netcfg/use_autoconfig boolean true
+# "Configure the network"->"Waiting time (in seconds) for link detection:"
+# "Configure the network"->"Hostname:"
d-i netcfg/get_hostname string unassigned-hostname
+# "Configure the network"->"Domain name:"
d-i netcfg/get_domain string unassigned-domain
# "Set up users and passwords"
+# "Set up users and passwords"->"Allow login as root?"
d-i passwd/root-login boolean true
+# "Set up users and passwords"->"Root password:"
d-i passwd/root-password password REPLACE_WITH_ROOT_PASSWORD
+# "Set up users and passwords"->"Re-enter password to verify:"
d-i passwd/root-password-again password REPLACE_WITH_ROOT_PASSWORD
+# "Set up users and passwords"->"Create a normal user account now?"
user-setup-udeb passwd/make-user boolean false
+# "Configure the clock"->"Set the clock using NTP?"
+d-i clock-setup/ntp boolean false
+# "Configure the clock"->"Select your time zone:"
+d-i time/zone select UTC
+
# "Detect disks"
+
# "Partition disks"
-# "Partition disks":"Partitioning method:"/"Guided - use entire disk and set up encrypted LVM"
+# "Partition disks"->"Partitioning method:"
d-i partman-auto/init_automatically_partition select 70some_device_crypto__________crypto
-# "Partition disks":"Select disk to partition:"/"/dev/nvme0n1 - 512.1 GB SAMSUNG MZVLB512HBJQ-000L7"
-#d-i partman-auto/disk string /dev/nvme0n1p3
-#d-i partman-auto/disk string /dev/nvme0n1
-#d-i partman-auto/select_disk select /var/lib/partman/devices/=dev=nvme0n1
-# "Partition disks":"Partitioning scheme:"/"All files in one partition (recommended for new users)"
+# "Partition disks"->"Select disk to partition:"
+### TODO: find how to skip this screen, following attempts failed:
+###d-i partman-auto/disk string /dev/nvme0n1p3
+###d-i partman-auto/disk string /dev/nvme0n1
+###d-i partman-auto/select_disk select /var/lib/partman/devices/=dev=nvme0n1
+# "Partition disks"->"Partitioning scheme:"
+d-i partman-auto/choose_recipe select custom-crypto
d-i partman-auto/expert_recipe string custom-crypto :: \
538 538 1075 free \
$iflabel{ gpt } \
$reusemethod{ } \
method{ swap } \
format{ } .
-d-i partman-auto/choose_recipe select custom-crypto
-# "Partition disks"/"Write the changes to disks and configure LVM?"
+# "Partition disks"->"Write the changes to disks and configure LVM?"
d-i partman-lvm/confirm boolean true
-# "Partition disks"/"Erasing data on /dev/nvme0n1p3:"
+# "Partition disks"->"Erasing data on /dev/nvme0n1p3"
d-i partman-auto-crypto/erase_disks boolean false
-# "Partition disks"/"Encryption passphrase:"
-# "Partition disks"/Name of the volume group for the new system:"
+# "Partition disks"->"Encryption passphrase:"
+# "Partition disks"->"Re-enter passphrase to verify:"
+# "Partition disks"->"Name of the volume group for the new system:"
d-i partman-auto-lvm/new_vg_name string plomvg
-# "Partition disks"/"Amount of volume group to use for guided partitioning:"
+# "Partition disks"->"Amount of volume group to use for guided partitioning:"
d-i partman-auto-lvm/guided_size string max
-# "Partition disks"/"Finish partitioning and write changes to disk"
+# "Partition disks"/"This is an overview of your currently configured partitions and …"
+### TODO: find whatever auto-selects "Finish partitioning and write changes to disk"
# "Partition disks"/"Write the changes to disks?"
d-i partman/confirm boolean true
# "Install the base system"
+# "Install the base system"->"Kernel to install:"
d-i base-installer/kernel/image string linux-image-amd64
+# "Install the base system"->"Drivers to include in the initrd:"
d-i base-installer/initramfs-tools/driver-policy most
-#d-i base-installer/install-recommends boolean false
+
+d-i base-installer/install-recommends boolean false
# "Configure the package manager"
+# "Configure the package manager"->"Use a network mirror?"
d-i apt-setup/use_mirror boolean true
+# "Configure the package manager"->"Protocol for file downloads:"
d-i mirror/protocol string http
-d-i mirror/http/proxy string
-# "Configure the package manager"/"Debian archive mirror country:"->"United States"
+# "Configure the package manager"->"Debian archive mirror country:"
d-i mirror/http/countries select US
-#d-i mirror/http/countries select United States
-d-i mirror/http/countries seen true
-# "Configure the package manager"/"Debian archive mirror:"
+# "Configure the package manager"->"Debian archive mirror:"
d-i mirror/http/mirror select deb.debian.org
-d-i apt-setup/enable-source-repositories true
+# "Configure the package manager"->"HTTP proxy information (blank for none):"
+d-i mirror/http/proxy string
+# "Configure the package manager"->"Use non-free firmware?"
d-i apt-setup/non-free-firmware boolean true
+# "Configure the package manager"->"Use non-free software?"
d-i apt-setup/non-free boolean true
-d-i apt-setup/contrib boolean true
+# "Configure the package manager"->"Enable source repositories in APT?"
+d-i apt-setup/enable-source-repositories true
+# "Configure the package manager"->"Services to use:"
d-i apt-setup/services-select multiselect security, updates
+#d-i mirror/http/countries seen true
+#d-i apt-setup/contrib boolean true
# "Select and install software"
-# "Configuring discover":"Updates management on this system:"/"No automatic updates"
+# "Configuring discover"->"Updates management on this system:"
d-i pkgsel/update-policy select No automatic updates
-# "Configuring popularity-contest":"Participate in the package usage survey?"
+# "Configuring popularity-contest"->"Participate in the package usage survey?"
d-i popularity-contest/participate boolean false
-# "Software selection":"Choose software to install"/("Debian desktop environment" etc.)
+# "Software selection":"Choose software to install:"
d-i pkgsel/run_tasksel boolean false
-d-i pkgsel/include string git
d-i pkgsel/upgrade select none
# "Install the GRUB boot loader"
+# "Install the GRUB boot loader"->"Force GRUB installation to the EFI removable media path?"
d-i grub-installer/force-efi-extra-removable false
+# "Install the GRUB boot loader"->"Update NVRAM variables to automatically boot into Debian?"
d-i grub-installer/update-nvram true
+# "Install the GRUB boot loader"->"Run os-prober automatically to detect and booth other OSes?"
d-i grub-installer/enable_os_prober_otheros_no false
# "Finish the installation"
+# "Finish the installation"->"Is the system clock set to UTC?"
clock-setup clock-setup/utc boolean true
+# "Finish the installation"->"Please choose <Continue> to reboot."
d-i finish-install/reboot_in_progress note
# config script
+d-i pkgsel/include string git,ca-certificates
d-i preseed/late_command string echo -e "#!/usr/bin/sh\nset -e\ngit clone https://plomlompom.com/repos/clone/config\nconfig/testing/scripts/setup_desktop.sh t490s" > /target/root/run.sh && chmod a+x /target/root/run.sh
if [ ! -z "${_LAST_PREFIX}" ]; then
echo ''
fi
- echo -n "\r· ${_PREFIX}"
+ echo -n "\r# ${_PREFIX}"
fi
_IDX_ITEM=$(echo "${_WHITESPACED}" | cut -d' ' -f2)
_CUTOFF=$(echo "${_WHITESPACED}" | cut -d' ' -f3)
if [ ! -z "${_LAST_PREFIX}" ]; then
echo ''
fi
- echo "\r# ${_LINE}"
+ echo "\r ${_LINE}"
_LAST_PREFIX=''
fi
done
_EXTERNAL_IP="$3"
_INSTALL_TAGS="$4"
- echo "· Installing and/or keeping only what's required by us or Debian."
+ echo "# Installing and/or keeping only what's required by us or Debian."
# mark non-requireds auto
_PATH_LIST_PREFIX=/tmp/list_
# before purging, ensure tagged packages installed
ensure_packages_of_tags ${_INSTALL_TAGS}
- echo '· Autoremove and purge …'
+ echo '# Autoremove and purge …'
apt_get_edited '-q -q autopurge'
- echo '· And now: dist-upgrade …'
+ echo '# And now: dist-upgrade …'
apt_get_edited '-q -q dist-upgrade'
- echo "· Setting up user: ${USERNAME}"
+ echo "# Setting up user: ${USERNAME}"
adduser --quiet --disabled-password --gecos "" "${USERNAME}"
usermod -a -G sudo "${USERNAME}"
- echo '· Copying over files, directories …'
+ echo '# Copying over files, directories …'
copy_dirtrees_of_tags ${_INSTALL_TAGS}
- echo '· Setting hostname …'
+ echo '# Setting hostname …'
echo "${_HOSTNAME}" > "${PATH_ETC}/hostname"
hostname "${_HOSTNAME}"
- echo "· Adapting ${_PATH_HOSTS} …"
+ echo "# Adapting ${_PATH_HOSTS} …"
_PATH_HOSTS="${PATH_ETC}/hosts"
if [ -z "${_FQDN}" ]; then
sed -i 's/REPLACE_WITH_FQDN/REPLACE_WITH_HOSTNAME.local REPLACE_WITH_HOSTNAME.localdomain/g' "${_PATH_HOSTS}"
fi
sed -i 's/REPLACE_WITH_HOSTNAME/'"${_HOSTNAME}"'/g' "${_PATH_HOSTS}"
- echo '· Syncing clock …'
+ echo '# Syncing clock …'
ntpdate-debian -s
}
for _PACKAGE in ${_PACKAGES}; do
_PROCESSED="${_PROCESSED} ${_PACKAGE}"
_NTH=$(echo "${_PROCESSED}" | wc -w)
- echo -n "\rFor tag '${_TAG}', ensuring installation of (${_NTH}/${_N_PACKAGES}):${_PROCESSED}"
+ echo -n "\r# For tag '${_TAG}', ensuring installation of (${_NTH}/${_N_PACKAGES}):${_PROCESSED}"
apt-get -y -o Dpkg::Options::="--force-confnew" install "${_PACKAGE}" > /dev/null
done
done
install_tags catgirl
PATH_USER_CONF_CATGIRL="${PATH_USER_HOME}/.config/catgirl/libera"
-echo "\n· Writing provided password into ${PATH_USER_CONF_CATGIRL} …"
+echo "\n# Writing provided password into ${PATH_USER_CONF_CATGIRL} …"
sed -i "s/REPLACE_WITH_IRC_PASSWORD/${IRC_PASSWORD}/g" "${PATH_USER_CONF_CATGIRL}"
-echo "· Activating catgirl tmux session service …"
+echo "# Activating catgirl tmux session service …"
systemctl enable --now catgirl
-echo "· Activating catgirl logs encryption service/timer …"
+echo "# Activating catgirl logs encryption service/timer …"
systemctl enable --now encrypt_catgirl_logs.timer
check_finished_marker 'setup_server'
install_tags seedbox
-echo '· Setting up upload user/directory …'
+echo '# Setting up upload user/directory …'
adduser --quiet --system --home /home/upload upload
-echo '· Activating rtorrent tmux session service …'
+echo '# Activating rtorrent tmux session service …'
#systemctl enable --now rtorrent
PATH_CADDY_REPO='https://dl.cloudsmith.io/public/caddy/stable'
PATH_DUMP='/var/www/dump'
-echo -n '· Determining IP …'
-EXTERNAL_IP=$(hostname -I | cut -d' ' -f1)
+echo -n '# Determining external IP …'
+for _CANDIDATE in $(hostname -I); do
+ _START=$(echo ${_CANDIDATE} | cut -d'.' -f1)
+ if [ "$(echo -n ${_START} | wc -c)" -gt 3 ]; then
+ continue
+ fi
+ if [ "${_START}" = "127" -o "${_START}" = "192" -o "${_START}" = "172" ]; then
+ continue
+ fi
+ EXTERNAL_IP="${_CANDIDATE}"
+ break
+done
echo " it's: ${EXTERNAL_IP}"
if [ ! -z "${FQDN}" ]; then
- echo "· Ensuring provided FQDN ${FQDN} maps to it …"
+ echo "# Ensuring provided FQDN ${FQDN} maps to it …"
IP_BY_DNS=$(getent ahostsv4 "${FQDN}" | head -1 | cut -d' ' -f1)
if [ ! "${IP_BY_DNS}" = "${EXTERNAL_IP}" ]; then
abort "DNS mapping provided FQDN '${FQDN}' to ${IP_BY_DNS} rather than this system's external IP ${EXTERNAL_IP}."
fi
fi
-echo '· Ensure we have curl (for caddy installation preparation) …'
+echo '# Ensure we have curl (for caddy installation preparation) …'
apt-get -y install curl > /dev/null
PATH_CURL_ERROR="$(path_tmp_timestamped curl_error)"
-echo '· Retrieve caddy repo key …'
+echo '# Retrieve caddy repo key …'
set +e
curl -1Lf "${PATH_CADDY_REPO}/gpg.key" 2> "${PATH_CURL_ERROR}" | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
RESULT="$?"
exit 1
fi
PATH_APT_CADDY_REPO='/etc/apt/sources.list.d/caddy-stable.list'
-echo "· Adding caddy repo to ${PATH_APT_CADDY_REPO} …"
+echo "# Adding caddy repo to ${PATH_APT_CADDY_REPO} …"
curl -1LfsS "${PATH_CADDY_REPO}/debian.deb.txt" > "${PATH_APT_CADDY_REPO}"
core_setup "${HOSTNAME}" "${FQDN}" "${EXTERNAL_IP}" "${INSTALL_TAGS}"
-echo '· Moving SSH data from root to user …'
+echo '# Moving SSH data from root to user …'
mkdir -p "${PATH_USER_SSH}"
mv "/root/${PATH_REL_SSH}/authorized_keys" "${PATH_USER_SSH}/"
chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_SSH}"
-echo '· Setting up minimal borg user …'
+echo '# Setting up minimal borg user …'
adduser --quiet --system --home "${PATH_BORG_HOME}" --shell /bin/sh borg
cp -a "${PATH_USER_SSH}" "${PATH_BORG_HOME}/"
chown -R borg:nogroup "${PATH_BORG_HOME}/${PATH_REL_SSH}"
-echo '· Enabling firewall …'
+echo '# Enabling firewall …'
systemctl --quiet enable --now nftables
-echo "· Creating web-accessible directories …"
+echo "# Creating web-accessible directories …"
mkdir -p "${PATH_DUMP}/private" "${PATH_DUMP}/public"
-echo "· Adapting ${PATH_CADDYFILE} …"
+echo "# Adapting ${PATH_CADDYFILE} …"
CADDY_PW_HASH=$(caddy hash-password --plaintext "${CADDY_PASSWORD}")
if [ -z "${FQDN}" ]; then
ADDRESS_TO_CADDY="${EXTERNAL_IP}"
sed -i 's|REPLACE_WITH_HASH|'"${CADDY_PW_HASH}"'|g' "${PATH_CADDYFILE}"
sed -i 's/REPLACE_WITH_FQDN/'"${ADDRESS_TO_CADDY}"'/g' "${PATH_CADDYFILE}"
-echo "· Restarting caddy …"
+echo "# Restarting caddy …"
systemctl reload caddy
put_finished_marker 'setup_server'
copy_and_unmount_secrets 'in'
export BORG_PASSPHRASE="${PASSPHRASE}"
-echo "\n· Setting up ~/.ssh …"
+echo "\n# Setting up ~/.ssh …"
cp -a "${PATH_SECRETS_SSH}" "${PATH_USER_SSH}"
eval $(ssh-agent)
stty -echo
stty echo
trapp
-echo "\n\n· Setting up ~/repos …"
+echo "\n\n# Setting up ~/repos …"
REPOS_SITE_LOGIN="${USERNAME}@${REPOS_SITE_DOMAIN}"
mkdir "${PATH_REPOS}"
cd "${PATH_REPOS}"
done
cd - > /dev/null
-echo "\n· Setting up borg and pull in ~/org …"
+echo "\n# Setting up borg and pull in ~/org …"
cd "${PATH_SECRETS_BORGKEYS}"
ls -1 | while read _FILENAME; do
"${NAME_BORGAPP}" claim "${_FILENAME}"
done
cd -
-retry_until 2 '' "${NAME_BORGAPP} orgpull" "echo '· Aborting due to unexpected ${NAME_BORGAPP} error.'" '' 'direct'
+retry_until 2 '' "${NAME_BORGAPP} orgpull" "echo '# Aborting due to unexpected ${NAME_BORGAPP} error.'" '' 'direct'
echo "${_OUTPUT}"
set -e
cd $(dirname "$0")
. lib/abort_if_command_unknown
-. lib/constants_ssh # PATH_USER_SSH
+. lib/constants_ssh # PATH_REL_SSH, PATH_USER_SSH
. lib/expect_n_args
. lib/path_tmp_timestamped
. lib/trapp
SERVER="$1"
ROOT_LOGIN_PW="$2"
if [ ! -z "${ROOT_LOGIN_PW}" ]; then
- echo '· Provided ROOT_LOGIN_PW, so will later try to log-in with that and place local key file …'
+ echo '# Provided ROOT_LOGIN_PW, so will later try to log-in with that and place local key file …'
abort_if_command_unknown sshpass
fi
-echo "· In ${PATH_KNOWN_HOSTS}, removing previous entry for ${SERVER} if found …"
+echo "# In ${PATH_KNOWN_HOSTS}, removing previous entry for ${SERVER} if found …"
ssh-keygen -f "${PATH_KNOWN_HOSTS}" -R "${SERVER}" > /dev/null
-echo '· Scanning server for new key to add to file …'
+echo '# Scanning server for new key to add to file …'
PATH_LOG_KEYSCAN_STDERR=$(path_tmp_timestamped)
CMD_RM_LOG="rm ${PATH_LOG_KEYSCAN_STDERR}"
set +e
set -e
trapp "${CMD_RM_LOG}"
if [ "${RESULT}" != "0" ]; then
- echo "· ERROR: For some reason ssh-keyscan returned non-zero exit code, here's the stderr log:"
+ echo "# ERROR: For some reason ssh-keyscan returned non-zero exit code, here's the stderr log:"
cat "${PATH_LOG_KEYSCAN_STDERR}"
exit "${RESULT}"
fi
SSH_TARGET="root@${SERVER}"
if [ ! -z "${ROOT_LOGIN_PW}" ]; then
- echo '· Logging in with provided password to place local key file …'
+ echo '# Logging in with provided password to place local key file …'
SSHPASS="${ROOT_LOGIN_PW}" sshpass -e scp "${PATH_USER_SSH}/id_rsa.pub" "root@${SERVER}:~/${PATH_REL_SSH}/authorized_keys"
fi
CMD_SSH="ssh ${SSH_TARGET}"
CMD_STTY_ECHO='stty echo'
-echo '· On server, asking for new root password …'
+echo '# On server, asking for new root password …'
stty echonl
stty -echo
trapp "${CMD_STTY_ECHO}"
${CMD_STTY_ECHO}
trapp
-echo '· On server, updating package database …'
+echo '# On server, updating package database …'
${CMD_SSH} 'apt-get -q -q update'
-echo '· On server, installing git …'
+echo '# On server, installing git …'
${CMD_SSH} 'DEBIAN_FRONTEND=noninteractive apt-get -y install git > /dev/null'
-echo '· On server, pulling config repo …'
+echo '# On server, pulling config repo …'
${CMD_SSH} "git clone -q ${URL_REPO_CLONE}"
-echo "· Server ready, log in with: ssh root@${SERVER}"
+echo "# Server ready, log in with: ssh root@${SERVER}"
fi
}
-echo "\n· Upgrading to testing …"
+echo "\n# Upgrading to testing …"
./from_older_upgrade.sh
# NB: This needs to come before steps potentially overwriting /etc/network/interfaces.
apt-get -y install network-manager > /dev/null
if [ "$(nmcli -f TYPE conn | grep 'wifi' | wc -l)" = "0" ]; then
- echo "\n· Checking for existing wifi config in ${PATH_NETWORK_INTERFACES} …"
+ echo "\n# Checking for existing wifi config in ${PATH_NETWORK_INTERFACES} …"
adopt_wifi_connection
else
- echo "\n· Already know wifi connection, nothing to add …"
+ echo "\n# Already know wifi connection, nothing to add …"
fi
core_setup "${SYSTEM_NAME}" "" "" "${INSTALL_TAGS}"
-echo '\n· Ensuring our desired locale is available …'
+echo '\n# Ensuring our desired locale is available …'
locale-gen
-echo '\n· Final user setup …'
+echo '\n# Final user setup …'
adduser --quiet plom plugdev # so user may use pmount
passwd "${USERNAME}"
PATH_REPO="$(dirname ${PATH_CONF})"
PATH_TMP_REPO="$(path_tmp_timestamped configrepo)"
-echo "· Setting up config repo copy for user at ${PATH_TMP_REPO} …"
+echo "# Setting up config repo copy for user at ${PATH_TMP_REPO} …"
cp -a "${PATH_REPO}" "${PATH_TMP_REPO}"
chown -R "${USERNAME}:${USERNAME}" "${PATH_TMP_REPO}"
su -l "${USERNAME}" -c "/bin/sh ${PATH_TMP_REPO}/${PATH_REL_SETUP_SECRETS_USER} $1"
apt-get -q -q -y install calc > /dev/null
apt_update_to_full_upgrade() {
- echo '· Updating package database …'
+ echo '# Updating package database …'
apt_get_edited '-q -q update'
- echo '· Soft-upgrading …'
+ echo '# Soft-upgrading …'
apt_get_edited '-q -q -o Dpkg::Options::=--force-confnew upgrade'
- echo '· Full-upgrading …'
+ echo '# Full-upgrading …'
apt_get_edited '-q -q -o Dpkg::Options::=--force-confnew full-upgrade'
}
PATH_CONF_MIN_DEPS="${PATH_COPY_TAG}${PATH_ETC_APT_CONF}/99_minimize_dependencies"
-echo "· Copying over ${PATH_CONF_MIN_DEPS} …"
+echo "# Copying over ${PATH_CONF_MIN_DEPS} …"
cp "${PATH_CONF_MIN_DEPS}" "${PATH_ETC_APT_CONF}/"
apt_update_to_full_upgrade
PATH_CONF_SOURCES="${PATH_COPY_TAG}${PATH_ETC_APT}/sources.list"
-echo "· Copying over ${PATH_CONF_SOURCES} …"
+echo "# Copying over ${PATH_CONF_SOURCES} …"
cp "${PATH_CONF_SOURCES}" "${PATH_ETC_APT}/"
apt_update_to_full_upgrade
-echo '· Purging …'
+echo '# Purging …'
apt_get_edited '-q -q autopurge'