--- /dev/null
+# so we can log in at all …
+openssh-server
+# necessary on _some_ vservers
+net-tools
+quota
+#
+
+++ /dev/null
-# so we can log in at all …
-openssh-server
-# necessary on _some_ vservers
-net-tools
-quota
-#
-
+. lib/prefixed_msg
abort() {
- echo "$1"
+
+ prefixed_msg "$1"
exit 1
}
. lib/abort_if_command_unknown
-
apt_get_edited() {
+
abort_if_command_unknown calc
_SEDS=\
printf '\n\r%s' "${_LINE}"
else
if [ "${_PREFIX}" != "${_LAST_PREFIX}" ]; then
- printf '\n\r# %s' "${_PREFIX}"
+ printf '\n\r# apt_get_edited: %s' "${_PREFIX}"
_LAST_PREFIX="${_PREFIX}"
fi
printf ' %s' "${_COMPRESSED_ITEM}"
check_finished_marker() {
_PATH_MARKER="${PATH_ROOT_FINISHEDS}/$1"
if [ ! -f "${_PATH_MARKER}" ]; then
- abort "# Missing dependency, did not find marker: ${_PATH_MARKER}"
+ abort "Missing dependency, did not find marker: ${_PATH_MARKER}"
fi
}
. lib/constants_user # USERNAME
. lib/copy_dirtrees_of_tags
. lib/minimize_installation
-
+. lib/prefixed_msg
core_setup() {
- _HOSTNAME="$1"
- _FQDN="$2"
- _EXTERNAL_IP="$3"
- _INSTALL_TAGS="$4"
-
- minimize_installation ${_INSTALL_TAGS}
-
- echo '# And now: dist-upgrade …'
- apt_get_edited '-q -q dist-upgrade'
-
- echo "# Setting up user: ${USERNAME}"
- adduser --quiet --disabled-password --gecos "" "${USERNAME}"
- usermod -a -G sudo "${USERNAME}"
-
- echo '# Copying over files, directories …'
- copy_dirtrees_of_tags ${_INSTALL_TAGS}
-
- echo '# Setting hostname …'
- hostnamectl hostname "${_HOSTNAME}"
-
- 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}"
- else
- sed -i 's/REPLACE_WITH_FQDN/'"${_FQDN}"'/g' "${_PATH_HOSTS}"
- sed -i "s/#REPLACE_WITH_EXTERNAL_IP/${_EXTERNAL_IP}/g" "${_PATH_HOSTS}"
- fi
- sed -i 's/REPLACE_WITH_HOSTNAME/'"${_HOSTNAME}"'/g' "${_PATH_HOSTS}"
-
- echo '# Syncing clock …'
- ntpdate-debian -s
+prefixed_msg_init '### core_setup: '
+prefixed_msg 'starting (performing standard installation setup steps)'
+
+_HOSTNAME="$1"
+_FQDN="$2"
+_EXTERNAL_IP="$3"
+_INSTALL_TAGS="$4"
+
+minimize_installation ${_INSTALL_TAGS}
+
+prefixed_msg 'And now: dist-upgrade …'
+apt_get_edited '-q -q dist-upgrade'
+
+prefixed_msg "Setting up user: ${USERNAME}"
+adduser --quiet --disabled-password --gecos "" "${USERNAME}"
+usermod -a -G sudo "${USERNAME}"
+
+prefixed_msg 'Copying over files, directories …'
+copy_dirtrees_of_tags ${_INSTALL_TAGS}
+
+prefixed_msg 'Setting hostname …'
+hostnamectl hostname "${_HOSTNAME}"
+
+prefixed_msg "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}"
+else
+ sed -i 's/REPLACE_WITH_FQDN/'"${_FQDN}"'/g' "${_PATH_HOSTS}"
+ sed -i "s/#REPLACE_WITH_EXTERNAL_IP/${_EXTERNAL_IP}/g" "${_PATH_HOSTS}"
+fi
+sed -i 's/REPLACE_WITH_HOSTNAME/'"${_HOSTNAME}"'/g' "${_PATH_HOSTS}"
+
+prefixed_msg 'Syncing clock …'
+ntpdate-debian -s
+
+prefixed_msg 'finished'
+prefixed_msg_exit
}
. lib/apt_get_edited
-
+. lib/prefixed_msg
ensure_packages_of_tags() {
- # Walk through the package names in ../aptmark/ files to ensure the respective
- # packages are installed.
- for _TAG in $@; do
- _PATH_APTMARK_TAG="../aptmark/${_TAG}"
- if [ ! -f "${_PATH_APTMARK_TAG}" ]; then
- continue
- fi
- _PACKAGES=$(cat "${_PATH_APTMARK_TAG}" | sed -E 's/#.*//g' | sed -z 's/\n/ /g' | sed 's/ */ /g' | cut -c 2-)
- echo -n "# For tag '${_TAG}', "
- if [ -z "${_PACKAGES}" ]; then
- echo "nothing to install."
- else
- echo "ensuring installation of: ${_PACKAGES}"
- apt_get_edited "-q -q -o Dpkg::Options::=--force-confnew install ${_PACKAGES}"
- fi
- done
- echo ''
+prefixed_msg_init '# ensure_packages_of_tags'
+prefixed_msg 'starting (walking through package names in ../aptmark/ files to ensure respective packages are installed'
+
+for _TAG in $@; do
+ _PATH_APTMARK_TAG="../aptmark/${_TAG}"
+ if [ ! -f "${_PATH_APTMARK_TAG}" ]; then
+ continue
+ fi
+ _PACKAGES=$(cat "${_PATH_APTMARK_TAG}" | sed -E 's/#.*//g' | sed -z 's/\n/ /g' | sed 's/ */ /g' | cut -c 2-)
+ prefixed_msg_no_nl "For tag '${_TAG}', "
+ if [ -z "${_PACKAGES}" ]; then
+ echo "nothing to install."
+ else
+ echo "ensuring installation of: ${_PACKAGES}"
+ apt_get_edited "-q -q -o Dpkg::Options::=--force-confnew install ${_PACKAGES}"
+ fi
+done
+prefixed_msg '\nfinished'
+prefixed_msg_exit
}
_ABORT_MSG="missing arguments (got $# instead of ${_N_MIN_ARGS})."
elif [ "$#" -gt "${_N_MAX_ARGS}" ]; then
shift "${_N_MAX_ARGS}"
- _ABORT_MSG="unexpected arguments beyond expected number (${_N_MAX_ARGS}): $@"
+ _ABORT_MSG="unexpected arguments beyond expected number (${_N_MAX_ARGS}): $@."
fi
if [ ! -z "${_ABORT_MSG}" ]; then
if [ ! -z "${_USAGE}" ]; then
- _ABORT_MSG="${_ABORT_MSG}\nExpected arguments: ${_USAGE}"
+ _ABORT_MSG="${_ABORT_MSG} Expected arguments: ${_USAGE}"
fi
abort "Aborting due to ${_ABORT_MSG}"
fi
. lib/copy_dirtrees_of_tags
. lib/ensure_packages_of_tags
-
+. lib/prefixed_msg
install_tags() {
+ prefixed_msg_init '# install_tags: '
+
_INSTALL_TAGS="$@"
- echo "# Installing packages and files for: ${_INSTALL_TAGS}"
+ prefixed_msg "Installing packages and files for: ${_INSTALL_TAGS}"
ensure_packages_of_tags ${_INSTALL_TAGS}
copy_dirtrees_of_tags ${_INSTALL_TAGS}
+ prefixed_msg_exit
}
. lib/apt_get_edited
. lib/ensure_packages_of_tags
-
+. lib/prefixed_msg
minimize_installation() {
- _INSTALL_TAGS="$@"
-
- echo '### minimize_installation: narrow system to what is required explicitly by us and Debian'
- _TOK_REQ=' required'
- _PATH_LIST_PREFIX=/tmp/list_
- _PATH_LIST_UNSORTED="${_PATH_LIST_PREFIX}unsorted"
- _PATH_LIST_WHITE="${_PATH_LIST_PREFIX}white"
- _PATH_LIST_ALL_PACKAGES="${_PATH_LIST_PREFIX}all_packages"
- _PATH_LIST_BLACK="${_PATH_LIST_PREFIX}black"
-
- if ! which calc > /dev/null; then
- echo '# not found calc, which is needed, so installing …'
- apt-get -y -q -q install calc > /dev/null
- fi
-
- echo "# Collect packages deemed '${_TOK_REQ}' by Debian: "
- dpkg-query -Wf '${Package} ${Priority}\n' | grep "${_TOK_REQ}" | cut -d' ' -f1 > "${_PATH_LIST_UNSORTED}"
- sort "${_PATH_LIST_UNSORTED}" > "${_PATH_LIST_WHITE}"
- echo $(cat "${_PATH_LIST_WHITE}")
-
- echo -n '# Collect installed packages outside this selection: '
- dpkg-query -Wf '${Package}\n' > "${_PATH_LIST_UNSORTED}"
- sort "${_PATH_LIST_UNSORTED}" > "${_PATH_LIST_ALL_PACKAGES}"
- comm -3 "${_PATH_LIST_ALL_PACKAGES}" "${_PATH_LIST_WHITE}" > "${_PATH_LIST_BLACK}"
- echo $(cat "${_PATH_LIST_BLACK}")
-
- echo '# apt-mark auto packages from diff …'
- apt-mark auto `cat "${_PATH_LIST_BLACK}"` > /dev/null
- rm "${_PATH_LIST_UNSORTED}" "${_PATH_LIST_ALL_PACKAGES}" "${_PATH_LIST_WHITE}" "${_PATH_LIST_BLACK}"
-
- echo '# install or mark as manually installed packages from our own selections …'
- ensure_packages_of_tags ${_INSTALL_TAGS}
-
- echo '# run autopurge to get rid of all unwanted packages …'
- apt_get_edited '-q -q autopurge'
+prefixed_msg_init '### minimize_installation: '
+_INSTALL_TAGS="$@"
+prefixed_msg "starting (narrow system to what is required explicitly by Debian and by us, as per these INSTALL_TAGS: ${_INSTALL_TAGS})"
+
+_TOK_REQ='required'
+_PATH_LIST_PREFIX=/tmp/list_
+_PATH_LIST_UNSORTED="${_PATH_LIST_PREFIX}unsorted"
+_PATH_LIST_WHITE="${_PATH_LIST_PREFIX}white"
+_PATH_LIST_ALL_PACKAGES="${_PATH_LIST_PREFIX}all_packages"
+_PATH_LIST_BLACK="${_PATH_LIST_PREFIX}black"
+
+if ! which calc > /dev/null; then
+ prefixed_msg 'not found calc, which is needed, so installing …'
+ apt-get -y -q -q install calc > /dev/null
+fi
+
+prefixed_msg_no_nl "collect packages deemed '${_TOK_REQ}' by Debian: "
+dpkg-query -Wf '${Package} ${Priority}\n' | grep " ${_TOK_REQ}" | cut -d' ' -f1 > "${_PATH_LIST_UNSORTED}"
+sort "${_PATH_LIST_UNSORTED}" > "${_PATH_LIST_WHITE}"
+echo $(cat "${_PATH_LIST_WHITE}")
+
+prefixed_msg_no_nl 'collect installed packages outside this selection: '
+dpkg-query -Wf '${Package}\n' > "${_PATH_LIST_UNSORTED}"
+sort "${_PATH_LIST_UNSORTED}" > "${_PATH_LIST_ALL_PACKAGES}"
+comm -3 "${_PATH_LIST_ALL_PACKAGES}" "${_PATH_LIST_WHITE}" > "${_PATH_LIST_BLACK}"
+echo $(cat "${_PATH_LIST_BLACK}")
+
+prefixed_msg 'apt-mark auto from diff …'
+apt-mark auto `cat "${_PATH_LIST_BLACK}"` > /dev/null
+rm "${_PATH_LIST_UNSORTED}" "${_PATH_LIST_ALL_PACKAGES}" "${_PATH_LIST_WHITE}" "${_PATH_LIST_BLACK}"
+
+prefixed_msg 'install or mark as manually installed packages from our own selections …'
+ensure_packages_of_tags ${_INSTALL_TAGS}
+
+prefixed_msg 'run autopurge to get rid of all unwanted packages …'
+apt_get_edited '-q -q autopurge'
+
+prefixed_msg 'finished'
+prefixed_msg_exit
}
--- /dev/null
+prefixed_msg_init() {
+ prefixed_msg_OLD_PREFIX=prefixed_msg_PREFIX
+ prefixed_msg_PREFIX="$1"
+}
+prefixed_msg_exit() {
+ prefixed_msg_PREFIX=prefixed_msg_OLD_PREFIX
+}
+prefixed_msg() {
+ printf '%s%s\n' "${prefixed_msg_PREFIX}" "$1"
+}
+prefixed_msg_no_nl() {
+ printf '%s%s' "${prefixed_msg_PREFIX}" "$1"
+}
. lib/constants_finished
-
+. lib/prefixed_msg
put_finished_marker() {
- echo "Marking as finished: $1"
+
+ prefixed_msg "Marking as finished: $1"
mkdir -p "${PATH_ROOT_FINISHEDS}"
touch "${PATH_ROOT_FINISHEDS}/$1"
}
. lib/constants_user # PATH_USER_HOME
. lib/expect_n_args
. lib/install_tags
+. lib/prefixed_msg
+
+prefixed_msg_init '##### setup_catgirl.sh: '
+prefixed_msg 'starting'
expect_n_args 1 1 'IRC_PASSWORD' $@
IRC_PASSWORD="$1"
install_tags catgirl
PATH_USER_CONF_CATGIRL="${PATH_USER_HOME}/.config/catgirl/libera"
-echo "\n# Writing provided password into ${PATH_USER_CONF_CATGIRL} …"
+prefixed_msg "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 …"
+prefixed_msg 'Activating catgirl tmux session service …'
systemctl enable --now catgirl
-echo "# Activating catgirl logs encryption service/timer …"
+prefixed_msg 'Activating catgirl logs encryption service/timer …'
systemctl enable --now encrypt_catgirl_logs.timer
+prefixed_msg 'finished'
+prefixed_msg_exit
. lib/check_finished_marker
. lib/expect_n_args
. lib/install_tags
+. lib/prefixed_msg
+
+prefixed_msg_init '##### setup_seedbox.sh: '
+prefixed_msg 'starting'
expect_n_args 0 0 '' $@
check_finished_marker 'setup_server'
install_tags seedbox
-echo '# Setting up upload user/directory …'
+prefixed_msg 'Setting up upload user/directory …'
adduser --quiet --system --home /home/upload upload
-echo '# Activating rtorrent tmux session service …'
-#systemctl enable --now rtorrent
+prefixed_msg 'Activating rtorrent tmux session service …'
+systemctl enable --now rtorrent
+
+prefixed_msg 'finished'
+prefixed_msg_exit
#!/bin/sh
set -e
cd $(dirname "$0")
+. lib/abort_if_command_unknown
. lib/constants_etc # PATH_ETC
. lib/constants_ssh # PATH_REL_SSH, PATH_USER_SSH
. lib/copy_dirtrees_of_tags
. lib/core_setup
. lib/expect_n_args
. lib/path_tmp_timestamped
+. lib/prefixed_msg
. lib/put_finished_marker
+prefixed_msg_init '##### setup_server.sh: '
+prefixed_msg 'starting (setting up basics of standard server)'
+
INSTALL_TAGS='all server user'
+abort_if_command_unknown gpg
expect_n_args 2 3 'CADDY_PASSWORD, HOSTNAME, [FQDN]' $@
CADDY_PASSWORD="$1"
HOSTNAME="$2"
PATH_CADDY_REPO='https://dl.cloudsmith.io/public/caddy/stable'
PATH_DUMP='/var/www/dump'
-echo -n '# Determining external IP …'
+prefixed_msg_no_nl 'Determining external IP …'
for _CANDIDATE in $(hostname -I); do
_START=$(echo ${_CANDIDATE} | cut -d'.' -f1)
if [ "$(echo -n ${_START} | wc -c)" -gt 3 ]; then # ignore IPv6
echo " it's: ${EXTERNAL_IP}"
if [ ! -z "${FQDN}" ]; then
- echo "# Ensuring provided FQDN ${FQDN} maps to it …"
+ prefixed_msg "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) …'
+prefixed_msg '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 …'
+prefixed_msg '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} …"
+prefixed_msg "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 …'
+prefixed_msg '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 …'
+prefixed_msg '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 …'
+prefixed_msg 'Enabling firewall …'
systemctl --quiet enable --now nftables
-echo "# Creating web-accessible directories …"
+prefixed_msg "Creating web-accessible directories …"
mkdir -p "${PATH_DUMP}/private" "${PATH_DUMP}/public"
-echo "# Adapting ${PATH_CADDYFILE} …"
+prefixed_msg "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 …"
+prefixed_msg "Restarting caddy …"
systemctl reload caddy
put_finished_marker 'setup_server'
+prefixed_msg 'finished'
+prefixed_msg_exit
-../../../bookworm/scripts/lib/minimize_installation
\ No newline at end of file
+../../../trixie/scripts/lib/minimize_installation
\ No newline at end of file
+++ /dev/null
-../../bookworm/aptmark/all
\ No newline at end of file
+++ /dev/null
-../../bookworm/aptmark/server_basic
\ No newline at end of file
+++ /dev/null
-../../bookworm/scripts/lib
\ No newline at end of file