mirror of
https://github.com/hackerschoice/segfault.git
synced 2024-07-01 11:11:58 +00:00
78 lines
2.1 KiB
Bash
Executable File
78 lines
2.1 KiB
Bash
Executable File
#! /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
|
|
|
|
ENV_LOAD "${SFI_SRCDIR}/.env" add || ERREXIT 250 "Failed to load .env"
|
|
|
|
[[ -z $SF_BASEDIR ]] && ERREXIT 255 "SF_BASEDIR= not set"
|
|
[[ ! -d "$SF_BASEDIR" ]] && ERREXIT 255 "Directory not found (SF_BASEDIR=): $SF_BASEDIR"
|
|
|
|
# [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"
|