X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=conflink;h=55d7a02489dc6b1d1ae3cbf7d0f3152778d73215;hb=2df710615e0dd7243d8a05a8a58a9f8ec810433f;hp=0dffc229e80b1b662c75fc8a0a6098008efebb88;hpb=6f1f8a104c9b38936ade2d27e835479523985133;p=distro-setup diff --git a/conflink b/conflink index 0dffc22..55d7a02 100755 --- a/conflink +++ b/conflink @@ -1,6 +1,9 @@ #!/bin/bash source /a/bin/errhandle/err +errcatch-cleanup() { + echo 1 >~/.local/conflink +} usage() { @@ -21,7 +24,23 @@ m() { s() { sudo "$@"; } lnf() { /a/exe/lnf "$@"; } -if [[ $1 == -f ]]; then + +# error prone +#f=~/.local/conflink +# fast=false +# if [[ -e $f ]] && (( $(stat -c %Y $f) > $now - 60*60*24 )); then +# fast=true +# fi +if [[ $1 == -f ]]; then # f for fast + fast=true + shift +elif + [[ $1 ]]; then + echo "error: unrecognized arguments" >&2 + exit 0 +fi + +if $fast; then lnf() { ln -sf "$@"; } fi @@ -59,14 +78,23 @@ subdir-link-r() { } - common-file-setup() { - local dir fs x f + local dir fs x f systemd_reload + systemd_reload=false for dir in "$@"; do fs=$dir/filesystem if [[ -e $fs && $user =~ ^iank?$ ]]; then + # this could be done with rsync, something like this, + # but I haven't looked at the symlinks. + # s rsync -n -ahviSAXPH --specials --devices --chown=root:root --chmod=g-s $fs / # note, symlinks get resolved, not copied. - s tar --mode=g-s --owner=0 --group=0 -cz -C $fs . | s tar -xz -C / + if s tar --anchored \ + --exclude etc/dovecot/users \ + --exclude etc/exim4/passwd \ + --exclude etc/exim4/*.pem \ + --mode=g-s --owner=0 --group=0 -cz -C $fs . | s tar -dz -C / | grep /etc/systemd &>/dev/null; then + systemd_reload=true + fi fi if [[ -e $dir/subdir_files ]]; then @@ -76,6 +104,9 @@ common-file-setup() { (( ${#x[@]} >= 1 )) || continue m lnf ${x[@]} ~ done + if $systemd_reload; then + m s systemctl daemon-reload + fi } user=$(id -un) @@ -133,6 +164,13 @@ case $user in fi m sudo -H -u user2 "${BASH_SOURCE[0]}" + + f=/a/bin/distro-setup/system-status + if [[ -x $f ]]; then + $f _ + fi + echo 0 >~/.local/conflink + ;; user2) m common-file-setup ${c_dirs[@]}