X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=conflink;h=61291f2b42b643dfc2f68008032e892de501da64;hb=165008e5b82c81ebff1061c8f8294c3bc6e9dced;hp=bbe13126750cddb64e67a636fefeacc2291021a7;hpb=6459d4698ef983f7b1540589b87013c76913393d;p=distro-setup diff --git a/conflink b/conflink index bbe1312..61291f2 100755 --- a/conflink +++ b/conflink @@ -1,14 +1,43 @@ #!/bin/bash source /a/bin/errhandle/err +errcatch-cleanup() { + echo 1 >~/.local/conflink +} + + +usage() { + cat <&2 + exit 0 +fi + +if $fast; then + lnf() { ln -sf "$@"; } +fi shopt -s nullglob shopt -s extglob @@ -44,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 -n -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 @@ -61,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) @@ -118,6 +178,14 @@ 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 + mkdir -p ~/.local + echo 0 >~/.local/conflink + ;; user2) m common-file-setup ${c_dirs[@]}