%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/thread-self/root/lib/recovery-mode/
Upload File :
Create Path :
Current File : //proc/thread-self/root/lib/recovery-mode/recovery-menu

#!/bin/bash

if [ ! -x "$(which whiptail)" ]; then
  echo "Couldn't find whiptail, starting root shell instead of recovery menu."
  sulogin
  clear
  exit
fi

systemd-notify --ready || :

# include gettext stuff
. /lib/recovery-mode/l10n.sh

# main
READONLY=true

while true; do
  unset items

  if [ "$READONLY" = "true" ]; then
    menu_text=$(eval_gettext "Recovery Menu (filesystem state: read-only)")
  else
    menu_text=$(eval_gettext "Recovery Menu (filesystem state: read/write)")
  fi

  items[c++]="resume"
  items[c++]=$(eval_gettext "   Resume normal boot")

  for i in /lib/recovery-mode/options/*; do
    if [ -x "$i" ]; then
      name="`"$i" test`"
      if [ $? -eq 0 ]; then
        items[c++]="${i##*/}"
        items[c++]="   $name"
      fi
    fi
  done

  choice="$(whiptail --nocancel --menu "$menu_text" 18 70 10 \
                             "${items[@]}" \
                             3>&1 1>&2 2>&3 3>&-)"

  if [ -z "$choice" ]; then
    continue
  fi

  if [ "$choice" = "resume" ]; then
    box_text=$(eval_gettext "You are now going to exit the recovery mode and continue the boot sequence. Please note that some graphic drivers require a full graphical boot and so will fail when resuming from recovery.
If that's the case, simply reboot from the login screen and then perform a standard boot.")
    whiptail --msgbox "$box_text" 12 70
    clear
    touch /run/friendly_recovery.resume
    systemctl daemon-reload
    systemctl --no-block isolate default.target
    exit
  fi

  /lib/recovery-mode/options/$choice test mode >/dev/null 2>&1
  retval=$?

  # Hack for the fsck case (needs to be cosidered read/write only when
  # in read-only mode and read-only only when in read/write mode)
  if [ "$choice" = "fsck" ] && [ "$READONLY" = "false" ]; then
    retval=1
  fi

  case "$retval" in
    0)
      # 0 => requires read/write
      if [ "$READONLY" = "true" ]; then
        box_text=$(eval_gettext "Continuing will remount your / filesystem in read/write mode and mount any other filesystem defined in /etc/fstab.
Do you wish to continue?")
        whiptail --yesno "$box_text" 10 70 || continue

        if [ "$choice" = "fsck" ]; then
            FSCHECK="true"
        fi

        . /etc/default/rcS
        if [ -d /run/systemd/system ]; then
            [ "$FSCKFIX" = "yes" ] && fsck_mode="-y" || fsck_mode='-a'
            [ "$FSCHECK" = "true" ] || [ -f /forcefsck ] && fsck $fsck_mode
            systemctl start --job-mode=ignore-dependencies systemd-remount-fs.service
            mount -a
        else
            [ "$FSCHECK" = "true" ] || [ -f /forcefsck ] && force_fsck="--force-fsck"
            [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"
            mountall $force_fsck $fsck_fix --no-events
        fi
        rm -f /forcefsck

        if [ "$choice" = "fsck" ]; then
          echo ""
          echo $(eval_gettext "Finished, please press ENTER")
          read TMP
        fi

        READONLY=false
      fi
    ;;

    1)
      # 1 => read-only only
      if [ "$READONLY" = "false" ]; then
        box_text=$(eval_gettext "The option you selected requires your filesystem to be in read-only mode. Unfortunately another option you selected earlier, made you exit this mode.
The easiest way of getting back in read-only mode is to reboot your system.")
        whiptail --msgbox "$box_text" 12 70
        continue
      fi
    ;;

    2)
      # 2 => works in all cases
      # nothing to do
    ;;
  esac

  export READONLY
  /lib/recovery-mode/options/$choice
done

Zerion Mini Shell 1.0