aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconfig.d/controller/modules/cinit_pre-mount.sh155
1 files changed, 99 insertions, 56 deletions
diff --git a/config.d/controller/modules/cinit_pre-mount.sh b/config.d/controller/modules/cinit_pre-mount.sh
index 1c8cb98..f89bbb7 100755
--- a/config.d/controller/modules/cinit_pre-mount.sh
+++ b/config.d/controller/modules/cinit_pre-mount.sh
@@ -6,22 +6,25 @@
# EXPORT CONTROLLER CONFDIR
CTCONFDIR=/config.d
export CTCONFDIR
-
-unset _ctflag_switch
-
# EXPORT LOCAL SCRIPTDIR
CTSCRIPTS=/usr/local/controller
export CTSCRIPTS
-
# UPDATE PATH
export "PATH=${PATH}:/usr/local/controller"
-
-# CONTROLLER FUNCTIONS
+# CONTROLLER PRELIMINARY FUNCTIONS
source "${CTSCRIPTS}/ct_prelim.sh"
-
+# MAKE SURE CT FLAGS ARE NOT SET
+_unset_ct
+# CHECK AND EXPORT LABELS
_a_priori_devices
+# EXPORT DEVICES AND FILESYSTEMS
_bsu_dfs
+# CHECK IF ROOTFS AND BACKUPFS HAVE ROOT SYSTEMS INSIDE
+_check_rbfs
+# CASE OF MISSING SYSFS DEVICE OR BOOTFS DEVICE
+# THIS SHOULD NEVER HAPPEN, BUT IT'S POSSIBLE SOMETIMES.
+# AN EXAMPLE WOULD BE A FAILURE OF MKFS.${FS} DURING THE PROCESS
if [[ ! -e "${SYSDEV}" ]] || [[ ! -e "${BACKUPDEV}" ]]; then
_recheck_dev() {
_a_priori_devices
@@ -34,77 +37,106 @@ if [[ ! -e "${SYSDEV}" ]] || [[ ! -e "${BACKUPDEV}" ]]; then
fi
}
- _rescue_shell "Important labels are missing." "Please create the partitions you wish with SYSFS and BACKUPFS labels"
+ while true; do
+ _rescue_shell "Important labels are missing." "Please create the partitions you wish with SYSFS and BACKUPFS labels"
+
+ if _recheck_dev; then
+ break
+ fi
+ done
fi
+
# IMPORT GPG PUB KEY
-_gpg_import
+# THIS FEATURE IS DISABLED FOR NOW
+# _gpg_import
# NETWORK SCRIPT
source "${CTSCRIPTS}/cnetwork.sh"
# CHECK NETWORK FLAG AND FETCH VERSION AND CONFIG.D DIRECTORY
if [[ "${_ctflag_net}" == 0 ]]; then
+ # FETCH FUNCTIONS
source "${CTSCRIPTS}/ct_fetch.sh"
-
+ # NEW SYSTEM FUNCTIONS
+ source "${CTSCRIPTS}/ct_newsys.sh"
# EXPORT SERVER'S INFO
_sources_exp
-
- # MOUNT SYSFS AS RW
- _mount_sysfs "/mnt/workdir"
-
# FETCH CONFIG.D
_fetch_confd
-
# FETCH LATEST VERSION
_fetch_version
- # MOUNT SYSFS AS RW
- _mount_sysfs "/mnt/workdir"
- # CHECK LOCAL VERSION OF SYSFS WITH SERVERS VERSION
- _check_version
-
- source "${CTSCRIPTS}/ct_newsys.sh"
-
- # WIPE OLD FS, CREATE NEW FS & FETCH NEW SYSTEM
- if [[ "${_ctflag_sysfetch}" == 0 && "${_ctflag_net}" == 0 ]]; then
- # WIPE & CREATE NEW FS
- _remake_dev "/mnt/workdir" "${SYSDEV}"
+ if [[ "${_ctflag_setup}" == 0 ]]; then
+ _ctflag_sysfetch=0
+ _ctflag_bconf=0
+ elif [[ "${_ctflag_setup}" == 1 ]]; then
+ _call_backup_switch
+ else
+ # MOUNT SYSFS AS RW
+ _mount_sysfs "/mnt/workdir"
+ # CHECK LOCAL VERSION OF SYSFS WITH SERVERS VERSION
+ _check_version
+ _unmount "/mnt/workdir"
+ fi
+fi
- # FETCH NEW SYSTEM
- if [[ "${_ctflag_remake}" == 0 ]]; then
- _fetch_new_sys "/mnt/workdir"
- elif [[ "${_ctflag_remake}" == 1 ]]; then
+# WIPE OLD FS, CREATE NEW FS & FETCH NEW SYSTEM
+# _CTFLAG_SYSFETCH IS DEFINED @ _CHECK_VERSION
+# _CTFLAG_NET IS DEFINED @ CNETWORK.SH
+if [[ "${_ctflag_sysfetch}" == 0 && "${_ctflag_net}" == 0 ]]; then
+ _case_fail() {
+ if [[ "${_ctflag_bconf}" == 0 ]]; then
+ _rescue_shell "Process failed" "Backup system is missing"
+ else
_call_backup_switch
fi
+ }
- # VERIFY FETCHED IMAGE
- if [[ "${_ctflag_fetch}" == 0 ]]; then
- if ! _verify_target "/mnt/workdir"; then
- _call_backup_switch
- fi
- elif [[ "${_ctflag_fetch}" == 1 ]]; then
+ # WIPE & CREATE NEW FS
+ _remake_dev "/mnt/workdir" "${SYSDEV}"
+ # FETCH NEW SYSTEM
+ # _CTFLAG_REMAKE IS DEFINED @ _RMAKE_DEV
+ if [[ "${_ctflag_remake}" == 0 ]]; then
+ _fetch_new_sys "/mnt/workdir"
+ elif [[ "${_ctflag_remake}" == 1 ]]; then
+ _case_fail
+ fi
+
+ # VERIFY FETCHED IMAGE
+ # _CTFLAG_FETCH IS DEFINE @ _FETCH_NEW_SYS
+ if [[ "${_ctflag_fetch}" == 0 ]]; then
+ if ! _verify_target "/mnt/workdir"; then
_call_backup_switch
fi
+ elif [[ "${_ctflag_fetch}" == 1 ]]; then
+ _case_fail
+ fi
- # EXTRACT NEW SYSTEM
- if [[ "${_ctflag_verify}" == 0 ]]; then
- rm -f "/mnt/workdir/verify.info"
- _extract_sys "/mnt/workdir" "${_sys_archive}"
-
- if _check_last "/mnt/workdir"; then
- _ctflag_extract=0
- else
- _ctflag_extract=1
- fi
-
- rm -f "/mnt/workdir/verify.info"
- export _ctflag_extract
- elif [[ "${_ctflag_verify}" == 1 ]]; then
- _call_backup_switch
+ # EXTRACT NEW SYSTEM
+ if [[ "${_ctflag_verify}" == 0 ]]; then
+ # CASE OF A LEFTOVER CHECK
+ rm -f "/mnt/workdir/verify.info"
+ # EXTRACT SYSTEM TARBALL
+ # _SYS_ARCHIVE IS DEFINED @ _FETCH_NEW_FS
+ _extract_sys "/mnt/workdir" "${_sys_archive}"
+ if _check_last "/mnt/workdir"; then
+ _ctflag_extract=0
+ else
+ _ctflag_extract=1
fi
+
+ rm -f "/mnt/workdir/verify.info"
+ export _ctflag_extract
+ elif [[ "${_ctflag_verify}" == 1 ]]; then
+ _case_fail
fi
- _unmount "/mnt/workdir"
+
+ _unmount "/mnt/workdir"
+elif [[ "${_ctflag_setup}" == 1 && "${_ctflag_net}" == 1 ]]; then
+ _call_backup_switch
+elif [[ "${_ctflag_setup}" == 0 && "${_ctflag_net}" == 1 ]]; then
+ _rescue_shell "No active system could be located, neither a network connection could be established from a system fetch"
fi
if [[ "${_ctflag_switch}" == 0 ]]; then
@@ -113,7 +145,11 @@ if [[ "${_ctflag_switch}" == 0 ]]; then
fi
# BACKUP SWITCH CONDITION
+# _CTFLAG_SWITCH IS DEFINED FROM ALL _CALL_BACKUP_SWITCH
if [[ "${_ctflag_switch}" == 0 ]]; then
+ SYSFS_EXPIRED="${SYSFS}"
+ SYSDEV_EXPIRED="${SYSDEV}"
+
if [[ "${SYSFS}" == 'ext4' ]]; then
e2label "${SYSDEV}" "EXPIRED"
e2label "${BACKUPDEV}" SYSFS
@@ -121,17 +157,16 @@ if [[ "${_ctflag_switch}" == 0 ]]; then
btrfs filesystem label "${SYSDEV}" "EXPIRED"
btrfs filesystem label "${BACKUPDEV}" "SYSFS"
fi
-
- SYSFS_EXPIRED="${SYSFS}"
- SYSFS="${BACKUPFS}"
- SYSDEV_EXPIRED="${SYSDEV}"
+ SYSFS="${BACKUPFS}"
SYSDEV="${BACKUPDEV}"
_unmount "/mnt/workdir"
fi
# CONFIGURATION
+# _CTFLAG_CONFD IS DEFINED @ _FETCH_CONFD
+# _CTFLAG_EXTRACT IS DEFINED @ _EXTRACT_SYS
if [[ "${_ctflag_net}" == 0 ]] && [[ "${_ctflag_confd}" == 0 || "${_ctflag_extract}" == 0 ]]; then
source "/usr/local/controller/ct_config.sh"
return 1
@@ -143,3 +178,11 @@ return 1
fi
_unmount "/mnt/workdir"
fi
+
+_mount_target "/mnt/rfs" "${SYSFS}" "SYSFS"
+_mount_target "/mnt/bfs" "${BACKUPFS}" "BACKUPFS"
+
+_sync_backupfs
+
+_unmount "/mnt/rfs"
+_unmount "/mnt/bfs" \ No newline at end of file