You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ublinux-init/ublinux/rc.halt.pre/86-save-rootcopy

88 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
ENABLED=yes
[[ ${ENABLED} == "yes" ]] || 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
[[ -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 $@