dotfiles/files/qvm-copy-dotfiles
Ben Grande d13a21a734
fix: avoid echo usage
Echo can interpret operand as an option and checking every variable to
be echoed is troublesome while with printf, if the format specifier is
present before the operand, printing as string can be enforced.
2024-08-06 18:12:46 +02:00

46 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
##
## SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
##
## Benefits of this method:
## - faster than salt, no need for a dispvm.
## - preserve permissions, salt-ssh doesn't.
## Disadvantages:
## - files need be copied to dom0 preserving permissions or setting again.
##
## Commands to run:
## sudo ./qvm-copy-dotfiles QUBE
set -eu
test -n "${1:-}" || { printf '%s\n' "usage: ${0##*/} QUBE"; exit 1; }
uid="$(id -u)"
test "${uid}" = "0" || { printf '%s\n' "Program requires root."; exit 1; }
qube="${1-}"
if ! qvm-check -- "${qube}" >/dev/null 2>&1; then
printf '%s\n' "VM doesn't exist: '${qube}'"
exit 1
fi
test -f ./setup.sh ||
{ printf '%s\n' "File doesn't exist: './setup.sh'"; exit 1; }
if test "${qube}" = "dom0"; then
sh ./dotfiles/setup.sh
user_name="$(getent group qubes | awk -F "[:,]" '{print $4}')"
user_home="$(getent passwd "${user_name}" | awk -F ":" '{print $6}')"
sudo -u "${user_name}" mkdir -pv -- "${user_home}/.cache"
tmpdir="$(sudo -u "${user_name}" -- mktemp -d "${user_home}/.cache/XXXXXX")"
trap 'rm -rf -- "${tmpdir}"' EXIT INT HUP QUIT ABRT
cp -r -- ./dotfiles "${tmpdir}"
chown -R -- "${user_name}:${user_name}" "${tmpdir}"
sudo -u "${user_name}" -- "${tmpdir}/dotfiles/setup.sh"
exit
fi
qvm-run -q "${qube}" -- "rm -rf -- ~/QubesIncoming/dom0/files"
qvm-copy-to-vm "${qube}" ../files
qvm-run -q "${qube}" -- "sh ~/QubesIncoming/dom0/files/setup.sh"
qvm-run -q "${qube}" -- "rm -rf -- ~/QubesIncoming/dom0/files"