#!/bin/bash
#
# Initial script for Live operating system
# This script are launching before starting init from linux-live 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

SELF_NAME="10-system"
PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin

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/os-config; [[ -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}/clock; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

exec_linklivedata(){
    #PATHLIVEDATA=$(find /memory/layer-base/*/* -maxdepth 0 -type f -iname "ublinux-data*.sgn" -exec dirname {} \;)
    PATHLIVEDATA=$(find /memory/data/from/*/* -maxdepth 0 -type d -iname "ublinux-data" -exec dirname {} \;)
    [[ -d ${PATHLIVEDATA} ]] && [[ ! -e ${ROOTFS}/mnt/livedata ]] && ln -sf ${PATHLIVEDATA} ${ROOTFS}/mnt/livedata
}
exec_ntfsmount(){
    ps | grep ntfsmount | awk '{ print $1 }' >> ${ROOTFS}/var/run/sendsigs.omit
}
exec_timezone(){
    #Setting up local time zone
    [[ -f ${ROOTFS}/usr/share/zoneinfo/${ZONE} ]] && ln -sf "/usr/share/zoneinfo/${ZONE}" ${ROOTFS}/etc/localtime
}
exec_machineid(){
    #Setting machine-id
    [[ -z ${MACHINEID} && ! -f ${ROOTFS}/etc/machine-id ]] && MACHINEID=hardware
    if [[ ${MACHINEID,,} == @(random|rnd) ]]; then
	MACHINEID=$(dd if=/dev/urandom count=1 bs=512 2>/dev/null | cat - /sys/class/net/*/address 2>/dev/null | md5sum | cut -d' ' -f1)
    elif [[ ${MACHINEID,,} == @(hardware|hw) ]]; then
	MACHINEID=$(lspci -nmm 2>/dev/null | grep ^00 | cat - /sys/class/net/*/address 2>/dev/null | md5sum | cut -d' ' -f1)
    fi
    [[ -z "${MACHINEID}" ]] || echo "${MACHINEID}" > ${ROOTFS}/etc/machine-id
}
exec_udevrules(){
    #Setting UDEV 
    FILE_UDEV_99="/usr/lib/ublinux/udev/99-hide-partition-ubconfig.rules"
    FILE_UDEV_70="/usr/lib/ublinux/udev/70-setup-prn-ubconfig.rules"
    mkdir -p ${ROOTFS}/etc/udev/rules.d
    ln -sf ${FILE_UDEV_99} ${ROOTFS}/etc/udev/rules.d/
    if [[ ${PRINTERADD} = "auto" ]] ;then
	ln -sf ${FILE_UDEV_70} ${ROOTFS}/etc/udev/rules.d/
    else
	rm -f "${ROOTFS}/etc/udev/rules.d/${FILE_UDEV_70##*/}"
    fi
}
exec_statemode(){
    ## Setting state mode
    STATE_MODE=$(cmdline_value ub.mode)
    STATE_HOME=$(cmdline_value ub.home)
    ## Полное сохранение ub.mode=changes
    if [[ ${STATE_MODE} =~ ^"changes"$ ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=changes' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#sed "s/SYSTEMBOOT_STATEMODE=.*/SYSTEMBOOT_STATEMODE=changes/" -i ${SYSCONF}/config
    ## Сохранение в модуль ub.mode=toxzm ub.mode=machines
    elif [[ ${STATE_MODE} =~ ^("toxzm"|"machines")$ ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=module' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#echo "SYSTEMBOOT_STATEMODE=module" >> ${SYSCONF}/config
    ## Полная песочница RAM ub.mode= ; ub.home=
    elif [[ ${STATE_MODE} == "" && ${STATE_HOME} == "" ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#echo "SYSTEMBOOT_STATEMODE=sandbox" >> ${SYSCONF}/config
    ## Песочница с сохранением профиля пользователя ub.mode= ; ub.home=/ublinux-data/homes
    elif [[ ${STATE_MODE} == "" && ${STATE_HOME} =~ ^"/" ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_ram_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#echo "SYSTEMBOOT_STATEMODE=sandbox_ram_home" >> ${SYSCONF}/config
    ## Полная песочница HDD ub.mode=clear ; ub.home=
    elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} == "" ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd" >> ${SYSCONF}/config
    ## Полная песочница HDD с сохранением профиля пользователя ub.mode=clear ; ub.home=
    elif [[ ${STATE_MODE} == "clear" && ${STATE_HOME} =~ ^"/" ]]; then
	sed -e '$a\SYSTEMBOOT_STATEMODE=sandbox_hdd_home' -e '/SYSTEMBOOT_STATEMODE=.*/d' -i ${SYSCONF}/config
	#echo "SYSTEMBOOT_STATEMODE=sandbox_hdd_home" >> ${SYSCONF}/config
    fi
}

    if [[ ${0##*/} == ${SELF_NAME} && -z $@ ]]; then
        while read -r FUNCTION; do
            $"${FUNCTION##* }"
        done < <(declare -F | grep "declare -f exec_")
    elif [[ ${0##*/} == ${SELF_NAME} ]]; then
        for FUNCTION in $@; do
            ${FUNCTION}
        done
    else
        true
    fi
