Compare commits

..

5 commits

Author SHA1 Message Date
1b1bab8a1c Fix typo
Some checks are pending
sourcezap / shellcheck (push) Waiting to run
2024-08-18 22:32:06 -03:00
0x1eef
3c994da3cb Refactor 'sourcezap-install' command (#7)
Co-authored-by: 0x1eef <0x1eef@protonmail.com>
Reviewed-on: http://git.bastion.home.network/0x1eef/sourcezap/pulls/7
2024-08-18 22:31:31 -03:00
bc0553aabd Denote function locals with 'local' 2024-08-18 20:29:50 -03:00
d2f900f440 Update sourcezap-{setup,teardown} 2024-08-18 20:00:37 -03:00
2c13017d7b Update sourcezap-checkout 2024-08-18 19:28:59 -03:00
9 changed files with 103 additions and 64 deletions

View file

@ -35,4 +35,4 @@ cd "${gitdir}"
"${git}" fetch origin
"${git}" checkout "${branch}" ||
"${git}" checkout -t origin/"${branch}"
printok "${branch} checked out"
printok "checkout complete"

View file

@ -5,7 +5,6 @@ set -e
# variables
localbase=${LOCALBASE:-$(realpath "$(dirname "$0")"/../../..)}
libexec="${localbase}"/libexec/sourcezap
mode=u=rwX,g=rX,o=
git="${libexec}"/utils/git/run
gitdir=$1
installdir=$2
@ -16,57 +15,6 @@ revfile=$3
# shellcheck source=/dev/null
. "${libexec}"/functions/print.sh
perform_update()
{
rev=$(cat "${revfile}")
add=$("${libexec}"/utils/git/get-changed-files "${gitdir}" "${rev}")
del=$("${libexec}"/utils/git/get-removed-files "${gitdir}" "${rev}")
for file in ${del}; do
target="${installdir}/${file}"
parent=$(dirname "${target}")
echo "rm ${target}"
rm -f "${target}"
find "${parent}" -type d -maxdepth 0 -empty -delete
done
for file in ${add}; do
target="${installdir}/${file}"
parent=$(dirname "${target}")
parents=""
while [ ! -e "${parent}" ]; do
parents="${parent} ${parents}"
parent=$(dirname "${parent}")
done
for dir in ${parents}; do
run_install "-d" "${dir}"
done
run_install "${file}" "${target}"
done
}
perform_install()
{
find -s . \
-maxdepth 1 \
! -name "." \
! -name ".git" \
! -name ".github" \
! -name ".gitignore" \
! -name ".gitattributes" \
! -name ".git-blame-ignore-revs" \
! -name ".cirrus-ci" \
! -name ".cirrus.yml" \
! -name ".gitignore" \
! -name ".arclint" \
! -name ".arcconfig" \
-exec cp -Rpv {} "${installdir}" \;
chown -Rv root "${installdir}"
}
run_install()
{
install -o root -g _sourcezap -m "${mode}" -v "$@"
}
##
# main
if [ "$(id -u)" != "0" ]; then
@ -74,14 +22,34 @@ if [ "$(id -u)" != "0" ]; then
exit 1
fi
umask "${mode}"
cd "${gitdir}"
run_install "-d" "${installdir}"
chmod ${mode} "${installdir}"
if [ -e "${revfile}" ]; then
perform_update
##
# install update
rev=$(cat "${revfile}")
"${libexec}"/utils/install/run -d "${installdir}"
"${libexec}"/utils/install/update-deleted-files "${gitdir}" "${installdir}" "${rev}"
"${libexec}"/utils/install/update-changed-files "${gitdir}" "${installdir}" "${rev}"
else
perform_install
##
# install from scratch
umask u=rwX,g=rX,o=
"${libexec}"/utils/install/run -d "${installdir}"
find -s . \
-maxdepth 1 \
! -name "." \
! -name ".git" \
! -name ".github" \
! -name ".gitignore" \
! -name ".gitattributes" \
! -name ".git-blame-ignore-revs" \
! -name ".cirrus-ci" \
! -name ".cirrus.yml" \
! -name ".gitignore" \
! -name ".arclint" \
! -name ".arcconfig" \
-exec cp -Rpv {} "${installdir}" \;
chown -Rv root "${installdir}"
fi
"${git}" rev-parse HEAD > "${revfile}"
printok "install complete"

View file

@ -15,6 +15,8 @@ installdir=$2
erase()
{
# shellcheck disable=SC3043
local dir
dir="${1}"
printf "%s " "${dir}"
find "${dir}" \

View file

@ -16,6 +16,7 @@ libexec="${localbase}"/libexec/sourcezap
if [ "$(id -u)" = "0" ]; then
"${libexec}"/setup/setup-user
"${libexec}"/setup/setup-doas
printok "setup complete"
else
printerr "you must be root"
exit 1

View file

@ -15,10 +15,10 @@ user=_sourcezap
##
# main
if [ "$(id -u)" = "0" ]; then
pw userdel -n "${user}" || true
pw groupdel -n "${user}" || true
rm -rf /home/"${user:?}"/ || true
printok "done"
pw userdel -n "${user}" > /dev/null 2>&1 || true
pw groupdel -n "${user}" > /dev/null 2>&1 || true
rm -rf /home/"${user:?}"/ > /dev/null 2>&1 || true
printok "teardown complete"
else
printerr "you must be root"
exit 1

View file

@ -0,0 +1,14 @@
#!/bin/sh
set -e
##
# variables
mode=u=rwX,g=rX,o=
##
# main
install -o root \
-g _sourcezap \
-m "${mode}" \
-v \
"${@}"

View file

@ -0,0 +1,28 @@
#!/bin/sh
set -e
##
# variables
localbase=${LOCALBASE:-$(realpath "$(dirname "$0")"/../../../..)}
libexec="${localbase}"/libexec/sourcezap
gitdir=$1
installdir=$2
rev=$3
##
# main
cd "${gitdir}"
files=$("${libexec}"/utils/git/get-changed-files "${gitdir}" "${rev}")
for file in ${files}; do
target="${installdir}/${file}"
parent=$(dirname "${target}")
parents=""
while [ ! -e "${parent}" ]; do
parents="${parent} ${parents}"
parent=$(dirname "${parent}")
done
for dir in ${parents}; do
"${libexec}"/utils/install/run -d "${dir}"
done
"${libexec}"/utils/install/run "${file}" "${target}"
done

View file

@ -0,0 +1,22 @@
#!/bin/sh
set -e
##
# variables
localbase=${LOCALBASE:-$(realpath "$(dirname "$0")"/../../../..)}
libexec="${localbase}"/libexec/sourcezap
gitdir=$1
installdir=$2
rev=$3
##
# main
cd "${gitdir}"
files=$("${libexec}"/utils/git/get-removed-files "${gitdir}" "${rev}")
for file in ${files}; do
target="${installdir}/${file}"
parent=$(dirname "${target}")
echo "rm ${target}"
rm -f "${target}"
find "${parent}" -type d -maxdepth 0 -empty -delete
done

View file

@ -1,13 +1,17 @@
* vNEXT
** Break up 'sourcezap-install' into multiple files
'libexec/sourcezap/utils/install/' contains files that cover both
a fresh install and applying an update
** Add 'setup/setup-doas' improvements
More likely to do what's expected, but blind spots still exist
** Add 'sourcezap setup', 'sourcezap teardown'
Replaces and enhances 'setup-sourcezap'
** Add libexec/sourcezap/commands/sourcezap-sh
Runs /bin/sh within /home/_sourcezap/src/ as the '_sourcezap' user
** Add 'libexec/sourcezap/commands/sourcezap-sh'
Runs '/bin/sh' within '/home/_sourcezap/src/' as the '_sourcezap' user
* v1.0.0