2022-11-28 14:36:13 +00:00
#! /bin/bash
# Admin Tool - Update /sf/bin and other directories
# Called when upgrading a version of segfault without going
# through a full reinstall and showing the difference
#
# make
# provison/update.sh
SFI_SRCDIR = " $( cd " $( dirname " ${ 0 } " ) /.. " || exit; pwd ) "
# shellcheck disable=SC1091
source " ${ SFI_SRCDIR } /provision/system/funcs " || exit 255
NEED_ROOT
2022-11-29 10:26:12 +00:00
ENV_LOAD " ${ SFI_SRCDIR } /.env " add || ERREXIT 250 "Failed to load .env"
2022-11-28 14:36:13 +00:00
[ [ -z $SF_BASEDIR ] ] && ERREXIT 255 "SF_BASEDIR= not set"
2022-11-29 10:26:12 +00:00
[ [ ! -d " $SF_BASEDIR " ] ] && ERREXIT 255 " Directory not found (SF_BASEDIR=): $SF_BASEDIR "
2022-11-28 14:36:13 +00:00
# [mode] [file] [dest-file]
merge_file( )
{
local mode
local sfn
local dfn
mode = " $1 "
sfn = " $2 "
dfn = " $3 "
[ [ -d " ${ dfn } " ] ] && ERREXIT 240 " Not a file: ${ dfn } "
[ [ -d " ${ sfn } " ] ] && ERREXIT 240 " Not a file: ${ sfn } "
(
IFS = ""
[ [ " ${ sfn } " -ef " ${ dfn } " ] ] && return # Symlink
[ [ -e " ${ dfn } " ] ] && {
# Already installed
[ [ $mode = = "diff" ] ] && {
res = $( diff --color= always -u " ${ dfn } " " ${ sfn } " )
[ [ $? -gt 1 ] ] && ERREXIT 240 "diff failed"
[ [ -z $res ] ] && return
echo -e " ${ CDY } Please merge ${ CY } ${ sfn } ${ CN } -> ${ CY } ${ dfn } ${ CN } "
echo " $res "
return
}
[ [ $mode = = "force" ] ] && {
# Return if identical (no update needed)
[ [ $( MD5F " $sfn " ) = = $( MD5F " ${ dfn } " ) ] ] && return
}
}
echo -e " ${ CDG } Installing ${ CG } ${ dfn } ${ CDG } ... ${ CN } "
cp -a " ${ sfn } " " ${ dfn } " || ERREXIT
)
}
merge( )
{
local mode
local sdir
local ddir
mode = " $1 "
sdir = " $2 "
ddir = " $3 "
cd " ${ sdir } " || ERREXIT 255
find . -type f | while read f; do
merge_file " ${ mode } " " ${ f } " " ${ ddir } / ${ f } "
done
}
merge_file force " ${ SFI_SRCDIR } /config/etc/sf/WARNING---SHARED-BETWEEN-ALL-SERVERS---README.txt " " ${ SF_BASEDIR } /config/etc/sf/WARNING---SHARED-BETWEEN-ALL-SERVERS---README.txt "
merge_file force " ${ SFI_SRCDIR } /config/etc/hosts " " ${ SF_BASEDIR } /config/etc/hosts "
merge_file force " ${ SFI_SRCDIR } /config/etc/resolv.conf " " ${ SF_BASEDIR } /config/etc/resolv.conf "
merge force " ${ SFI_SRCDIR } /sfbin " " ${ SF_BASEDIR } /sfbin "
merge diff " ${ SFI_SRCDIR } /config " " ${ SF_BASEDIR } /config "
merge_file diff " ${ SFI_SRCDIR } /provision/env.example " " ${ SFI_SRCDIR } /.env "