X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=conflink;h=8deae093a7bbee829a72ab1cc590ed8a91390372;hb=ef571de225d48762aad38f9a5a3b28bbab654e39;hp=bb5d480d4ee04d7c235ba25fd7dff78dfa70374e;hpb=343a048be4b32d18540c6531048d2b9a006774ae;p=distro-setup diff --git a/conflink b/conflink index bb5d480..8deae09 100755 --- a/conflink +++ b/conflink @@ -1,14 +1,43 @@ #!/bin/bash source /a/bin/errhandle/err +err-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 -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,10 +112,19 @@ 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) -all_dirs=({/a/c,/p/c}{,/machine_specific/$HOSTNAME}) +all_dirs=({/a/bin/ds,/p/c}{,/machine_specific/$HOSTNAME}) # note, we assume a group of hosts does not have the # same name as a single host, which is no problem on our scale. for x in /p/c/machine_specific/*.hosts /a/bin/ds/machine_specific/*.hosts; do @@ -113,9 +173,19 @@ case $user in ##### end special extra stuff ##### - sudo bash -c 'shopt -s nullglob; cd /etc/openvpn; for f in client/* server/*; do ln -sf $f .; done' + if [[ -e /etc/openvpn ]]; then + sudo bash -c 'shopt -s nullglob && cd /etc/openvpn && for f in client/* server/*; do ln -sf $f .; done' + 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[@]}