#!/usr/bin/env bash # # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # # 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 $@