#!/bin/sh
set -e
cd $(dirname "$0")
-. lib/constants_server
+. lib/constants_ssh # PATH_USER_SSH
. lib/expect_min_n_args
-PATH_KNOWN_HOSTS="${PATH_SSH}/known_hosts"
+PATH_KNOWN_HOSTS="${PATH_USER_SSH}/known_hosts"
expect_min_n_args 1 '(server)' "$@"
SERVER="$1"
+++ /dev/null
-PATH_REL_SSH=.ssh
-PATH_SSH="${HOME}/${PATH_REL_SSH}"
--- /dev/null
+. lib/constants_user
+PATH_REL_SSH=.ssh
+PATH_USER_SSH="${PATH_USER_HOME}/${PATH_REL_SSH}"
set -e
cd $(dirname "$0")
. lib/constants_repopaths # PATH_CONF
-. lib/constants_server # PATH_REL_SSH, PATH_SSH
+. lib/constants_ssh # PATH_REL_SSH, PATH_USER_SSH
. lib/constants_user # USERNAME
. lib/copy_dirtree
. lib/determine_ip
PATH_REL_ETC=etc
PATH_CONF_ETC="${PATH_CONF}/${PATH_REL_ETC}"
-PATH_USER_SSH="${PATH_USER_HOME}/${PATH_REL_SSH}"
PATH_ETC="/${PATH_REL_ETC}"
PATH_HOSTS="${PATH_ETC}/hosts"
setup_users "${MIN_TAGS}" ""
mkdir -p "${PATH_USER_SSH}"
-mv "${PATH_SSH}/authorized_keys" "${PATH_USER_SSH}/"
+mv "/root/${PATH_REL_SSH}/authorized_keys" "${PATH_USER_SSH}/"
chown -R "${USERNAME}:${USERNAME}" "${PATH_USER_SSH}"
# # Enable firewall.
--- /dev/null
+../../.plomlib.sh
\ No newline at end of file
#!/bin/sh
set -e
+cd $(dirname "$0")
+. lib/constants_borg
+. lib/get_passphrase
+. lib/path_tmp_timestamped
-. "${HOME}/.plomlib.sh/get_passphrase"
-. "${HOME}/.plomlib.sh/path_tmp_timestamped"
-
-PATH_BORGKEYS="${HOME}/.config/borg/keys"
+PATH_CONF_SECURITY="${PATH_BORG_CONF}/security"
NAME_REPO=borg
NAME_ARCHIVE=orgdir
if [ "$1" = "orgpull" ]; then
PATH_PIPE="$(path_tmp_timestamped 'pipe')"
mkfifo "${PATH_PIPE}"
- ls -1 "${PATH_BORGKEYS}/" > "${PATH_PIPE}" &
+ ls -1 "${PATH_CONF_SECURITY}/" > "${PATH_PIPE}" &
while read FILENAME; do
- NAME_SERVER=$(echo "${FILENAME}" | sed 's/.*@//')
+ NAME_SERVER="$(echo ${FILENAME} | cut -d'/' -f3 | cut -d'@' -f2)"
if ping -c1 -W2 "${NAME_SERVER}" > /dev/null 2>&1; then
break
else
done < "${PATH_PIPE}"
rm "${PATH_PIPE}"
REPO="${NAME_SERVER}:${NAME_REPO}"
+ echo "Checking out ${REPO} …"
while true; do
if [ -z "${BORG_PASSPHRASE}" ]; then
- printf 'Passhrapse:'
+ printf 'Passhrase:'
export BORG_PASSPHRASE="$(get_passphrase)"
echo ''
fi
echo "Pulling archive: ${ARCHIVE}"
cd /
borg extract --verbose "${REPO}::${ARCHIVE}"
- break
fi
--- /dev/null
+#!/bin/sh
+set -e
+
+cd $(dirname "$0")
+. lib/abort_if_exists
+. lib/constants_borg # PATH_BORG_CONF
+. lib/constants_secrets # PATH_REL_SECRETS, PATH_SECRETS
+. lib/constants_ssh # PATH_USER_SSH
+. lib/constants_user # USERNAME
+. lib/mount_secrets # mount_secrets, copy_and_unmount_secrets
+
+abort_if_exists "${PATH_SECRETS}"
+echo "Collecting new ${PATH_REL_SECRETS}."
+mkdir "${PATH_SECRETS}"
+cp -a "${PATH_BORG_CONF}" "${PATH_SECRETS}/"
+cp -a "${PATH_USER_SSH}" "${PATH_SECRETS_SSH}"
+echo "secrets file, last update: $(whoami)/$(hostname) at $(date)" > "${PATH_SECRETS}/info"
+
+mount_secrets # sets PATH_MOUNTED_SECRETS
+SUFFIX_OLD=.old
+PATH_REL_SECRETS_OLD="${PATH_REL_SECRETS}${SUFFIX_OLD}"
+PATH_MOUNTED_SECRETS_OLD="${PATH_MOUNTED_SECRETS}${SUFFIX_OLD}"
+if [ -d "${PATH_MOUNTED_SECRETS}" ]; then
+ echo "Drive already has ${PATH_REL_SECRETS}, moving to ${PATH_REL_SECRETS_OLD}."
+ rm -rf "${PATH_MOUNTED_SECRETS_OLD}"
+ mv "${PATH_MOUNTED_SECRETS}" "${PATH_MOUNTED_SECRETS_OLD}"
+fi
+copy_and_unmount_secrets 'out'
--- /dev/null
+../../../scripts/lib/abort
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/abort_if_exists
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/constants_borg
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/constants_secrets
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/constants_ssh
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/constants_user
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/expect_min_n_args
\ No newline at end of file
--- /dev/null
+../../../scripts/lib/mount_secrets
\ No newline at end of file
#!/bin/sh
set -e
cd $(dirname "$0")
-
-. lib/constants_user # USERNAME
. lib/abort
. lib/abort_if_exists
. lib/abort_if_not_user
. lib/abort_if_offline
+. lib/constants_borg # PATH_BORG_CONF, PATH_REL_BORG_CONF
+. lib/constants_secrets # PATH_SECRETS
+. lib/constants_ssh # PATH_USER_SSH
+. lib/constants_user # USERNAME
+. lib/mount_secrets # mount_secrets, copy_and_unmount_secrets
PATH_REPOS="${HOME}/repos"
-PATH_BORGKEYS="${HOME}/.config/borg/keys"
-PATH_USER_SSH="${HOME}/.ssh"
-FILENAME_KEY=id_rsa
-PATH_PRIVATE_KEY="${PATH_USER_SSH}/${FILENAME_KEY}"
-PATH_KNOWN_HOSTS="${PATH_USER_SSH}/known_hosts"
REPOS_SITE_DOMAIN=plomlompom.com
REMOTE_PATH_REPOS=/var/repos
NAME_BORGAPP=borgplom
-abort_if_not_user "${USERNAME}"
abort_if_offline
+abort_if_not_user "${USERNAME}"
+abort_if_exists "${PATH_SECRETS}"
abort_if_exists "${PATH_USER_SSH}"
abort_if_exists "${PATH_REPOS}"
-abort_if_exists "${PATH_BORGKEYS}"
+abort_if_exists "${PATH_BORG_CONF}"
+
+mount_secrets # sets PASSPHRASE
+copy_and_unmount_secrets 'in'
+export BORG_PASSPHRASE="${PASSPHRASE}"
echo "\nSetting up ~/.ssh"
-PATH_PUBLIC_KEY="${PATH_PRIVATE_KEY}.pub"
-mkdir -p "${PATH_USER_SSH}"
-cp "${PATH_SECRETS}/${FILENAME_KEY}" "${PATH_PRIVATE_KEY}"
-while [ ! -s "${PATH_PUBLIC_KEY}" ]; do
- stty -echo
- set +e
- ssh-keygen -y -f "${PATH_PRIVATE_KEY}" > "${PATH_PUBLIC_KEY}"
- set -e
- stty echo
-done
+cp -a "${PATH_SECRETS_SSH}" "${PATH_USER_SSH}"
eval $(ssh-agent)
while true; do
echo ''
echo "\n\nSetting up ~/repos"
REPOS_SITE_LOGIN="${USERNAME}@${REPOS_SITE_DOMAIN}"
-ssh-keyscan "${REPOS_SITE_DOMAIN}" >> "${PATH_KNOWN_HOSTS}"
mkdir "${PATH_REPOS}"
cd "${PATH_REPOS}"
ssh ${REPOS_SITE_LOGIN} "cd ${REMOTE_PATH_REPOS} && ls -1" | while read REPO_NAME; do
cd -
echo "\nSetting up borg and pull in ~/org"
-PATH_TARED_KEYS=borg_keyfiles
-mkdir -p "${PATH_BORGKEYS}"
-tar xf "${PATH_SECRETS}/${PATH_TARED_KEYS}.tar"
-mv "${PATH_TARED_KEYS}"/* "${PATH_BORGKEYS}/"
-rmdir "${PATH_TARED_KEYS}"
-ls -1 "${PATH_BORGKEYS}/" | while read FILENAME; do
- SERVER_NAME=$(echo "${FILENAME}" | sed 's/.*@//')
- set +e
- ssh-keyscan "${SERVER_NAME}" >> "${PATH_KNOWN_HOSTS}"
- set -e
- echo ''
-done
+PATH_PARENT_BORG_CONF="$(dirname ${PATH_BORG_CONF})"
+mkdir -p "${PATH_BORG_CONF}"
+cp -a "${PATH_SECRETS}/${PATH_REL_BORG_CONF}" "${PATH_PARENT_BORG_CONF}/"
while true; do
set +e
"${NAME_BORGAPP}" orgpull
+. lib/abort
+
abort_if_exists() {
if [ -e "$1" ]; then
abort "$1 already exists."
fi
}
-
--- /dev/null
+PATH_REL_BORG_CONF=borg
+PATH_BORG_CONF="${HOME}/.config/${PATH_REL_BORG_CONF}"
--- /dev/null
+. lib/constants_user
+PATH_MEDIA=/media
+PATH_REL_SECRETS=.secrets
+PATH_SECRETS="${PATH_USER_HOME}/${PATH_REL_SECRETS}"
+PATH_SECRETS_SSH="${PATH_SECRETS}/ssh"
--- /dev/null
+../../../bookworm/scripts/lib/constants_ssh
\ No newline at end of file
--- /dev/null
+. lib/constants_secrets # PATH_MEDIA, PATH_REL_SECRETS
+. lib/expect_min_n_args
+. lib/get_passphrase
+. lib/path_tmp_timestamped
+
+mount_secrets() {
+ expect_min_n_args 1 "(device name, e.g. 'sda')" "$@"
+ SECRETS_DEV=$1
+ PATH_MOUNTED_SECRETS="${PATH_MEDIA}/${SECRETS_DEV}/${PATH_REL_SECRETS}"
+ PATH_DEV="/dev/${SECRETS_DEV}"
+ PATH_PMOUNT_ERR="$(path_tmp_timestamped 'err_mount')"
+ echo "Put secrets drive into slot for ${PATH_DEV}."
+ while [ ! -e "${PATH_DEV}" ]; do
+ sleep 0.1
+ done
+ while true; do
+ printf 'Passphrase: '
+ PASSPHRASE=$(get_passphrase)
+ echo ''
+ set +e
+ echo "${PASSPHRASE}" | pmount "${PATH_DEV}" 2> "${PATH_PMOUNT_ERR}"
+ RESULT=$?
+ set -e
+ if [ "${RESULT}" = "0" ]; then
+ break
+ elif [ "${RESULT}" != "100" ]; then
+ PMOUNT_ERR="$(cat ${PATH_PMOUNT_ERR})"
+ rm "${PATH_PMOUNT_ERR}"
+ abort "Aborting due to pmount error: ${PMOUNT_ERR}"
+ fi
+ done
+}
+
+copy_and_unmount_secrets() {
+ echo "Copying over ${PATH_REL_SECRETS}."
+ if [ "$1" = "out" ]; then
+ cp -a "${PATH_SECRETS}" "${PATH_MOUNTED_SECRETS}"
+ elif [ "$1" = "in" ]; then
+ cp -a "${PATH_MOUNTED_SECRETS}" "${PATH_SECRETS}"
+ else
+ echo abort "Illegal argument to unmount_secrets."
+ fi
+ pumount "${SECRETS_DEV}"
+ echo "You can remove device ${SECRETS_DEV} now."
+}
ntpdate-debian
setup_users "${MIN_TAGS}" "${TAGS_USER}"
+adduser plom plugdev # so user may use pmount
passwd "${USERNAME}"
#!/bin/sh
set -e
cd $(dirname "$0")
-. lib/abort
-. lib/abort_if_exists
. lib/abort_if_not_user
-. lib/abort_if_offline
-. lib/constants_user # PATH_USER_HOME, USERNAME
. lib/constants_repopaths # PATH_CONF, PATH_SCRIPTS
-. lib/expect_min_n_args
-. lib/get_passphrase
+. lib/constants_user # USERNAME
. lib/path_tmp_timestamped
+abort_if_not_user root
PATH_REL_SETUP_SECRETS_USER="$(basename ${PATH_CONF})/$(basename ${PATH_SCRIPTS})/_setup_secrets_user.sh"
PATH_REPO="$(dirname ${PATH_CONF})"
-PATH_REL_SECRETS=.secrets
-export PATH_SECRETS="${PATH_USER_HOME}/${PATH_REL_SECRETS}"
-
-# Mount secrets device and copy over its content.
-abort_if_exists "${PATH_SECRETS}"
-expect_min_n_args 1 "(device name, e.g. 'sda')" "$@"
-SECRETS_DEV=$1
-PATH_SOURCE=/media/${SECRETS_DEV}/${PATH_REL_SECRETS}
-PATH_DEV=/dev/${SECRETS_DEV}
-PATH_PMOUNT_ERR="$(path_tmp_timestamped 'err_mount')"
-echo "Put secrets drive into slot for ${PATH_DEV}."
-while [ ! -e "${PATH_DEV}" ]; do
- sleep 0.1
-done
-while true; do
- printf 'Passphrase: '
- PASSPHRASE=$(get_passphrase)
- echo ''
- set +e
- echo "${PASSPHRASE}" | pmount "${PATH_DEV}" 2> "${PATH_PMOUNT_ERR}"
- RESULT=$?
- set -e
- if [ "${RESULT}" = "0" ]; then
- break
- elif [ "${RESULT}" != "100" ]; then
- PMOUNT_ERR="$(cat ${PATH_PMOUNT_ERR})"
- rm "${PATH_PMOUNT_ERR}"
- abort "Aborting due to pmount error: ${PMOUNT_ERR}"
- fi
-done
-cp -a "${PATH_SOURCE}" "${PATH_SECRETS}"
-pumount "${SECRETS_DEV}"
-echo "You can remove ${PATH_DEV} now."
-chown -R "${USERNAME}:${USERNAME}" "${PATH_SECRETS}"
-
-export BORG_PASSPHRASE="${PASSPHRASE}"
PATH_TMP_REPO="$(path_tmp_timestamped configrepo)"
+
+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}" --whitelist-environment=PATH_SECRETS,BORG_PASSPHRASE -c "/bin/sh ${PATH_TMP_REPO}/${PATH_REL_SETUP_SECRETS_USER}"
+su -l "${USERNAME}" --whitelist-environment=BORG_PASSPHRASE -c "/bin/sh ${PATH_TMP_REPO}/${PATH_REL_SETUP_SECRETS_USER}"
rm -rf "${PATH_TMP_REPO}"