/usr/sbin/ocs-live-final-action is in clonezilla 3.27.16-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | #!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL
# //NOTE// Do not put poweroff/reboot in this program since it's run in jfbterm/bterm. We separate the final action from ocs-live-final-action. Otherwise if the poweroff command run in jfbterm/bterm, the Debian live "Press Enter" message after poweroff/shutdown command is issued might be coverd by jfbterm/bterm and user will not have any idea what's happening after choose poweroff/reboot.
# We need to know ocsroot.
DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/usr/share/drbl}"
. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
. /etc/drbl/drbl-ocs.conf
. $DRBL_SCRIPT_PATH/sbin/ocs-functions
# Load the options from config file
[ -e /etc/ocs/ocs-live.conf ] && . /etc/ocs/ocs-live.conf
# Settings
# Default we will check if $ocsroot is a mountpoint after the mount action is done.
chk_ocsroot_mountpont="yes"
cmdl_file_def="/proc/cmdline"
# Functions
USAGE() {
echo "$ocs - To choose the final action (poweroff, reboot, command line prompt...) and put the output in a file"
echo "Usage:"
echo "To run $ocs:"
echo "$ocs OUTPUT_FILE"
echo "Ex:"
echo "To choose the final action and put the output to the file /tmp/my-selection.txt, run"
echo " $ocs /tmp/my-selection.txt"
} # end of USAGE
#
ask_final_action() {
# ocs_postmode_prompt is loaded from ocs-live.conf.
if [ "$ocs_postmode_prompt" = "cmd" ]; then
echo "$msg_clone_finished_choose_to:"
echo "(0) $msg_poweroff"
echo "(1) $msg_reboot"
echo "(2) $msg_enter_cml"
echo "(3) $msg_run_clonezilla_live_again"
if mountpoint $ocsroot &>/dev/null; then
echo "(4) $msg_run_clonezilla_live_again_but_keep_mounted_repository"
echo "(5) $msg_run_clonezilla_live_again_but_remounted_subdir"
fi
echo -n "[2] "
read final_action_no
case "$final_action_no" in
0) final_action="poweroff";;
1) final_action="reboot";;
3) final_action="rerun1";;
4) final_action="rerun2";;
5) final_action="rerun3";;
*) final_action="cmd";;
esac
else
# Default to use TUI mode
TMP="$(mktemp /tmp/ocs_final_act.XXXXXX)"
if mountpoint $ocsroot &>/dev/null; then
repo_dev_="$(findmnt -Un -o source -T $ocsroot)"
rerun2_ocs_with_repo_mounted_1="rerun2"
rerun2_ocs_with_repo_mounted_2="$(rep_whspc_w_udrsc "$msg_run_clonezilla_live_again_but_keep_mounted_repository")"
rerun3_ocs_with_repo_mounted_1="rerun3"
rerun3_ocs_with_repo_mounted_2="$(rep_whspc_w_udrsc "$msg_run_clonezilla_live_again_but_remounted_subdir: $repo_dev_")"
fi
final_action_flag=1
while [ "$final_action_flag" -ne 0 ]; do
$DIA --default-item "cmd" --nocancel --backtitle "Free Software Labs, NCHC, Taiwan" --title \
"Choose mode" --menu "$msg_clone_finished_choose_to:" \
0 0 0 \
poweroff "$msg_poweroff" \
reboot "$msg_reboot" \
cmd "$msg_enter_cml" \
rerun1 "$msg_run_clonezilla_live_again" \
$rerun2_ocs_with_repo_mounted_1 $rerun2_ocs_with_repo_mounted_2 \
$rerun3_ocs_with_repo_mounted_1 $rerun3_ocs_with_repo_mounted_2 \
2> $TMP
final_action="$(cat $TMP)"
if [ -z "$lang" ]; then
final_action_flag=1
else
final_action_flag=0
fi
done
[ -f "$TMP" ] && rm -f $TMP
fi
} # end of ask_final_action
#
do_ocs_live_run_final() {
# //NOTE// Do not put poweroff/reboot in this program since it's run in jfbterm/bterm. We separate the final action from ocs-live-final-action. Otherwise if the poweroff command run in jfbterm/bterm, the Debian live "Press Enter to continue" message after poweroff/shutdown command is issued might be coverd by jfbterm/bterm and user will not have any idea what's happening after choose poweroff/reboot.
[ -n "$final_action" ] && echo "The next step: $final_action"
case "$final_action" in
poweroff) unmount_mounted_fs_before_ocs_live_reboot
echo -n 'Will poweroff (Press Ctrl-C to abort)... '
countdown 7
poweroff $HALT_REBOOT_OPT ;;
reboot) unmount_mounted_fs_before_ocs_live_reboot
echo -n 'Will reboot (Press Ctrl-C to abort)... '
countdown 7
reboot $HALT_REBOOT_OPT ;;
rerun*) # umount the clonezilla home dir
if [ "$final_action" = "rerun1" ]; then
echo "Completely start over, so umounting $ocsroot..."
# Clean tag file for ocs-live-repository so it can be remounted again.
rm -f /var/lib/clonezilla/ocs-live-repository
unmount_mounted_fs_before_ocs_live_reboot
elif [ "$final_action" = "rerun3" ]; then
echo "$msg_remount_subdir"
ocs-live-bind-mount
[ "$chk_ocsroot_mountpont" = "yes" ] && check_if_ocsroot_a_mountpoint
else
echo "Keep the mounted image repository $ocsroot..."
fi
echo -n 'Run Clonezilla live again... '
# since we are not in login shell, it's useless to use "exit" or "logout" to force logout bash. Use kill to terminate the login shell in tty1. The clonezilla live main menu will be run again.
if [ -n "$ocs_live_run_tty" ]; then
# ocs_live_run_tty is like: /dev/tty2, /dev/pts/2 (very unlikely)
ttys="$(LC_ALL=C echo $ocs_live_run_tty | sed -e "s|/dev/||g")"
else
ttys="tty1"
fi
for i in $ttys; do
tty_bash_id="$(LC_ALL=C ps -t $i | grep bash | awk -F" " '{print $1}')"
kill -9 $tty_bash_id
done
;;
*) echo ;;
esac
} # end of do_ocs_live_run_final
#
decide_final_action_from_cmdline_and_user_assign() {
# First find if ocs_final_action is assigned in cmdline
parse_cmdline_option -c $cmdl_file "ocs_final_action"
if [ -n "$ocs_final_action" ]; then
final_action="$ocs_final_action"
fi
# Then find if user has assigned it in ocs-sr. This may overwrite the one assigned in boot parameter.
if [ -e /var/lib/clonezilla/ocs-vars ]; then
. /var/lib/clonezilla/ocs-vars
if [ -n "$postaction" ]; then
final_action="$postaction"
fi
fi
} # end of decide_final_action_from_cmdline_and_user_assign
####################
### Main program ###
####################
ocs=`basename $0`
#
while [ $# -gt 0 ]; do
case "$1" in
-c|--cmdline-file)
shift
if [ -z "$(echo $1 |grep ^-.)" ]; then
# skip the -xx option, in case
cmdl_file="$1"
shift
fi
[ -z "$cmdl_file" ] && echo "-c is used, but no cmdl_file assigned." && exit 1
;;
-*) echo "${0}: ${1}: invalid option" >&2
USAGE >& 2
exit 2 ;;
*) break ;;
esac
done
#
input_status="$1"
ask_and_load_lang_set $ocs_lang
# check DIA
check_DIA_set_ESC $DIA
#
[ -z "$cmdl_file" ] && cmdl_file="$cmdl_file_def"
if [ ! -e "$cmdl_file" ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "Kernel cmdline file ($cmdl_file) does _NOT_ exist!"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_program_stop!"
exit 1
fi
if [ -n "$input_status" ]; then
# The input status is the return code
if [ "$input_status" -eq 0 ]; then
# Normal exit.
decide_final_action_from_cmdline_and_user_assign
elif [ "$input_status" -eq 99 ]; then
final_action="cmd"
else
# Fail. Exit code is not 0
final_action="choose"
fi
else
# input status unknown.
decide_final_action_from_cmdline_and_user_assign
fi
# If final_action is still unknown or is "choose", ask it.
if [ -z "$final_action" -o "$final_action" = "choose" ]; then
ask_final_action
fi
do_ocs_live_run_final
|