diff options
Diffstat (limited to 'config.d/controller/modules/cfunctions.sh')
-rw-r--r-- | config.d/controller/modules/cfunctions.sh | 207 |
1 files changed, 194 insertions, 13 deletions
diff --git a/config.d/controller/modules/cfunctions.sh b/config.d/controller/modules/cfunctions.sh index f91dfd4..ae50300 100644 --- a/config.d/controller/modules/cfunctions.sh +++ b/config.d/controller/modules/cfunctions.sh @@ -1,42 +1,223 @@ #!/bin/bash +die() { + echo "$@" 1>&2 ; exit 1 +} + _bsu_dfs() { # EXPORT BOOT DEVICE - BOOTDEV="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $2 }')" + BOOTDEV="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $2 }')" export BOOTDEV # EXPORT SYSTEM DEVICE - SYSDEV="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $2 }')" + SYSDEV="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $2 }')" export SYSDEV + # EXPORT BACKUP DEVICE + BACKUPDEV="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BACKUP | awk -F ' ' '{ print $2 }')" + export BACKUPDEV + # EXPORT USERDATA DEVICE - USERDATADEV="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $2 }')" + USERDATADEV="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $2 }')" export USERDATADEV - # SOURCE THE SOURCES CONFIGURATION FILES FOR EXPORTING THE SERVER INFORMATIONS - source "${CTCONFDIR}/sources/sources.conf" - # EXPORT THE BOOT FILE SYSTEM TYPE - BOOTFS="$(cat fstab.info | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $2 }')" + BOOTFS="$(cat "${CTCONFDIR}/confdir/fstab.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $2 }')" export BOOTFS # EXPORT THE SYSTEM FILE SYSTEM TYPE - SYSFS="$(cat fstab.info | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $2 }')" + SYSFS="$(cat "${CTCONFDIR}/confdir/fstab.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $2 }')" export SYSFS + # EXPORT THE BACKUP FILE SYSTEM TYPE + BACKUPFS="$(cat "${CTCONFDIR}/confdir/fstab.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BACKUP | awk -F ' ' '{ print $2 }')" + export BACKUPFS + # EXPORT THE USERDATA FILE STSTEM TYPE - USERDATAFS="$(cat fstab.info | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $2 }')" + USERDATAFS="$(cat "${CTCONFDIR}/confdir/fstab.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $2 }')" export USERDATAFS # EXPORT BOOT SIZE - BOOTSFS="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $3 }')" + BOOTSFS="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BOOT | awk -F ' ' '{ print $3 }')" export BOOTSFS # EXPORT SYSTEM SIZE - SYSSFS="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $3 }')" + SYSSFS="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep SYS | awk -F ' ' '{ print $3 }')" export SYSSFS + # EXPORT BACKUP SIZE + BACKUPSFS="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep BACKUP | awk -F ' ' '{ print $3 }')" + export BACKUPSFS + # EXPORT USERDATA SIZE - USERDATASFS="$(cat devname.info | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $3 }')" + USERDATASFS="$(cat "${CTCONFDIR}/confdir/devname.info" | sed '/^#/ d' | sed '/^\s*$/d' | grep USERDATA | awk -F ' ' '{ print $3 }')" export USERDATASFS -}
\ No newline at end of file + + _sources_exp +} + +server_exp() { + echo "Selecting server..." + _ser_list=() + while read -r "s";do + _ser_list+=("${s}") + done < "${CTCONFDIR}/sources/servers" + + if [[ "${#_ser_list[@]}" -ge 1 ]]; then + _act_ser_ar=() + for i in "${_ser_list[@]}"; do + avms=$(ping -c 3 "$i" | tail -1| awk -F '/' '{print $5}') + _act_ser+=("${avms}") + done + else + avms=$(ping -c 3 "${_ser_list[0]}" | tail -1| awk -F '/' '{print $5}') + _act_ser="${avms}" + fi + + _max_entry="${_ser_list[0]}" + for n in "${_ser_list[@]}" ; do + if [[ "$n" != '' ]]; then + ((${n%.*} > ${_max_entry%.*})) && _max_entry="$n" + fi + done + _act_ser="${_max_entry}" +} + +_sources_exp() { + # SOURCE THE SOURCES CONFIGURATION FILES FOR EXPORTING THE SERVER INFORMATIONS + source "${CTCONFDIR}/confdir/sources/sources.conf" + + if [[ -z "${_conf_dir}" ]]; then + _conf_dir="$(grep "confdir" "${CTCONFDIR}/confdir/sources/sources.conf" | sed '/^#/ d' | sed '/^\s*$/d' | awk -F ':' '{ print $2 }')" + export _conf_dir + fi + + if [[ -z "${_dist_dir}" ]]; then + _dist_dir="$(grep "distdir" "${CTCONFDIR}/confdir/sources/sources.conf" | sed '/^#/ d' | sed '/^\s*$/d' | awk -F ':' '{ print $2 }')" + export _dist_dir + fi + + if [[ -z "${_ser_user}" ]]; then + _ser_user="$(grep "user" "${CTCONFDIR}/confdir/sources/sources.conf" | sed '/^#/ d' | sed '/^\s*$/d' | awk -F ':' '{ print $2 }')" + export _ser_user + fi +} + +_call_net() { + ifconfig "${_net_interface}" up + udhcpc -t 5 -q -s "/bin/net_script.sh" +} + +_mount_sysfs() { + if mount -t "${SYSFS}" -o rw "${SYSDEV}" "/mnt/workdir"; then + return 0 + else + return 1 + fi +} + +_call_backup_switch() { + _ctflag_active_system="BACKUPDEV" + export _ctflag_active_system +} + +_question() { + for i in "$@"; do + [[ "$i" ]] && echo "$i" + done + while true; do + echo "Answer: Y/N " + read -rp "Input :: <= " ANS + case "${ANS}" in + [yY]) + return 0 + break;; + [nN]]) + return 1 + break;; + esac + done + + unset ANS + unset _question_yes_action + unset _question_no_action +} + +_fetch_version() { + if scp "${_act_user}@${_act_ser}/${_conf_dir}" "${CTCONFDIR}/version"; then + _ctflag_sverison=0 + else + _ctflag_sversion=1 + fi + export _ctflag_sversion +} + +_fetch_confd() { + if rsync -aAXPhrv "${_act_user}@${_act_ser}/${_conf_dir}" "${CTCONFDIR}/confdir/"; then + _ctflag_confd=0 + else + _ctflag_confd=1 + fi + export _ctflag_confd +} + +_check_version() { + _fetch_version + + if [[ "${_ctflag_sversion}" == 0 ]]; then + _local_version="$(cat "/mnt/workdir/var/lib/version")" + _server_version="$(cat "${CTCONFDIR}/version")" + if [[ "${_local_version}" != "${_server_version}" ]]; then + if [[ -z "${_ctflag_nohuman}" ]]; then + if _question "A new System Version is present on the server" "Do you wish to fetch the new system?"; then + _ctflag_sysfetch=0 + else + _ctflag_sysfetch=1 + fi + export _ctflag_sysfetch + else + _ctflag_sysfetch=0 + export _ctflag_sysfetch + fi + else + echo "Remote version matches the local" + fi +} + +_remake_sysfs() { + if umount "/mnt/workdir"; then + if [[ "${SYSFS}" == 'btrfs' ]]; then + if eval "mkfs.${SYSFS}" -L ROOTFS -f "${SYSDEV}"; then + echo "File system created" + else + echo "Failed creating new filesystem" + _call_backup_switch + fi + else + if eval "mkfs.${SYSFS}" -L ROOTFS "${SYSDEV}"; then + echo "File system created" + else + echo "Failed creating new filesystem" + _call_backup_switch + fi + fi + else + echo "Failed unmounting workdir" + _call_backup_switch + fi +} + +_fetch_new_sys() { + if _mount_sysfs; then + if sync -aAXhq "${_M_SERVER}/dist.d/stage3-amd64-${_server_version}.tar.bz2" "${CTCONFDIR}/version"; then + echo "New system was fetched successfully" + _ctflag_active_system="SYSDEV" + else + echo "Fetching new system FAILED" + _call_backup_switch + fi + else + echo "Failed mounting ${SYSDEV} to /mnt/workdir" + _call_backup_switch + fi +} |