|
|
#!/usr/bin/env bash
|
|
|
#
|
|
|
# Author: Dmitry Razumov <asmeron@ublinux.com>
|
|
|
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
|
|
|
#
|
|
|
# Initial script for UBLinux
|
|
|
# This script are launching before starting init from initrd script
|
|
|
# Current dir allways must be set to root (/)
|
|
|
# All system path must be relative, except initrd dirs
|
|
|
|
|
|
ENABLED=yes
|
|
|
[[ ${ENABLED} == "yes" ]] || exit 0
|
|
|
DEBUGMODE=no
|
|
|
|
|
|
[[ -d /usr/lib/ublinux ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${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
|
|
|
|
|
|
## Удалить указанные изменения, после очистки параметр удаляется
|
|
|
## SAVE_CLEAN=all|changes,rootcopy,homes
|
|
|
## all # Удалить все изменения из /ublinux-data/changes/ /ublinux-data/rootcopy/ /ublinux-data/homes/
|
|
|
## changes # Удалить только системные изменения /ublinux-data/changes/
|
|
|
## rootcopy # Удалить только /ublinux-data/rootcopy/
|
|
|
## homes # Удалить только /ublinux-data/homes/
|
|
|
## SAVE_CLEAN=changes,rootcopy
|
|
|
exec_save_clean(){
|
|
|
find_path_changes(){
|
|
|
PATH_CHANGES=$(find /memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_CHANGES}" | head -1)
|
|
|
[[ -n ${PATH_CHANGES} ]] || PATH_CHANGES="$(find /memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)"
|
|
|
[[ -n ${PATH_CHANGES} ]] && PATH_CHANGES="${PATH_CHANGES%/*}/${NAME_CHANGES}" || return 1
|
|
|
}
|
|
|
find_path_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}" || return 1
|
|
|
}
|
|
|
find_path_homes(){
|
|
|
PATH_HOMES=$(find /memory/layer-base/*/ -maxdepth 1 -type d -name "${NAME_HOMES}" | head -1)
|
|
|
[[ -n ${PATH_HOMES} ]] || PATH_HOMES="$(find /memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)"
|
|
|
[[ -n ${PATH_HOMES} ]] && PATH_HOMES="${PATH_HOMES%/*}/${NAME_HOMES}" || return 1
|
|
|
}
|
|
|
clean_changes(){
|
|
|
find ${PATH_CHANGES}/{..?*,.[!.]*,*} -delete 2>/dev/null
|
|
|
NEED_REBOOT=yes
|
|
|
}
|
|
|
clean_rootcopy(){
|
|
|
find ${PATH_ROOTCOPY}/{..?*,.[!.]*,*} -delete 2>/dev/null
|
|
|
NEED_REBOOT=yes
|
|
|
}
|
|
|
clean_homes(){
|
|
|
find ${PATH_HOMES} -maxdepth 2 -type d -name ".config" | while read -r PATH_USER_HOME; do
|
|
|
find ${PATH_USER_HOME%/*} -delete 2>/dev/null
|
|
|
done
|
|
|
}
|
|
|
clean_home_root(){
|
|
|
find ${PATH_CHANGES} -maxdepth 1 -type d -name "root" | while read -r PATH_USER_HOME; do
|
|
|
find ${PATH_USER_HOME} -delete 2>/dev/null
|
|
|
done
|
|
|
}
|
|
|
|
|
|
# Если задан парметр, то использовать как значение
|
|
|
CMDLINE_SAVE_CLEAN=$(cmdline_value save_clean)
|
|
|
[[ -z ${CMDLINE_SAVE_CLEAN} ]] || SAVE_CLEAN=${CMDLINE_SAVE_CLEAN}
|
|
|
local NEED_REBOOT=
|
|
|
if [[ -n ${SAVE_CLEAN} ]]; then
|
|
|
local NAME_CHANGES="changes"
|
|
|
local NAME_ROOTCOPY="rootcopy"
|
|
|
local NAME_HOMES="homes"
|
|
|
#local PATH+=":${ROOTFS}/usr/bin"
|
|
|
PATH_DATA="$(find /memory/layer-base/*/ -maxdepth 1 -type f -name "ublinux-data*.sgn" | head -1)"
|
|
|
[[ -e ${PATH_DATA%/*}/ublinux.ini ]] && sed "/^SAVE_CLEAN=.*/d" -i ${PATH_DATA%/*}/ublinux.ini
|
|
|
[[ -e ${SYSCONF}/save ]] && sed "/^SAVE_CLEAN=.*/d" -i ${SYSCONF}/save
|
|
|
[[ ${SAVE_CLEAN} =~ .*(all|changes).* ]] && find_path_changes && clean_changes
|
|
|
[[ ${SAVE_CLEAN} =~ .*(all|rootcopy).* ]] && find_path_rootcopy && clean_rootcopy
|
|
|
[[ ${SAVE_CLEAN} =~ .*(all|homes).* ]] && find_path_homes && clean_homes
|
|
|
[[ ${SAVE_CLEAN} =~ .*(all|homes).* ]] && find_path_changes && clean_home_root
|
|
|
sync; sync; sync; echo 3 > /proc/sys/vm/drop_caches
|
|
|
fi
|
|
|
[[ -z ${NEED_REBOOT} ]] || poweroff --force --reboot
|
|
|
}
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
|
|
|
exec_save_clean $@
|