|
|
#!/usr/bin/bash
|
|
|
#
|
|
|
# Author: Dmitry Razumov <asmeron@ublinux.com>
|
|
|
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
|
|
|
#
|
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
#
|
|
|
|
|
|
ENABLED=yes
|
|
|
[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; }
|
|
|
DEBUGMODE=no
|
|
|
|
|
|
unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
debug_mode "$0" "$@"
|
|
|
|
|
|
SYSCONF="${ROOTFS}${SYSCONF}"
|
|
|
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/save; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/network; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
|
|
|
PATH_CHANGES="/memory/changes"
|
|
|
NAME_ROOTCOPY="rootcopy"
|
|
|
|
|
|
exec_save_rootcopy(){
|
|
|
## При перезагрузке/выключении, сохранить/перезаписать указанные каталоги/файлы <SAVE_ROOTCOPY_INCLUDE>, кроме <SAVE_ROOTCOPY_EXCLUDE> в /ublinux-data/rootcopy/
|
|
|
if [[ -n ${SAVE_ROOTCOPY_INCLUDE} || -n ${SAVE_ROOTCOPY_CHANGES} ]]; then
|
|
|
PATH_ROOTCOPY=$(find /memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_ROOTCOPY}" | head -1)
|
|
|
[[ -n ${PATH_ROOTCOPY} ]] || PATH_ROOTCOPY="$(find /memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)"
|
|
|
[[ -n ${PATH_ROOTCOPY} ]] && PATH_ROOTCOPY="${PATH_ROOTCOPY%/*}/${NAME_ROOTCOPY}" || exit 0
|
|
|
|
|
|
[[ -e ${PATH_ROOTCOPY} ]] || install -dm0755 -o root -g root "${PATH_ROOTCOPY}"
|
|
|
if [[ -w ${PATH_ROOTCOPY} ]]; then
|
|
|
if [[ -n ${SAVE_ROOTCOPY_EXCLUDE} ]]; then
|
|
|
while read -r SELECT_EXCLUDE; do
|
|
|
ROOTCOPY_EXCLUDE+=",'${SELECT_EXCLUDE}'"
|
|
|
done <<< ${SAVE_ROOTCOPY_EXCLUDE//,/$'\n'}
|
|
|
fi
|
|
|
cd ${ROOTFS}/${PATH_CHANGES}
|
|
|
[[ -n ${SAVE_ROOTCOPY_CHANGES} ]] && while read -r SELECT_CHANGES; do
|
|
|
# Специально добавлено --exclude={'','',''}
|
|
|
[[ -e ${SELECT_CHANGES#/*} ]] \
|
|
|
&& eval rsync --quiet --update --archive --recursive --acls --xattrs --relative --delete --delete-excluded --exclude={''${ROOTCOPY_EXCLUDE}} ${SELECT_CHANGES#/*} ${PATH_ROOTCOPY}
|
|
|
# --dry-run --verbose --quiet
|
|
|
done <<< ${SAVE_ROOTCOPY_CHANGES//,/$'\n'}
|
|
|
[[ -n ${SAVE_ROOTCOPY_INCLUDE} ]] && while read -r SELECT_INCLUDE; do
|
|
|
[[ -e ${ROOTFS}/${SELECT_INCLUDE} ]] \
|
|
|
&& eval rsync --quiet --update --archive --recursive --acls --xattrs --relative --delete --delete-excluded --exclude={''${ROOTCOPY_EXCLUDE}} ${ROOTFS}/${SELECT_INCLUDE} ${PATH_ROOTCOPY}
|
|
|
# --dry-run --verbose --quiet
|
|
|
done <<< ${SAVE_ROOTCOPY_INCLUDE//,/$'\n'}
|
|
|
fi
|
|
|
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
exec_save_sssd_rootcopy(){
|
|
|
PATH_ROOTCOPY=$(find /memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_ROOTCOPY}" | head -1)
|
|
|
[[ -n ${PATH_ROOTCOPY} ]] || PATH_ROOTCOPY="$(find /memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)"
|
|
|
[[ -n ${PATH_ROOTCOPY} ]] && PATH_ROOTCOPY="${PATH_ROOTCOPY%/*}/${NAME_ROOTCOPY}" || exit 0
|
|
|
|
|
|
# Save DOMAIN settings
|
|
|
if [[ -n ${DOMAIN} && -w ${PATH_ROOTCOPY} ]]; then
|
|
|
[[ -d "${PATH_ROOTCOPY}/etc" ]] || install -dm755 "${PATH_ROOTCOPY}/etc"
|
|
|
[[ -d "${PATH_ROOTCOPY}/var/lib/sss" ]] || install -dm755 "${PATH_ROOTCOPY}/var/lib/sss"
|
|
|
[[ -f "${PATH_CHANGES}/etc/krb5.conf" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/krb5.conf" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/krb5.conf" 2>/dev/null
|
|
|
[[ -f "${PATH_CHANGES}/etc/krb5.keytab" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/krb5.keytab" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/krb5.keytab" 2>/dev/null
|
|
|
[[ -f "${PATH_CHANGES}/etc/realmd.conf" ]] && cp -af -t "${PATH_ROOTCOPY}/etc/" "${PATH_CHANGES}/etc/realmd.conf" 2>/dev/null || rm -f "${PATH_ROOTCOPY}/etc/realmd.conf" 2>/dev/null
|
|
|
[[ -d "${PATH_CHANGES}/etc/sssd" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/etc/sssd" "${PATH_ROOTCOPY}/etc/" 2>/dev/null || rm -rdf "${PATH_ROOTCOPY}/etc/sssd" 2>/dev/null
|
|
|
[[ -d "${PATH_CHANGES}/var/lib/sss" ]] && rsync -aAXUH --delete "${PATH_CHANGES}/var/lib/sss" "${PATH_ROOTCOPY}/var/lib/" 2>/dev/null || rm -rdf "${PATH_ROOTCOPY}/var/lib/sss" 2>/dev/null
|
|
|
|
|
|
# cd ${PATH_CHANGES}
|
|
|
# find etc/ -type f -name "krb5.conf" -exec install -CDm644 {} ${PATH_ROOTCOPY}/{} \;
|
|
|
# find etc/ -type f -name "krb5.keytab" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \;
|
|
|
# find etc/ -type f -name "realmd.conf" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \;
|
|
|
# find etc/sssd/ -type f -name "*.conf" -exec install -CDm600 {} ${PATH_ROOTCOPY}/{} \;
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
|
|
|
#[[ ${SYSTEMBOOT_STATEMODE} == "changes" ]]
|
|
|
# т.к. rootcopy не работает в полном сохранении
|
|
|
exec_save_rootcopy $@
|
|
|
exec_save_sssd_rootcopy $@
|