X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=conflink;h=69b6a6eca005592194ebe2f8c22691527e9a7005;hb=77917a8fbf2032a8b2634a1b3de0879ec45cf213;hp=30d868e4dae606d244bc2decb19126fda8d70799;hpb=7e4f3d0a6130b69b7f76a3ff13e510ffbeb1484b;p=distro-setup diff --git a/conflink b/conflink index 30d868e..69b6a6e 100755 --- a/conflink +++ b/conflink @@ -1,7 +1,7 @@ #!/bin/bash source /a/bin/errhandle/err -_errcatch_cleanup() { +err-cleanup() { echo 1 >~/.local/conflink } @@ -24,7 +24,18 @@ m() { s() { sudo "$@"; } lnf() { /a/exe/lnf "$@"; } -if [[ $1 == -f ]]; then + +fast=false +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 @@ -62,14 +73,36 @@ subdir-link-r() { } - common-file-setup() { - local dir fs x f + local dir fs x f reload_systemd + local -a reload_services + local -a restart_services + reload_systemd=false for dir in "$@"; do fs=$dir/filesystem if [[ -e $fs && $user =~ ^iank?$ ]]; then - # note, symlinks get resolved, not copied. - s tar --mode=g-s --owner=0 --group=0 -cz -C $fs . | s tar -xz -C / + while read -r line; do + file="${line:12}" + case $file in + etc/systemd/system/*) + reload_systemd=true + ;; + etc/dnsmasq.d/*) + restart_services+=(dnsmasq) + ;; + esac + # Previously did this with tar, but it doesn't + # update directory permissions. + # + # S = do spare files efficiently + # A = preserve acls + # X = preserve extended attributes + # i = itemize + done < <(s rsync -aiSAX --chown=root:root --chmod=g-s \ + --exclude=/etc/dovecot/users \ + --exclude='/etc/exim4/passwd*' \ + --exclude='/etc/exim4/*.pem' \ + $fs/ /) fi if [[ -e $dir/subdir_files ]]; then @@ -79,6 +112,15 @@ common-file-setup() { (( ${#x[@]} >= 1 )) || continue m lnf ${x[@]} ~ done + if $reload_systemd; then + m s systemctl daemon-reload + fi + for service in ${restart_services[@]}; do + if systemctl is-active $service >/dev/null; then + m s systemctl reload $service + fi + done + } user=$(id -un) @@ -131,11 +173,15 @@ case $user in ##### end special extra stuff ##### - if [[ -e /etc/openvpn ]]; then - sudo bash -c 'shopt -s nullglob && cd /etc/openvpn && for f in client/* server/*; do ln -sf $f .; done' + m sudo -H -u user2 "${BASH_SOURCE[0]}" + + f=/a/bin/distro-setup/system-status + if [[ -x $f ]]; then + $f _ fi + mkdir -p ~/.local + echo 0 >~/.local/conflink - m sudo -H -u user2 "${BASH_SOURCE[0]}" ;; user2) m common-file-setup ${c_dirs[@]} @@ -144,5 +190,3 @@ case $user in echo "$0: error: unexpected user"; exit 1 ;; esac - -echo 0 >~/.local/conflink