[Service]
Type=oneshot
User=plom
-ExecStart=/bin/sh -c 'encrypt_catgirl_logs'
+ExecStart=/bin/sh -cl 'encrypt_catgirl_logs'
host = irc.libera.chat
join = #plomtest
-sasl-plain = plomtest:REPLACE_WITH_SASL_PASSWORD
+sasl-plain = plomtest:REPLACE_WITH_IRC_PASSWORD
log
PATH_ENCRYPTED_LOGS="${HOME}/logs_encrypted"
PATH_ENCRYPTION_KEY="${HOME}/.plomlib/encrypt_with.pub"
TODAY="$(date +'%Y-%m-%d')"
-PATHS_LOGFILES="$(ls ${PATH_LOGS}/*/*/*.log)"
+set +e
+PATHS_LOGFILES="$(ls ${PATH_LOGS}/*/*/*.log 2> /dev/null)"
+set -e
if [ -z "${PATH_LOGFILES}" ]; then
echo "No log files present, so nothing to do."
exit 0
--- /dev/null
+. lib/constants_user # USERNAME
+
+chown_to_user() {
+ if [ ! -z "$@" ]; then
+ for _PATH in $@; do
+ chown -R "${USERNAME}:${USERNAME}" "${_PATH}"
+ done
+ fi
+}
--- /dev/null
+PATH_REL_ETC=etc
+PATH_ETC="/${PATH_REL_ETC}"
+
copy_dirtree() {
expect_n_args 3 99 'SOURCE_ROOT TARGET_ROOT TAG...' $@
- SOURCE_ROOT="$1"
- TARGET_ROOT="$2"
+ _SOURCE_ROOT="$1"
+ _TARGET_ROOT="$2"
shift 2
- TAGS="$@"
+ _TAGS="$@"
for TAG in ${TAGS}; do
- PATH_TAG="${SOURCE_ROOT}/${TAG}"
- if [ ! -d "${PATH_TAG}" ]; then
- continue
- fi
- cd "${PATH_TAG}"
- for PATH_REL in $(find . -type f,l); do
- PATH_TARGET="${TARGET_ROOT}"$(echo "${PATH_REL}" | cut -c2-)
- PATH_SOURCE=$(realpath "${PATH_REL}")
- DIRECTORY=$(dirname "${PATH_TARGET}")
- mkdir -p "${DIRECTORY}"
- cp -a "${PATH_SOURCE}" "${PATH_TARGET}"
+ _PATH_TAG="${_SOURCE_ROOT}/${_TAG}"
+ if [ ! -d "${_PATH_TAG}" ]; then
+ continue
+ fi
+ cd "${_PATH_TAG}"
+ for _PATH_REL in $(find . -type f,l); do
+ _PATH_TARGET="${_TARGET_ROOT}"$(echo "${_PATH_REL}" | cut -c2-)
+ _PATH_SOURCE=$(realpath "${_PATH_REL}")
+ _DIRECTORY=$(dirname "${_PATH_TARGET}")
+ mkdir -p "${_DIRECTORY}"
+ cp -av "${_PATH_SOURCE}" "${_PATH_TARGET}"
done
cd - > /dev/null
done
--- /dev/null
+. lib/copy_dirtree
+. lib/constants_etc # PATH_ETC, PATH_REL_ETC
+. lib/constants_repopaths # PATH_CONF
+
+ensure_etc_of_tags() {
+ _PATH_CONF_ETC="${PATH_CONF}/${PATH_REL_ETC}"
+ copy_dirtree "${_PATH_CONF_ETC}" "${PATH_ETC}" $@
+}
--- /dev/null
+. lib/chown_to_user
+. lib/constants_user # PATH_USER_HOME
+. lib/constants_repopaths # PATH_CONF
+
+ensure_homefiles_of_tags() {
+ _TO_CHOWN=$(copy_dirtree "${_PATH_CONF_HOME}" "${PATH_USER_HOME}" $@ | sed "s/.*' -> //g")
+ chown_to_user ${_TO_CHOWN}
+}
--- /dev/null
+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
+ cat "${_PATH_APTMARK_TAG}" | while read _LINE; do
+ if [ ! $(echo "${_LINE}" | cut -c1) = "#" ]; then
+ apt-get -y -o Dpkg::Options::="--force-confnew" install "${_LINE}"
+ fi
+ done
+ done
+}
+. lib/ensure_packages_of_tags
+
init_packages() {
echo "\nInstalling and/or keeping only what's required by us or Debian."
export DEBIAN_FRONTEND=noninteractive
comm -3 "${PATH_LIST_ALL_PACKAGES}" "${PATH_LIST_WHITE}" > "${PATH_LIST_BLACK}"
apt-mark auto `cat "${PATH_LIST_BLACK}"`
rm "${PATH_LIST_UNSORTED}" "${PATH_LIST_ALL_PACKAGES}" "${PATH_LIST_WHITE}" "${PATH_LIST_BLACK}"
-
- # 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
- cat "${PATH_APTMARK_TAG}" | while read LINE; do
- if [ ! $(echo "${LINE}" | cut -c1) = "#" ]; then
- apt-get -y -o Dpkg::Options::="--force-confnew" install "${LINE}"
- fi
- done
- done
+ # before purging, ensure tagged packages installed
+ ensure_packages_of_tags $@
apt -y --purge autoremove
apt -y dist-upgrade
}
+. lib/chown_to_user
. lib/copy_dirtree
. lib/constants_user # PATH_USER_HOME, USERNAME
+. lib/ensure_homefiles_of_tags
setup_users() {
_MIN_TAGS="$1"
echo "\nSetting up user ${USERNAME}."
adduser --disabled-password --gecos "" "${USERNAME}"
usermod -a -G sudo "${USERNAME}"
+ ensure_homefiles_of_tags ${_MIN_TAGS} ${_TAGS_USER}
copy_dirtree "${_PATH_CONF_HOME}" "${PATH_USER_HOME}" ${_MIN_TAGS} ${_TAGS_USER}
- mkdir -p "${_PATH_USER_BIN}"
+ _TO_CHOWN=$(mkdir -p "${_PATH_USER_BIN}" | sed 's/mkdir: created directory //g | head -1'
cd "${_PATH_USER_BIN}"
ln -s ../../.plomlib lib
+ chown_to_user "${_TO_CHOWN}"
cd - > /dev/null
- chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_HOME}"
}
. lib/init_packages
. lib/setup_users
-MIN_TAGS='all server catgirl caddy'
+. lib/ensure_etc_of_tags
+. lib/ensure_packages_of_tags
+
+PATH_DEP=/root/setup_server.finished
+if [ ! -f "${PATH_DEP}" ]; then
+ abort "No ${PATH_DEP} found – run setup_server.sh first!"
+fi
+expect_n_args 1 1 'IRC_PASSWORD' $@
+IRC_PASSWORD="$1"
+
+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
+ cat "${PATH_APTMARK_TAG}" | while read LINE; do
+ if [ ! $(echo "${LINE}" | cut -c1) = "#" ]; then
+ apt-get -y -o Dpkg::Options::="--force-confnew" install "${LINE}"
+ fi
+ done
+ done
+}
+
+ensure_packages_of_tags catgirl
+ensure_etc_of_tags catgirl
+copy_dirtree "${_PATH_CONF_HOME}" "${PATH_USER_HOME}" catgirl
+chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_HOME}"
-expect_n_args 4 4 'HOSTNAME, FQDN, IRC_PASSWORD, WEB_PASSWORD' $@
-HOSTNAME="$1"
-FQDN="$2"
-IRC_PASSWORD="$3"
-WEB_PASSWORD="$4"
-
-PATH_REL_ETC=etc
-PATH_CONF_ETC="${PATH_CONF}/${PATH_REL_ETC}"
-PATH_ETC="/${PATH_REL_ETC}"
-PATH_HOSTS="${PATH_ETC}/hosts"
-PATH_BORG_HOME=/home/borg
-PATH_CADDYFILE="${PATH_ETC}/caddy/Caddyfile"
-
-echo '\nPreparing caddy install.'
-apt -y install curl
-curl -1Lf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
-curl -1Lf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
-
-init_packages "${MIN_TAGS}"
-
-echo '\nSetting hostname and FQDN.'
-echo "${HOSTNAME}" > "${PATH_ETC}/hostname"
-hostname "${HOSTNAME}"
-echo '127.0.0.1 localhost.localdomain localhost' > "${PATH_HOSTS}"
-echo "$(determine_ip) ${FQDN} ${HOSTNAME}" >> "${PATH_HOSTS}"
-
-echo '\nAdapting /etc to our needs.'
-copy_dirtree "${PATH_CONF_ETC}" "${PATH_ETC}" ${MIN_TAGS}
-
-echo '\nSetting Berlin localtime.'
-ln -sf /usr/share/zoneinfo/Europe/Berlin "${PATH_ETC}/localtime"
-ntpdate-debian
-
-setup_users "${MIN_TAGS}" ''
-
-echo '\nMoving 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 '\nSetting up minimal borg user.'
-adduser --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 '\nEnabling the firewall.'
-systemctl enable --now nftables
+mkdir -p "${PATH_USER_SHARE_CATGIRL}"
echo '\nSetting up catgirl.'
+
sed -i "s/REPLACE_WITH_IRC_PASSWORD/${IRC_PASSWORD}/g" "${PATH_USER_HOME}/.config/catgirl/libera"
-mkdir -p "${PATH_USER_SHARE_CATGIRL}"
chown -R plom:plom "${PATH_USER_SHARE_CATGIRL}"
+
systemctl enable --now catgirl
-systemctl enable --now encrypt_catgirl_logs
+systemctl enable --now encrypt_catgirl_logs.timer
-echo "Adapting caddy's config and reloading it …"
-HASH=$(caddy hash-password --plaintext "${WEB_PASSWORD}")
-sed -i "s/REPLACE_WITH_HASH/${HASH}/g" "${PATH_CADDYFILE}"
-sed -i "s/REPLACE_WITH_FQDN/${FQDN}/g" "${PATH_CADDYFILE}"
-mkdir -p /var/www/dump/private /var/www/dump/public
-systemctl reload caddy
--- /dev/null
+#!/bin/sh
+set -e
+cd $(dirname "$0")
+. lib/constants_etc # PATH_ETC
+. lib/constants_ssh # PATH_REL_SSH, PATH_USER_SSH
+. lib/determine_ip
+. lib/ensure_etc_of_tags
+. lib/expect_n_args
+. lib/init_packages
+. lib/setup_users
+
+MIN_TAGS='all server caddy'
+
+expect_n_args 3 3 'HOSTNAME, FQDN, WEB_PASSWORD' $@
+HOSTNAME="$1"
+FQDN="$2"
+WEB_PASSWORD="$3"
+
+PATH_HOSTS="${PATH_ETC}/hosts"
+PATH_BORG_HOME=/home/borg
+PATH_CADDYFILE="${PATH_ETC}/caddy/Caddyfile"
+
+echo '\nPreparing caddy install.'
+PATH_CADDY_REPO='https://dl.cloudsmith.io/public/caddy/stable/gpg.key'
+apt -y install curl
+curl -1Lf "${PATH_CADDY_REPO}/gpg.key" | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
+curl -1Lf "${PATH_CADDY_REPO}/debian.deb.txt" | tee /etc/apt/sources.list.d/caddy-stable.list
+
+init_packages "${MIN_TAGS}"
+
+echo '\nSetting hostname and FQDN.'
+echo "${HOSTNAME}" > "${PATH_ETC}/hostname"
+hostname "${HOSTNAME}"
+echo '127.0.0.1 localhost.localdomain localhost' > "${PATH_HOSTS}"
+echo "$(determine_ip) ${FQDN} ${HOSTNAME}" >> "${PATH_HOSTS}"
+
+echo '\nAdapting /etc to our needs.'
+ensure_etc_of_tags ${MIN_TAGS}
+
+echo '\nSetting Berlin localtime.'
+ln -sf /usr/share/zoneinfo/Europe/Berlin "${PATH_ETC}/localtime"
+ntpdate-debian
+
+setup_users "${MIN_TAGS}" ''
+
+echo '\nMoving SSH data from root to user.'
+mkdir -p "${PATH_USER_SSH}"
+mv "/root/${PATH_REL_SSH}/authorized_keys" "${PATH_USER_SSH}/"
+chown_to_user "${PATH_USER_SSH}"
+
+echo '\nSetting up minimal borg user.'
+adduser --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 '\nEnabling the firewall.'
+systemctl enable --now nftables
+
+echo "Adapting caddy's config and reloading it …"
+HASH=$(caddy hash-password --plaintext "${WEB_PASSWORD}")
+sed -i "s/REPLACE_WITH_HASH/${HASH}/g" "${PATH_CADDYFILE}"
+sed -i "s/REPLACE_WITH_FQDN/${FQDN}/g" "${PATH_CADDYFILE}"
+mkdir -p /var/www/dump/private /var/www/dump/public
+systemctl reload caddy
+
+touch /root/setup_server.finished
--- /dev/null
+../../../bookworm/scripts/lib/chown_to_user
\ No newline at end of file
--- /dev/null
+../../../bookworm/scripts/lib/constants_etc
\ No newline at end of file
--- /dev/null
+../../../bookworm/scripts/lib/ensure_etc_of_tags
\ No newline at end of file
--- /dev/null
+../../../bookworm/scripts/lib/ensure_homefiles_of_tags
\ No newline at end of file
--- /dev/null
+../../../bookworm/scripts/lib/ensure_packages_of_tags
\ No newline at end of file
cd $(dirname "$0")
. lib/abort
. lib/abort_if_offline
+. lib/constants_etc # PATH_REL_ETC, PATH_ETC, PATH_REL_ETC
. lib/constants_repopaths # PATH_CONF
-. lib/constants_user # PATH_USER_HOME, USERNAME
-. lib/copy_dirtree
+. lib/constants_user # USERNAME
. lib/determine_ip
. lib/expect_min_n_args
. lib/init_packages
. lib/setup_users
-PATH_REL_ETC=etc
PATH_CONF_ETC="${PATH_CONF}/${PATH_REL_ETC}"
-PATH_ETC="/${PATH_REL_ETC}"
PATH_NETWORK_INTERFACES="${PATH_ETC}/network/interfaces"
PATH_REL_APT=apt
PATH_REL_APT_CONF=${PATH_REL_APT}/apt.conf.d
echo "$(determine_ip) ${SYSTEM_NAME}" >> /etc/hosts
echo "\nAdapting /etc to our needs."
-copy_dirtree "${PATH_CONF_ETC}" '/etc' ${TAGS_PACKAGES}
+ensure_etc_of_tags ${TAGS_PACKAGES}
echo "\nEnsuring our desired locale is available."
locale-gen
set -e
cd $(dirname "$0")
. lib/abort_if_not_user
+. lib/chown_to_user
. lib/constants_repopaths # PATH_CONF, PATH_SCRIPTS
. lib/constants_user # USERNAME
. lib/path_tmp_timestamped
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}"
+chown_to_user "${PATH_TMP_REPO}"
su -l "${USERNAME}" -c "/bin/sh ${PATH_TMP_REPO}/${PATH_REL_SETUP_SECRETS_USER} $1"
rm -rf "${PATH_TMP_REPO}"