diff options
author | Christos.K <freedomrfox@gmail.com> | 2017-06-20 06:42:06 +0300 |
---|---|---|
committer | Christos.K <freedomrfox@gmail.com> | 2017-06-20 06:42:06 +0300 |
commit | c04505c009d5b767aae83a759dcd61faa7a73225 (patch) | |
tree | 44a7214578fb33adcaab8905c5dd12ca1a5c7006 /scripts | |
parent | Included functions for custom scripts (diff) | |
download | GSE-c04505c009d5b767aae83a759dcd61faa7a73225.tar.gz GSE-c04505c009d5b767aae83a759dcd61faa7a73225.tar.bz2 GSE-c04505c009d5b767aae83a759dcd61faa7a73225.zip |
Major udate: Moved sinit and chroot_sinit parts to functions, imported 1 extra hook point (des) and finished the custom source script function
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/chroot_scripts/cfunctions | 77 | ||||
-rwxr-xr-x | scripts/chroot_scripts/chroot_init | 268 | ||||
-rwxr-xr-x | scripts/chroot_scripts/chsinprog | 1 | ||||
-rwxr-xr-x | scripts/functions/sinit_functions | 427 | ||||
-rwxr-xr-x | scripts/sinit | 276 |
5 files changed, 423 insertions, 626 deletions
diff --git a/scripts/chroot_scripts/cfunctions b/scripts/chroot_scripts/cfunctions index 6297979..4823c4b 100755 --- a/scripts/chroot_scripts/cfunctions +++ b/scripts/chroot_scripts/cfunctions @@ -717,6 +717,27 @@ _initramfs_builder() { fi } +_des_c() { + eclean-dist -d + eclean-pkg -d + + if [[ -n "${_flag_minimal}" ]]; then + rm -f /var/lib/portage/world + touch /var/lib/portage/world + else + emerge --deselect sys-kernel/gentoo-sources + emerge --deselect sys-kernel/genkernel + emerge --deselect sys-boot/grub:2 + emerge --deselect sys-kernel/dracut + emerge --deselect dev-util/ccache + emerge --deselect sys-devel/distcc + emerge --deselect app-portage/eix + emerge --deselect app-portage/gentoolkit + fi + + _emerge_depclear +} + # RUNLEVEL UPDATE FUNCTION _runlevel_configuration() { echo @@ -913,24 +934,52 @@ chroot_master_loop() { } # REPEAT PART X. -repeat_part() { -while true; do - echo -e "\e[33mPart $1: Has been completed\e[0m" - echo -e "\e[33mRun again? Y/N: \e[0m" - read -rp "Input :: <= " YN - case "${YN}" in - [yN]) - return 0 - break;; - [nN]) - return 1 - break;; - esac -done +_repeat_part() { + while true; do + echo -e "\e[33mPart $1: Has been completed\e[0m" + echo -e "\e[33mRun again? Y/N: \e[0m" + read -rp "Input :: <= " YN + case "${YN}" in + [yN]) + return 0 + break;; + [nN]) + return 1 + break;; + esac + done } _do_rs() { while read -r s;do source "${CHDIR}/cscripts/$s" done < <(grep "$1" "${CHDIR}/cscripts/doscripts" | sed '/^#/ d' | sed '/^\s*$/d' | awk -F ':' '{ print $2 }') +} + +_do_hs() { + if grep -q "$1" "${CHDIR}/cscripts/doscripts" && [[ -n "${_flag_sdir}" ]]; then + _e_report_back "Sourcing scripts $2 $3" + _do_rs "$1" + fi +} + +_call_hook_points() { + if echo "${_lawful_args[@]}" | grep -q "$2"; then + _e_report_back "Lawful entry detected on $2, proceeding..." + else + if [[ "$(grep "$1" "${CHDIR}/chsinprog" | awk -F '=' '{ print $2 }')" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q "$2"; then + if [[ -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q "$2"; then + _e_report_back "Force entry detected on $3, forcing..." + eval "$4" "${@:5}" "cforce" || die + else + eval "$4" "${@:5}" || die + fi + else + if _repeat_part "$3"; then + eval "$4" "${@:5}" + else + _e_report_back "Proceeding" + fi + fi + fi }
\ No newline at end of file diff --git a/scripts/chroot_scripts/chroot_init b/scripts/chroot_scripts/chroot_init index 3756e22..a9a4ce1 100755 --- a/scripts/chroot_scripts/chroot_init +++ b/scripts/chroot_scripts/chroot_init @@ -6,13 +6,16 @@ # PLEASE DO NOT MODIFY THIS FILE, BUT REFEREE AT CONFIGURATION SUBMENU # IF YOU NEED TO ADD EXTRA FEATURES TO YOUR SYSTEM. # - +set -x if echo "${_flag_tty}" | grep -q 'sshd'; then LC_COLLATE="C" LC_ALL="en_US.UTF-8" LC_CTYPE="en_US.UTF-8" fi +# ENVIROMENTAL ECHO FOR TESTING PHASE echo "$@" + +# EXPORT IMPORTANT VARIABLES BEFORE GOING ON source /etc/profile && export PS1="( 'Part C: Preparing to bootstrap' ) $PS1" export CHDIR="/sinit.d" export PATH=${PATH}:${CHDIR} @@ -21,74 +24,29 @@ source "${CHDIR}/chinit.conf" \ [[ ! -e "${CHDIR}/emergeresume" ]] && echo "#####" >> "${CHDIR}/emergeresume" \ || sed -i "/#####/d" "${CHDIR}/emergeresume" +# CHECK POSITIONAL PARAMETERS inspector "$@" -if grep -q '\-gupdate' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Portage Update" - _do_rs '\-gupdate' -fi - # PART C BEGINS -if echo "${_lawful_args[@]}" | grep -q 'gupdate'; then - _e_report_back "Update and prepare system: Lawful entry detected, proceeding..." +_do_hs '\-gupdate' "before" "Part: Portage Update" +if _call_hook_points 'UPDATE' 'gupdate' 'Part: Portage Update' '_part_c' "$@"; then + _monitor_chroot_flow "UPDATE" else - if [[ "$(awk -F '=' '/UPDATE/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gupdate'; then - if echo "${_enforce_args[@]}" | grep -q 'gupdate'; then - _e_report_back "Update and prepare system: Force entry detected, forcing..." - _part_c "$@" "cforce" || die "Part C FAILED" - else - _part_c "$@" || die "Part C FAILED" - fi - else - if repeat_part "Portage Update"; then - _part_c "$@" || die "Part C FAILED" - else - _e_report_back "Proceeding to sub portage part" - fi - fi + die "Part: Update Failed" fi - -if grep -q '\+gupdate' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Portage Update" - _do_rs '\+gupdate' -fi - -if grep -q '\-gportage' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Portage" - _do_rs '\-gportage' -fi - +_do_hs '\+gupdate' "after" "Part: Portage Update" +sleep 20 # PART PORTAGE, PROFILE AND FEATURES UPDATE -if echo "${_lawful_args[@]}" | grep -q 'gportage'; then - _e_report_back "Portage Configuration: Lawful entry detected, proceeding..." +_do_hs '\-gportage' "before" "Part: Portage" +if _call_hook_points 'PORTAGE' 'gportage' 'Part: Portage' 'part_portage' "$@"; then + _monitor_chroot_flow "PORTAGE" else - if [[ "$(awk -F '=' '/UPDATE/{ print $2 }' < "${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gportage'; then - if echo "${_enforce_args[@]}" | grep -q 'gportage'; then - _e_report_back "Portage configuration: Force entry detected, forcing..." - part_portage "$@" "cforce" && _monitor_chroot_flow "PORTAGE" - else - part_portage "$@" && _monitor_chroot_flow "PORTAGE" - fi - else - if repeat_part "Portage Configuration"; then - part_portage "$@" && _monitor_chroot_flow "PORTAGE" - else - _e_report_back "Proceeding" - fi - fi -fi - -if grep -q '\+gportage' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part:Portage" - _do_rs '\+gportage' -fi - -if grep -q '\-grebuild' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: System Rebuild" - _do_rs '\-grebuild' + die "Part: Portage FAILED" fi +_do_hs '\+gportage' "after" "Part: Portage" # Part D Begins +_do_hs '\-grebuild' "before" "Part: System Rebuild" _sreb() { echo -e "\e[35mPart D: Rebuilding system\e[0m" env-update > /dev/null 2>&1 && source /etc/profile && export PS1="( 'Part D: Rebuilding system' ) $PS1" @@ -107,200 +65,74 @@ else _sreb fi fi - -if grep -q '\+grebuild' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: System Rebuild" - _do_rs '\+grebuild' -fi - -if grep -q '\-gconfigure' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Emerge Packages" - _do_rs '\-gconfigure' -fi +_do_hs '\+grebuild' "after" "Part: System Rebuild" # PART E BEGINS -if echo "${_lawful_args[@]}" | grep -q 'gconfigure'; then - _e_report_back "System Configuration: Lawful entry detected, proceeding..." +_do_hs '\-gconfigure' "before" "Part: System Configuration" +if _call_hook_points 'CONFIGURE' 'gconfigure' 'Part: System Configuration' 'configure_system_f' "$@"; then + _monitor_chroot_flow "CONFIGURE" else - if [[ "$(awk -F '=' '/CONFIGURE/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gconfigure'; then - if echo "${_enforce_args[@]}" | grep -q 'gconfigure'; then - _e_report_back "System Configuration: Force entry detected, forcing..." - configure_system_f "$@" "cforce" - else - configure_system_f "$@" - fi - else - if repeat_part "System Configuration"; then - configure_system_f "$@" - else - _e_report_back "Proceeding to emerging packages" - fi - fi -fi - -if grep -q '\+gconfigure' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Emerge Packages" - _do_rs '\+gconfigure' -fi - -if grep -q '\-ginst' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Configuration" - _do_rs '\-ginst' + die "Part: System Configuration FAILED" fi +_do_hs '\+gconfigure' "after" "Part: System Configuration" # PART F BEGINS -if echo "${_lawful_args[@]}" | grep -q 'ginst'; then - _e_report_back "Emerge packages: Lawful entry detected, proceeding..." +_do_hs '\-ginst' "before" "Part: Emerge requested packages" +if _call_hook_points 'INSTALL' 'ginst' 'Part: Emerge requested packages' 'emerge_requested' "$@"; then + _monitor_chroot_flow "INSTALL" else - if [[ "$(awk -F '=' '/INSTALL/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'ginst'; then - if echo "${_enforce_args[@]}" | grep -q 'ginst'; then - _e_report_back "Emerge packages: Force entry detected, forcing..." - emerge_requested "$@" "cforce" - else - emerge_requested "$@" - fi - else - if repeat_part "Installing Packages"; then - emerge_requested "$@" - else - _e_report_back "Proceeding to runlevel update" - fi - fi + die "Part: Emerge Requested Packages FAILED" fi unset YN - -if grep -q '\+ginst' "${CHDIR}/cscripts/doscripts"; then - __e_report_back "Sourcing scripts after Part: Configuration" - _do_rs '\+ginst' -fi - -if grep -q '\-grun' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Runlevels" - _do_rs '\-grun' -fi +_do_hs '\+ginst' "after" "Part: Emerge requested packages" # PART G BEGINS -if echo "${_lawful_args[@]}" | grep -q 'grun'; then - _e_report_back "Runlevel: Lawful entry detected, proceeding..." +_do_hs '\-grun' "before" "Part: Runlevel Configurations" +if _call_hook_points 'RUNLEVEL' '\-grun' 'Part: Runlevel Configurations' '_runlevel_configuration' "$@"; then + _monitor_chroot_flow "RUNLEVEL" else - if [[ "$(awk -F '=' '/RUNLEVEL/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'grun'; then - if echo "${_enforce_args[@]}" | grep -q 'grun'; then - _e_report_back "Runlevel: Force entry detected, forcing..." - fi - _runlevel_configuration - else - if repeat_part "Runlevel Configuration"; then - _runlevel_configuration - else - _e_report_back "Proceeding" - fi - fi + die "Part: Runlevel Configurations FAILED" fi unset YN - -if grep -q '\+grun' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Runlevels" - _do_rs '\+grun' -fi - -if grep -q '\-gkernel' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: kernel" - _do_rs '\-gkernel' -fi +_do_hs '\+grun' "after" "Part: Runlevel Configurations" # PART H BEGINS +_do_hs '\-gkernel' "before" "Part: Kernel build" if [[ -n "${_flag_kernel}" ]] || [[ -n "${_flag_minimal}" ]]; then : else - if echo "${_lawful_args[@]}" | grep -q 'gkernel'; then - _e_report_back "Kernel: Lawful entry detected, proceeding..." + if _call_hook_points 'KERNEL' 'gkernel' 'Part: Kernel build' '_kernel_build'; then + _monitor_chroot_flow "KERNEL" else - if [[ "$(awk -F '=' '/KERNEL/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n $(echo "${_flag_force_new}") ]] || echo "${_enforce_args[@]}" | grep -q 'gkernel'; then - if echo "${_enforce_args[@]}" | grep -q 'gkernel'; then - _e_report_back "Kernel: Force entry detected, forcing..." - _kernel_build "cforce" - else - _kernel_build - fi - else - if repeat_part "Kernel Configuration"; then - _kernel_build - else - _e_report_back "Proceeding" - fi - fi + die "Part: Kernel build FAILED" fi unset YN fi - -if grep -q '\+gkernel' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Kernel" - _do_rs '\+gkernel' -fi - -if grep -q '\-ginitrd' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Initrd" - _do_rs '\-ginitrd' -fi +_do_hs '\+gkernel' "after" "Part: Kernel build" # PART I BEGINS +_do_hs '\-ginitrd' "before" "Part: Initramfs build" if [[ -n "${_flag_kernel}" ]] || [[ -n "${_flag_minimal}" ]] || [[ -n "${_flag_initrd}" ]]; then : else - if echo "${_lawful_args[@]}" | grep -q 'ginitrd'; then - _e_report_back "Initramfs: Lawful entry detected, proceeding..." + if _call_hook_points 'INITRAMFS' 'ginitrd' 'Part: Initramfs build' '_initramfs_builder'; then + _monitor_chroot_flow "INITRAMFS" else - if [[ "$(awk -F '=' '/INITRAMFS/{ print $2 }' <"${CHDIR}/chsinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'ginitrd'; then - if echo "${_enforce_args[@]}" | grep -q 'ginitrd'; then - _e_report_back "Initramfs: Force entry detected, forcing..." - _initramfs_builder "cforce" - else - _initramfs_builder - fi - else - if repeat_part "Initramfs Configuration"; then - _initramfs_builder - else - _e_report_back "Proceeding" - fi - fi + die "Part: Initramfs build FAILED" fi unset YN fi +_do_hs '\+ginitrd' "after" "Part: Initramfs build" -if grep -q '\+ginitrd' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Initrd" - _do_rs '\+ginitrd' -fi - -if grep -q '\-gdes' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts before Part: Deselect packages" - _do_rs '\-gdes' -fi - -eclean-dist -d -eclean-pkg -d - -if [[ -n "${_flag_minimal}" ]]; then - rm -f /var/lib/portage/world - touch /var/lib/portage/world +# PART DESELECT BEGINS +_do_hs '\-gdes' "before" "Part: Deselect packages" +if _call_hook_points 'DESP' 'gdes' 'Part: Deselect packages' '_des_c' "$@"; then + _monitor_chroot_flow "DESP" else - emerge --deselect sys-kernel/gentoo-sources - emerge --deselect sys-kernel/genkernel - emerge --deselect sys-boot/grub:2 - emerge --deselect sys-kernel/dracut - emerge --deselect dev-util/ccache - emerge --deselect sys-devel/distcc - emerge --deselect app-portage/eix - emerge --deselect app-portage/gentoolkit -fi - -_emerge_depclear - -if grep -q '\+gdes' "${CHDIR}/cscripts/doscripts"; then - _e_report_back "Sourcing scripts after Part: Deselect packages" - _do_rs '\+gdes' + die "Part: Deselect packages FAILED" fi +unset YN +_do_hs '\+gdes' "after" "Part: Deselect packages" # Creating user-data dir-tree mkdir -p /user-data/persistent/{etc,var,logs,config.d,local,rmount} diff --git a/scripts/chroot_scripts/chsinprog b/scripts/chroot_scripts/chsinprog index 033e608..9d145fe 100755 --- a/scripts/chroot_scripts/chsinprog +++ b/scripts/chroot_scripts/chsinprog @@ -8,5 +8,6 @@ INSTALL=1 RUNLEVEL=1 KERNEL=1 INITRAMFS=1 +DESP=1 CLEAN=0 CHROOTPART=0 diff --git a/scripts/functions/sinit_functions b/scripts/functions/sinit_functions index f2e4933..c916b52 100755 --- a/scripts/functions/sinit_functions +++ b/scripts/functions/sinit_functions @@ -100,7 +100,7 @@ _keep(){ _e_report_back "The keep flag has been detected." _e_report_back "Making backup of, $1 before proceeding with purging" if [[ -d "$2" ]]; then - tar czvf "/var/tmp/gse/${_date_var}/$1.tar.bz2" "$2" >/dev/null 2>&1 \ + eval tar czvf "/var/tmp/gse/${_date_var}/$1.tar.bz2" "$2" "${_flag_silence}" \ && return 0 || return 1 elif [[ ! -d "$2" ]]; then cp "$2" "/var/tmp/gse/${_date_var}/$1" @@ -137,20 +137,6 @@ print_inf_f() { exit 1 } -repeat_part() { - while true; do - echo -e "\e[33mPart $1: Has been completed\e[0m" - echo "Run again? Y/N: " - read -rp "Input :: <= " YN - case "${YN}" in - [yN]) - return 0;; - [nN]) - return 1;; - esac - done -} - help_f() { echo "Gentoo Stateless Environment, version: ${GSEVER}" echo "Distributed under the GNU General Public License, V2" @@ -193,20 +179,6 @@ _extracting_catalyst() { || return 1 } -_repeat_subpart() { - while true; do - echo -e "\e[33m$1: Has been $2\e[0m" - echo "Run again? Y/N: " - read -rp "Input :: <= " YN - case "${YN}" in - [yN]) - return 0;; - [nN]) - return 1;; - esac - done -} - _clean_target() { inspector "$@" [[ -z "$(echo "$@" | grep 'workdir')" ]] && print_inf_f @@ -311,8 +283,8 @@ _pseudo_check_purge(){ [[ -n "$(grep "dist.d/workdir-" "/proc/mounts" | awk -F ' ' '{ print $2 }')" ]] \ && while true; do while read -r i; do - umount -l "$i"/* >/dev/null 2>&1 >/dev/null 2>&1 - umount -l "$i" >/dev/null 2>&1 >/dev/null 2>&1 + eval umount -l "$i"/* "${_flag_silence}" + eval umount -l "$i" "${_flag_silence}" done < <(grep 'dist.d/workdir-' "/proc/mounts" | awk -F ' ' '{ print $2 }') [[ -z $(grep "dist.d/workdir-" "/proc/mounts" | awk -F ' ' '{ print $2 }') ]] \ @@ -362,12 +334,12 @@ _extract_tarball() { mkdir -p "$2" echo -e "\e[34mExtracting tarball\e[0m" - if tar xvjpf "$1" -C "$2" --xattrs --numeric-owner >/dev/null 2>&1; then + if eval tar xvjpf "$1" -C "$2" --xattrs --numeric-owner "${_flag_silence}"; then echo -e "[\e[32m*\e[0m] Extracted" if echo "${_flag_base}" | grep -q 'catalyst'; then echo -e "\e[34mExtracting portage\e[0m" - if tar xvjpf "$3" --xattrs --numeric-owner -C "$2/usr/" >/dev/null 2>&1; then + if eval tar xvjpf "$3" --xattrs --numeric-owner -C "$2/usr/" "${_flag_silence}"; then echo -e "[\e[32m*\e[0m] Extracted" else die "Extracting portage FAILED" @@ -436,7 +408,7 @@ _export_latest() { _gentoo_key() { [[ -z "${GENTOOKEY}" ]] && die "Wrong Parameters" && return 1 - gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys >/dev/null 2>&1 ${GENTOOKEY} \ + eval gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys "${_flag_silence}" ${GENTOOKEY} \ && echo -e "[\e[32m*\e[0m]\e[32m Fetching Key\e[0m" \ || { echo -e "[\e[31m*\e[0m]\e[31m Fetching Key\e[0m"; return 1; } } @@ -453,7 +425,7 @@ _get_latest() { echo -e "[\e[34m*\e[0m] Marking stage3-${ARCH}-latest.tar.bz2.DIGESTS for purging" burn "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS" echo -e "[\e[32m*\e[0m] Fetching \e[34m${STAGE3TB}\e[0m" - wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" "${GENTOOLATEST}" >/dev/null 2>&1 \ + eval wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" "${GENTOOLATEST}" "${_flag_silence}" \ && echo "${STAGE3TB}" > "${CDISTDIR}/dists/latest.info" \ && pass || die "FAILED" else @@ -462,17 +434,17 @@ _get_latest() { && echo "${STAGE3TB}" > "${CDISTDIR}/dists/latest.info" \ && pass || die "FAILED" fi - wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS.asc" "${GENTOOLATESTASC}" >/dev/null 2>&1 \ + eval wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS.asc" "${GENTOOLATESTASC}" "${_flag_silence}" \ && echo -e "[\e[32m*\e[0m] Fetching \e[34m${GENTOOLATEST}\e[0m" \ || { echo -e "[\e[31m*\e[0m] \e[31mFAILD\e[0m: Fetching \e[34m${GENTOOLATEST}\e[0m"; exit 1; } - wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS" "${GENTOOLATEST}.DIGESTS" >/dev/null 2>&1 \ + eval wget -c -O "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS" "${GENTOOLATEST}.DIGESTS" "${_flag_silence}" \ && echo -e "[\e[32m*\e[0m] Fetching \e[34m${GENTOOLATEST}.DIGESTS\e[0m" \ || { echo -e "[\e[31m*\e[0m] \e[31mFAILD\e[0m: Fetching $\e[34m${GENTOOLATEST}.DIGESTS\e[0m"; exit 1; } } _verify_download() { - gpg --verify "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS.asc" >/dev/null 2>&1 \ + eval gpg --verify "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2.DIGESTS.asc" "${_flag_silence}" \ && echo -e "[\e[32m*\e[0m] Verifying \e[35mcryptographic signature\e[0m" \ || { echo -e "[\e[31m*\e[0m] \e[31mFAILD\e[0m: Verifying \e[31mcryptographic signature\e[0m"; exit 1; } @@ -488,34 +460,6 @@ _call_fetch_new() { _get_latest_snapshot "$@" } -_seed_net() { - if [[ -n "$(echo "${_lawful_args[@]}" | grep 'gseed')" ]]; then - _e_report_back "Fetch: Lawful entry detected, proceeding..." - else - if [[ $(echo "${_flag_network}") == 0 ]]; then - if [[ "$(awk -F '=' '/SEED/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 ]] || echo "$@" | grep -q 'force' || echo "${_enforce_args[@]}" | grep 'gseed'; then - if echo "${_enforce_args[@]}" | grep 'gseed'; then - _e_report_back "Fetch: Enforce entry detected, forcing..." - _fetch_new "$@" "force" || die "FAILED" - else - _fetch_new "$@" || die "FAILED" - fi - else - if _repeat_subpart "Tarball" "fetched"; then - _fetch_new "$@" || die "FAILED" - else - _e_report_back "Proceeding on next part..." - fi - fi - elif [[ ! -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then - die "No local tarball is present. Please enable network connection and try again" - elif [[ -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then - _e_report_back "Stage3 tarball located" - _e_report_back "Calling catalyst" - fi - fi -} - _call_force_new() { while true; do echo -e "\e[31mForce new parameter detected\e[0m" @@ -569,8 +513,8 @@ _unmount() { [[ -n "$(grep "dist.d/workdir-"$2 "/proc/mounts" | awk -F ' ' '{ print $2 }')" ]] \ && while true; do while read -r i; do - umount -l "$i"/* >/dev/null 2>&1 >/dev/null 2>&1 - umount -l "$i" >/dev/null 2>&1 >/dev/null 2>&1 + eval umount -l "$i"/* "${_flag_silence}" + eval umount -l "$i" "${_flag_silence}" done < <(grep 'dist.d/workdir-' "/proc/mounts" | awk -F ' ' '{ print $2 }') [[ -z $(grep "dist.d/workdir-"$2 "/proc/mounts" | awk -F ' ' '{ print $2 }') ]] \ @@ -598,136 +542,6 @@ _mount_proc() { || { echo -e "[\e[31m*\e[0m] Mounting proc"; die "Failed"; } } -# PREPARE THE BUILDERDIR AND INITIATE CHROOT, DIE IF ANYENTRY FAILS -_prepare_chroot() { - inspector "$@" - - rm -f "$1/etc/resolv.conf" - cp -L /etc/resolv.conf "$1/etc/" || die "Failed" - - if [[ -n $(echo "$@" | grep 'catalyst') ]]; then - # CHECK IF PSEUDOS ARE MOUNTED - if [[ -n $(cat /proc/mounts | grep 'dist.d/workdir-catalyst' | awk -F ' ' '{ print $1 }') ]]; then - echo -e "\e[31mPseudos possibly mounted at target directory\e[0m" - echo -e "\e[33mResolving the issue...\e[0m" - _unmount "catalyst" || die - fi - echo -e "\e[34mMounting pseudo\e[0m" - [[ -z $(grep 'dist.d/workdir-catalyst' /proc/mounts | awk -F ' ' '{ print $1 }') ]] \ - && _mount_proc "$1" || die - elif [[ -n $(echo "$@" | grep 'precomp') ]]; then - if [[ -n $(cat /proc/mounts | grep 'dist.d/workdir-precomp' | awk -F ' ' '{ print $1 }') ]]; then - echo -e "\e[31mPseudos possibly mounted at target directory\e[0m" - echo -e "\e[33mResolving the issue...\e[0m" - _unmount "precomp" || die - fi - echo -e "\e[34mMounting pseudo\e[0m" - [[ -z $(grep 'dist.d/workdir-precomp' /proc/mounts | awk -F ' ' '{ print $1 }') ]] \ - && _mount_proc "$1" || die - fi \ - && _mount_dev_sys "$1" "dev" \ - && _mount_dev_sys "$1" "sys" \ - || die "Something went wrong" - - mkdir -p "$1/sinit.d" - - [[ ! -e "$1/sinit.d/chsinprog" ]] && rsync -aAXr "${CWORKDIR}/scripts/chroot_scripts/" "$1/sinit.d/" >/dev/null 2>&1 \ - || rsync -aAXr --exclude="chsinprog" "${CWORKDIR}/scripts/chroot_scripts/" "$1/sinit.d/" >/dev/null 2>&1 \ - && rsync -aAXr "${CCONFDIR}/system/portage/" "$1/sinit.d/" >/dev/null 2>&1 \ - && rsync -aAXr --exclude="portage" "${CCONFDIR}/system/" "$1/sinit.d/" >/dev/null 2>&1 \ - && echo -e "[\e[32m*\e[0m] Copying \e[34mbuilder's\e[0m files to new system" \ - || { echo -e "[\e[31m*\e[0m] Copying \e[34mbuilder's\e[0m files to new system"; die "Failed"; } - - # CREATE REPOS.CONF DIRECOTRY & AND COPY REPOS.CONF TO IT - mkdir -p "$1/etc/portage/repos.conf" - cp "$1/usr/share/portage/config/repos.conf" "$1/etc/portage/repos.conf/gentoo.conf" || die - - # Set local timezone if set - if [[ -n $(cat /etc/timezone) ]]; then - TIMEZONE=$(cat /etc/timezone) - sed -i -e "s_TMZ_${TIMEZONE}_g" "$1/sinit.d/chinit.conf" - unset TIMEZONE - fi - - echo -e "[\e[32m*\e[0m] Copying requested files" - if [[ -n $(cat ${CCONFDIR}/system/inject_files | sed '/^#/ d' | sed '/^\s*$/d') ]]; then - - while read -r INJFL; do - f1="$(echo $INJFL | awk -F ' ' '{ print $1 }')" - f2="${BWORKDIR}/(echo $INJFL | awk -F ' ' '{ print $2 }')" - echo "Copying $f1 to $f2" - rsync -aAXPhrv "$f1" "$f2" >/dev/null 2>&1 \ - && pass || { mapfile -t INJFLERR < <($INJFL | awk -F ' ' '{ print $1 }'); } - done < <(cat "${CCONFDIR}/system/inject_files" | sed '/^#/ d' | sed '/^\s*$/d') - unset INJFL - - if [[ -n "${INJFLERR}" ]]; then - echo "Failed to copy the following packages: " - echo "${INJFLERR[@]}" - while true; do - echo "You can list the failed files again, continue, request terminal or exit" - echo "Please choose: LIST/CONTINUE/TERMINAL/EXIT" - read -rp "Input :: <= " INJFLANS - case "$INJFLANS" in - LIST) - clear; echo "${INJFLERR[@]}";; - CONTINUE) - while true; do - echo "Are you sure? Y/N " - read -p "Input :: <= " YN - case $YN in - [yY]) - echo "Proceeding" - INJFLESC=0 - break;; - [nN]) - INJFLESC=1 - ;; - esac - done;; - TERMINAL) - _subshell - INJFLESC=0;; - EXIT) - while true; do - echo "Are you sure? Y/N " - read -p "Input :: <= " YN - case $YN in - [yY]) - echo "Aborting..." - exit 0;; - [nN]) - INJFLESC=1 - break;; - esac - done;; - esac - [[ "$INJFLESC" == 0 ]] && break - done - fi - unset YN - unset INJFLESC - unset INJFLANS - unset INJFLERR - else - echo -e "[\e[32m*\e[0m] List empty" - fi - -# COPY THE SCRIPTS AND DOSCRIPTS AT CHROOTDIR - if [[ -n "${_flag_sdir}" ]]; then - mkdir -p "$1/sinit.d/cscripts" - rsync -aAXhrvq "${_flag_sdir_path}/" "$1/sinit.d/cscripts/" - chmod +x "$1/sinit.d/cscripts/"* - cp -r "${CLOCALLG}/doscripts" "$1/sinit.d/cscripts/doscripts" - fi - - echo -e "\e[34mChrooting at new system\e[0m" - sleep 0.5 - # PASS ALL PP AND INITIATE CHROOT - chroot "$1" "sinit.d/chroot_init" "$@" || { echo -e "[\e[31m*\e[0m] Chrooting configuration failed"; die; } \ - && sinit_flow_monitor "PARTB" -} - # THIS SCRIPT IS SOURCED AT THE BEGINING FOR CHECKING THE BUILDER'S RUNTIME DEPENDENCIES _lcreq() { CRDPENDS='' @@ -746,7 +560,7 @@ _lcreq() { || { echo -e "[\e[33m*\e[0m] \e[35mPlease install eix to proceed!\e[0m" \ && { _am_i_root_sub "$UID" && echo -e "[\e[32m*\e[0m] Root privileges found" \ && emerge -aq eix && echo -e "[\e[33m*\e[0m] \e[35mUpdating database\e[0m" \ - && eix-sync -a >/dev/null 2>&1; } \ + && eval eix-sync -a "${_flag_silence}"; } \ || { echo -e "[\e[31m*\e[0m] Could not get root privileges" \ && echo "Please resolve this issue and start again" && exit 1; }; } @@ -754,7 +568,7 @@ _lcreq() { for i in "${lreq[@]}"; do sleep 0.1 - if eix --installed "$i" >/dev/null 2>&1; then + if eval eix --installed "$i" "${_flag_silence}"; then echo -e "[\e[32m*\e[0m] Searching for \e[32m$i\e[0m" else echo -e "[\e[31m*\e[0m] Searching for $i" @@ -771,7 +585,7 @@ _lcreq() { for i in "${lreq[@]}"; do sleep 0.1 - if command -v "$i" >/dev/null 2>&1; then + if eval command -v "$i" "${_flag_silence}"; then echo -e "[\e[32m*\e[0m] Searching for \e[32m$i\e[0m" else echo -e "[\e[31m*\e[0m] Searching for $i" @@ -889,7 +703,7 @@ librarium() { _flag_verbose='' _flag_quiet='' _flag_test='' - _flag_silent='' + _flag_silence='' _flag_network='' _flag_mm='' _flag_do='' @@ -1327,7 +1141,7 @@ warp() { "$_flag_quiet" \ "$_flag_test" "$_flag_network") - # STAGE A + # STAGE A & B # THIS LIST WILL BE EXPORTED TO THE SOURCED SINIT BUILDER SCRIPT _flags_stagea=() @@ -1344,24 +1158,38 @@ warp() { "_flag_quiet" \ "_flag_test" \ "_flag_network" \ - "_flag_base") + "_flag_sdir") for i in "${_flags_listA[@]}"; do if [[ "$(echo ${!i})" == 0 ]]; then _flags_stagea+=("${i}") fi done - + + if [[ "${_silence}" == 0 ]]; then + _flag_silence='>/dev/null 2>&1' + export _flag_silence + elif [[ "${_silence}" == 1 ]]; then + _flag_silence='' + set -x + export _flag_silence + elif [[ "${_silence}" == 9 ]]; then + _flag_silence='' + export _flag_silence + fi + + _flags_stagea+=("${_flag_base}") if [[ -n "${_flag_base}" ]]; then - source "${CWORKDIR}/scripts/sinit" "${_flags_stagea[@]}" + if [[ -n "${_flag_sdir}" ]]; then + source "${CWORKDIR}/scripts/sinit" "${_flags_stagea[@]}" + else + source "${CWORKDIR}/scripts/sinit" "${_flags_stagea[@]}" + fi elif [[ -z "${_flag_base}" && -n "${_flag_fetch}" ]]; then _call_fetch_new "$@" fi - # STAGE B - # STAGE C - } _do_rs() { @@ -1370,3 +1198,184 @@ _do_rs() { done < <(grep "$1" "${CLOCALLG}/doscripts" | sed '/^#/ d' | sed '/^\s*$/d' | awk -F ':' '{ print $2 }') } +_do_hs() { + if grep -q "$1" "${CLOCALLG}/doscripts" && [[ -n "${_flag_sdir}" ]]; then + _e_report_back "Sourcing scripts $2 $3" + _do_rs "$1" + fi +} + +_repeat_part() { + while true; do + echo -e "\e[33m$1: Has been completed\e[0m" + echo "Run again? Y/N: " + read -rp "Input :: <= " YN + case "${YN}" in + [yN]) + return 0;; + [nN]) + return 1;; + esac + done +} + +_call_hook_points() { + if echo "${_lawful_args[@]}" | grep -q "$2"; then + _e_report_back "Lawful entry detected on $2, proceeding..." + else + if [[ "$(grep "$1" "${CLOCALLG}/sinprog" | awk -F '=' '{ print $2 }')" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q "$2"; then + if [[ -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q "$2"; then + _e_report_back "Force entry detected on $3, forcing..." + eval "$4" "${@:5}" "force" || die + else + eval "$4" "${@:5}" || die + fi + else + if _repeat_part "$3"; then + eval "$4" "${@:5}" + else + _e_report_back "Proceeding" + fi + fi + fi +} + +# PREPARE THE BUILDERDIR AND INITIATE CHROOT, DIE IF ANYENTRY FAILS +_prepare_chroot() { + inspector "$@" + + if [[ ! -e "$1" ]]; then + _e_report_back "No workdir can be detected. Seems like $1 does not exist." + _e_report_back "This can occur when Part: A is skipped." + _e_report_back "If that's not the case, please submit a bug report, otherwise repeat the process without skipping Part: A" + die "No workdir detected" + fi + + rm -f "$1/etc/resolv.conf" + cp -L /etc/resolv.conf "$1/etc/" || die "Failed" + + if [[ -n $(echo "$@" | grep 'catalyst') ]]; then + # CHECK IF PSEUDOS ARE MOUNTED + if [[ -n $(cat /proc/mounts | grep 'dist.d/workdir-catalyst' | awk -F ' ' '{ print $1 }') ]]; then + echo -e "\e[31mPseudos possibly mounted at target directory\e[0m" + echo -e "\e[33mResolving the issue...\e[0m" + _unmount "catalyst" || die + fi + echo -e "\e[34mMounting pseudo\e[0m" + [[ -z $(grep 'dist.d/workdir-catalyst' /proc/mounts | awk -F ' ' '{ print $1 }') ]] \ + && _mount_proc "$1" || die + elif [[ -n $(echo "$@" | grep 'precomp') ]]; then + if [[ -n $(cat /proc/mounts | grep 'dist.d/workdir-precomp' | awk -F ' ' '{ print $1 }') ]]; then + echo -e "\e[31mPseudos possibly mounted at target directory\e[0m" + echo -e "\e[33mResolving the issue...\e[0m" + _unmount "precomp" || die + fi + echo -e "\e[34mMounting pseudo\e[0m" + [[ -z $(grep 'dist.d/workdir-precomp' /proc/mounts | awk -F ' ' '{ print $1 }') ]] \ + && _mount_proc "$1" || die + fi \ + && _mount_dev_sys "$1" "dev" \ + && _mount_dev_sys "$1" "sys" \ + || die "Something went wrong" + + mkdir -p "$1/sinit.d" + + [[ ! -e "$1/sinit.d/chsinprog" ]] && eval rsync -aAXr "${CWORKDIR}/scripts/chroot_scripts/" "$1/sinit.d/" "${_flag_silence}" \ + || rsync -aAXr --exclude="chsinprog" "${CWORKDIR}/scripts/chroot_scripts/" "$1/sinit.d/" "${_flag_silence}" \ + && eval rsync -aAXr "${CCONFDIR}/system/portage/" "$1/sinit.d/" "${_flag_silence}" \ + && eval rsync -aAXr --exclude="portage" "${CCONFDIR}/system/" "$1/sinit.d/" "${_flag_silence}" \ + && echo -e "[\e[32m*\e[0m] Copying \e[34mbuilder's\e[0m files to new system" \ + || { echo -e "[\e[31m*\e[0m] Copying \e[34mbuilder's\e[0m files to new system"; die "Failed"; } + + # CREATE REPOS.CONF DIRECOTRY & AND COPY REPOS.CONF TO IT + mkdir -p "$1/etc/portage/repos.conf" + cp "$1/usr/share/portage/config/repos.conf" "$1/etc/portage/repos.conf/gentoo.conf" || die + + # Set local timezone if set + if [[ -n $(cat /etc/timezone) ]]; then + TIMEZONE=$(cat /etc/timezone) + sed -i -e "s_TMZ_${TIMEZONE}_g" "$1/sinit.d/chinit.conf" + unset TIMEZONE + fi + + echo -e "[\e[32m*\e[0m] Copying requested files" + if [[ -n $(cat ${CCONFDIR}/system/inject_files | sed '/^#/ d' | sed '/^\s*$/d') ]]; then + + while read -r INJFL; do + f1="$(echo $INJFL | awk -F ' ' '{ print $1 }')" + f2="${BWORKDIR}/(echo $INJFL | awk -F ' ' '{ print $2 }')" + echo "Copying $f1 to $f2" + eval rsync -aAXPhrv "$f1" "$f2" "${_flag_silence}" \ + && pass || { mapfile -t INJFLERR < <($INJFL | awk -F ' ' '{ print $1 }'); } + done < <(cat "${CCONFDIR}/system/inject_files" | sed '/^#/ d' | sed '/^\s*$/d') + unset INJFL + + if [[ -n "${INJFLERR}" ]]; then + echo "Failed to copy the following packages: " + echo "${INJFLERR[@]}" + while true; do + echo "You can list the failed files again, continue, request terminal or exit" + echo "Please choose: LIST/CONTINUE/TERMINAL/EXIT" + read -rp "Input :: <= " INJFLANS + case "$INJFLANS" in + LIST) + clear; echo "${INJFLERR[@]}";; + CONTINUE) + while true; do + echo "Are you sure? Y/N " + read -p "Input :: <= " YN + case $YN in + [yY]) + echo "Proceeding" + INJFLESC=0 + break;; + [nN]) + INJFLESC=1 + ;; + esac + done;; + TERMINAL) + _subshell + INJFLESC=0;; + EXIT) + while true; do + echo "Are you sure? Y/N " + read -p "Input :: <= " YN + case $YN in + [yY]) + echo "Aborting..." + exit 0;; + [nN]) + INJFLESC=1 + break;; + esac + done;; + esac + [[ "$INJFLESC" == 0 ]] && break + done + fi + unset YN + unset INJFLESC + unset INJFLANS + unset INJFLERR + else + echo -e "[\e[32m*\e[0m] List empty" + fi + + # COPY THE SCRIPTS AND DOSCRIPTS AT CHROOTDIR + if [[ -n "${_flag_sdir}" ]]; then + mkdir -p "$1/sinit.d/cscripts" + rsync -aAXhrvq "${_flag_sdir_path}/" "$1/sinit.d/cscripts/" + chmod +x "$1/sinit.d/cscripts/"* + cp -r "${CLOCALLG}/doscripts" "$1/sinit.d/cscripts/doscripts" + fi + + echo -e "\e[34mChrooting at new system\e[0m" + sleep 0.5 + # PASS ALL PP AND INITIATE CHROOT + if chroot "$1" "sinit.d/chroot_init" "$@"; then + _o_report_back "Chroot staged finished" + else + die "Chrooting configuration failed" + fi +} diff --git a/scripts/sinit b/scripts/sinit index 2e342f3..5d9f70b 100755 --- a/scripts/sinit +++ b/scripts/sinit @@ -11,10 +11,11 @@ if [[ -z "${_flag_base}" ]]; then _e_report_back "See man 1 gse for base options." die "Aborting actions..." fi + +# ENVIROMENTAL ECHO FOR TESTING echo "$@" + # STAGE A -# CHECK POSITIONAL PARAMETERS -inspector "$@" clear echo "============================================================================" echo -e "\e[35m PART:A Fundamentals\e[0m" @@ -25,6 +26,9 @@ source "${CWORKDIR}/etc/gentoo.conf" >/dev/null 2>&1 \ && echo -e "[\e[32m*\e[0m] \e[35mExporting variables\e[0m" \ || { echo -e "[\e[31m*\e[0m] \e[35mExporting variables\e[0m"; echo -e "\e[31mAborting\e[0m..."; sleep 2; return 1; } +# CHECK POSITIONAL PARAMETERS +inspector "$@" + # PART A FUNDAMENTALS _part_a() { # CHECK IF THERE IS ANY WORK DONE @@ -45,171 +49,95 @@ _part_a() { # CALL CATALYST BUILD OR PRECOMPILED BUILD case "${_flag_base}" in catalyst) - - if grep -q '\-gseed' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before gseed" - _do_rs '\-gseed' - fi - - if _seed_net "$@"; then - sinit_flow_monitor "SEED" - fi - - if grep -q '\+gseed' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after gseed" - _do_rs '\+gseed' - fi - - if grep -q '\-gcat' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before catalyst" - _do_rs '\-gcat' - fi - - if echo "${_lawful_args[@]}" | grep -q 'gcat'; then - _e_report_back "Catalyst: Lawful entry detected, proceeding..." - else - if [[ "$(awk -F '=' '/CATALYST/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 ]] || echo "$@" | grep -q 'force' || echo "${_enforce_args[@]}" | grep -q 'gcat'; then - if echo "${_enforce_args[@]}" | grep -q 'gcat'; then - _e_report_back "Catalyst: Enforce entry detected, forcing..." - _callying_catalyst "$@" "force" || die - sinit_flow_monitor "CATALYST" + + # PART NETWORK SEED + _do_hs '\-gseed' "before" "seed part" + _seed_net() { + if [[ $(echo "${_flag_network}") == 0 ]]; then + if _call_hook_points 'SEED' 'gseed' 'Part: Fetch tarball' "_fetch_new" "$@"; then + sinit_flow_monitor "SEED" else - _callying_catalyst "$@" || die - sinit_flow_monitor "CATALYST" - fi - else - if _repeat_subpart "Catalyst" "configured"; then - _callying_catalyst "$@" || die - else - echo -e "\e[33mProceeding with extraction...\e[0m" + die "Fetching tarball FAILED" fi + elif [[ ! -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then + die "No local tarball is present. Please enable network connection and try again" + elif [[ -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then + _e_report_back "Stage3 tarball located" + _e_report_back "Calling catalyst" fi - fi + } + _do_hs '\+gseed' "after" "seed part" - if grep -q '\+gcat' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after catalyst" - _do_rs '\+gcat' - fi - - if grep -q '\-gextr' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before extraction" - _do_rs '\-gextr' + # PART CATALYST + _do_hs '\-gcat' "before" "catalyst part" + if _call_hook_points 'CATALYST' 'gcat' 'Part: Catalyst' "_callying_catalyst" "$@"; then + sinit_flow_monitor "CATALYST" + else + die "Part: Catalyst FAILED" fi + _do_hs '\+gcat' "after" "Catalyst" - if echo "${_lawful_args[@]}" | grep -q 'gextr'; then - _e_report_back "Extraction: Lawful entry detected, proceeding..." + # PART CATALYST STAGE3 AND PORTAGE SNAPSHOT EXTRACTION + _do_hs '\-gextr' "before" "Catalyst Extraction" + if _call_hook_points 'EXTRACTION' 'gextr' 'Part: Catalyst Extraction' "_extracting_catalyst" "$@"; then + sinit_flow_monitor "EXTRACTION" else - if [[ "$(awk -F '=' '/EXTRACTION/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 ]] || echo "$@" | grep -q 'force'; then - if echo "${_enforce_args[@]}" | grep -q 'gextr'; then - _e_report_back "Extraction: Enforce entry detected, forcing..." - _extracting_catalyst "$@" "force" || die - sinit_flow_monitor "EXTRACTION" - else - _extracting_catalyst "$@" || die - sinit_flow_monitor "EXTRACTION" - fi - else - if _repeat_subpart "Extraction" "completed"; then - _extracting_catalyst "$@" || die - else - echo -e "\e[33mProceeding to Part: B...\e[0m" - fi - fi + die "Part: Catalyst Extraction FAILED" fi + _do_hs '\+gextr' "after" "Catalyst Extraction" unset CATDIR unset TARGETNAME unset TARGETPATH unset TARGETSTAMP - - if grep -q '\+gextr' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after extraction" - _do_rs '\+gextr' - fi;; + ;; precomp) - if grep -q '\-gseed' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before gseed" - _do_rs '\-gseed' - fi - - if _seed_net "$@"; then - sinit_flow_monitor "SEED" - fi - - if grep -q '\+gseed' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after gseed" - _do_rs '\+gseed' - fi - - if grep -q '\-gprec' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before precomp extraction" - _do_rs '\-gprec' - fi - - if echo "${_lawful_args[@]}" | grep -q 'gprec'; then - _e_report_back "Precomp: Lawful entry detected, proceeding..." - else - if [[ "$(awk -F '=' '/PRECOMP/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 ]] || echo "$@" | grep -q 'force'; then - if echo "${_enforce_args[@]}" | grep -q 'gprec'; then - _e_report_back "Precomp: Enforce entry detected, forcing..." - _workdir_check "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" \ - "${CDISTDIR}/workdir-precomp" "$@" "force" || die - sinit_flow_monitor "PRECOMP" + # PART NETWORK SEED + _do_hs '\-gseed' "before" "seed part" + _seed_net() { + if [[ $(echo "${_flag_network}") == 0 ]]; then + if _call_hook_points 'SEED' 'gseed' 'Part: Fetch tarball' "_fetch_new" "$@"; then + sinit_flow_monitor "SEED" else - _workdir_check "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" \ - "${CDISTDIR}/workdir-precomp" "$@" || die - sinit_flow_monitor "PRECOMP" - fi - else - if _repeat_subpart "Precomp Extraction" "completed"; then - _workdir_check "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" \ - "${CDISTDIR}/workdir-precomp" "$@" || die - else - echo -e "\e[33mProceeding to Part: B...\e[0m" + die "Fetching tarball FAILED" fi + elif [[ ! -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then + die "No local tarball is present. Please enable network connection and try again" + elif [[ -e "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" ]]; then + _e_report_back "Stage3 tarball located" + _e_report_back "Calling catalyst" fi + } + _do_hs '\+gseed' "after" "seed part" + + # PART PRECOMP STAGE3 EXTRACTION + _prec_workdir_function() { + _workdir_check "$1" "$2" "${@:3}" || die + } + + _do_hs '\-gprec' "before" "Precomp extraction" + if _call_hook_points 'PRECOMP' 'gprec' 'Part: prec' "_prec_workdir_function" "${CDISTDIR}/dists/stage3-${ARCH}-latest.tar.bz2" "${CDISTDIR}/workdir-precomp" "$@"; then + sinit_flow_monitor "PRECOMP" + else + die "Part: Precomp FAILED" fi - - if grep -q '\+gprec' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after precomp extraction" - _do_rs '\+gprec' - fi;; + _do_hs '\+gprec' "after" "Precomp extraction" + ;; esac } -if grep -q '\-gparta' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before Part: A" - _do_rs '\-gparta' -fi - -if echo "${_lawful_args[@]}" | grep -q 'gparta'; then - _e_report_back "Lawful entry detected on parta, proceeding..." -else - if [[ "$(awk -F '=' '/PARTA/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 || -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gparta'; then - if [[ -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gparta'; then - _e_report_back "Force entry detected on part a, forcing..." - _part_a "$@" "force" || die - sinit_flow_monitor "PARTA" - else - _part_a "$@" || die - sinit_flow_monitor "PARTA" - fi - else - if repeat_part "A"; then - _part_a "$@" - else - _e_report_back "Proceeding with part b" - fi - fi -fi - -if grep -q '\+gparta' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after Part: A" - _do_rs '\+gparta' +# PART A BEGINS +_do_hs '\-gparta' "before" "Part: A" +if _call_hook_points 'PARTA' "gparta" 'Part: A' "_part_a" "$@"; then + sinit_flow_monitor "PARTA" +else + die "Part: A FAILED" fi +_do_hs '\+gparta' "after" "Part: A" +# EXPORT WORKDIR case "${_flag_base}" in catalyst ) BWORKDIR="${CDISTDIR}/workdir-catalyst";; @@ -217,62 +145,40 @@ case "${_flag_base}" in BWORKDIR="${CDISTDIR}/workdir-precomp";; esac -echo "============================================================================" -echo -e "\e[35m PART: B Preparing to enter the new system\e[0m" -echo "============================================================================" +# PART B FUNCTION +_part_b() { -_am_i_root "$UID" && echo -e "[\e[32m*\e[0m] Requesting root privileges" \ -|| { echo -e "[\e[31m*\e[0m] Requesting root privileges"; exit 1; } + echo "============================================================================" + echo -e "\e[35m PART: B Preparing to enter the new system\e[0m" + echo "============================================================================" + + if _am_i_root "$UID"; then + echo -e "[\e[32m*\e[0m] Requesting root privileges" + else + die "Requesting root privileges" + fi -_part_b() { if _prepare_chroot "$@"; then - if grep -q '\-gclean' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before cleanup" - _do_rs '\-gclean' - fi + _do_hs '\-gclean' "before" "clean part" _clean_target "$@" || die - if grep -q '\+gclean' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after cleanup" - _do_rs '\+gclean' - fi - - sinit_flow_monitor "PARTB" + _do_hs '\+gclean' "after" "clean part" else die "Cleaning failed" fi } -if grep -q '\-gpartb' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts before Part: B" - _do_rs '\-gpartb' -fi - -if echo "${_lawful_args[@]}" | grep -q 'gpartb'; then - _e_report_back "Lawful entry detected on part b, proceeding..." -else - if [[ "$(awk -F '=' '/PARTB/{ print $2 }' < "${CLOCALLG}/sinprog")" == 0 || -n "${_flag_start_new}" ]] || echo "${_enforce_args[@]}" | grep 'gpartb'; then - if [[ -n "${_flag_force_new}" ]] || echo "${_enforce_args[@]}" | grep -q 'gparta'; then - _e_report_back "Force entry detected on partb, forcing..." - _part_b "${BWORKDIR}" "$@" "${_flag_base}" 'cforce' - else - _part_b "${BWORKDIR}" "$@" "${_flag_base}" - fi - else - if repeat_part "B"; then - _part_b "${BWORKDIR}" "$@" "${_flag_base}" - else - _e_report_back "Proceeding..." - fi - fi -fi - -if grep -q '\+gpartb' "${CLOCALLG}/doscripts"; then - _e_report_back "Sourcing scripts after Part: B" - _do_rs '\+gpartb' +# PART B BEGINS +_do_hs '\-gpartb' "before" "Part: B" +if _call_hook_points 'PARTB' "gpartb" 'Part: B' "_part_b" "${BWORKDIR}" "$@"; then + sinit_flow_monitor "PARTB" +else + die "Part: B FAILED" fi +_do_hs '\+gpartb' "after" "Part: B" +exit umount -l "${BWORKDIR}/"* umount -l "${BWORKDIR}/"* umount -l "${BWORKDIR}/"* |