/usr/sbin/ocs-live-run-menu is in clonezilla 3.21.13-1.
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 210 211 212 213 214 215 216 217 218 219 220 | #!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL
# 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
# Set initial value if not set
[ -z "$ocs_live_run" ] && ocs_live_run="ocs-live-general"
[ -z "$ocs_live_keymap" ] && ocs_live_keymap="NONE"
[ -z "$ocs_live_batch" ] && ocs_live_batch="no"
[ -z "$ocs_lang" ] && ocs_lang="en_US.UTF-8"
#
if [ -z "$ocs_live_run" ]; then
echo "No \$ocs_live_run was assigned (Either from /etc/ocs/ocs-live.conf or command kernel parameters). Skip Clonezilla-related action."
exit 3
fi
# Get the live media mount point.
get_live_media_mnt_point
if [ -z "$LIVE_MEDIA" -o ! -d "/$LIVE_MEDIA" ]; then
echo "$0 is run in Clonezilla Live!"
echo "Program terminated!"
exit 1
fi
#
get_fb_term
[ "$fb_term" = "bterm" -a ! -e "$uni_font" ] && exit 1
use_fb_term=""
# Ex. zh_TW.UTF-8 -> zh_TW
locale_region="$(echo "$ocs_lang" | sed -e "s|\..*||g")"
if `locale_required_bterm_or_not "$locale_region"` && \
[ -n "$fb_term" ] && \
([ -e /dev/fb/0 ] || [ -e /dev/fb0 ]); then
use_fb_term="yes"
else
use_fb_term="no"
fi
#
gen_locale_if_not_found $locale_region $ocs_lang
# export these variables so that they can be passed to $ocs_live_run in bterm
export LANG="$ocs_lang"
export CURRENT_TTY="$(tty)" # e.g. /dev/tty1
# By default we will run $ocs_live_run in /dev/tty1 if ocs_live_run_tty is not specified.
if [ -n "$ocs_live_run_tty" ]; then
# tty is specified. Check if it the current tty
[ "$CURRENT_TTY" != "$ocs_live_run_tty" ] && exit 3
else
# No tty is specified to run $ocs_live_run_tty. Default to run only on /dev/tty1 (no more ttyS0). If you want to use ttyS0, add live-getty and console=ttyS0,38400n81 in the boot parameter
# If it's not in /dev/tty1, just exit.
[ "$CURRENT_TTY" != "/dev/tty1" ] && exit 3
fi
# Waiting for the jobs in /etc/ocs/ocs-live.d are finished.
to_wait=""
while [ -z "$to_wait" ]; do
if [ -e /var/lib/live/clonezilla/ocs-live.d ]; then
echo "The jobs in /etc/ocs/ocs-live.d/ are finished. Start \"$ocs_live_run\" now."
to_wait="no"
else
sleep 0.2
fi
done
# Pre run
ocs-live-prerun
# Pre load. This must be after pre-run since it might need network connection
# which could be done in ocs-live-prerun
ocs-live-preload
#
if [ "$use_fb_term" = "yes" ];then
# (1) For bterm
# Since bterm can only use one parameter (i.e. not working if we run 'bterm -l zh_TW.UTF-8 -f $uni_font ls -alF /etc/', i.e. only ls will be respected. There is no such issue for jfbterm). Here we use a workaround to make it work for bterm, i.e. use a tmp file to run it.
# (2) For jfbterm
# Although jfbterm can use more than one parameters. However, if a variable command is like:
# ocs_live_run="ocs-restore-mdisks -batch -p '-g auto -e1 auto -e2 -cm -r -j2 -k1 -p true' ask_user sda sdb"
# jfbterm -q -e $ocs_live_run -> Won't work. The single quotation and double quotation will be wrong. If there is no jfbterm, we can use "eval $ocs_live_run" to run it. However, jfbterm will has issue.
# Here we use a workaround to make it work for jbterm, i.e. use a tmp file to run it.
ocs_live_run_tmp="$(mktemp /tmp/ocs_live_run_tmp.XXXXXX)"
cat <<-RUN_END > $ocs_live_run_tmp
#!/bin/bash
$ocs_live_run
echo "\${PIPESTATUS[0]}" > ${ocs_live_run_tmp}.rc
RUN_END
chmod 755 $ocs_live_run_tmp
case "$fb_term" in
"bterm")
export TERM=bterm
set +e
# bterm need full path command even it's in the PATH already.
bterm -l $LANG -f $uni_font $ocs_live_run_tmp
EXIT="$(cat ${ocs_live_run_tmp}.rc)"
;;
"jfbterm")
export TERM=jfbterm
set +e
jfbterm -q -e $ocs_live_run_tmp
EXIT="$(cat ${ocs_live_run_tmp}.rc)"
;;
esac
[ -e "$ocs_live_run_tmp" ] && rm -f $ocs_live_run_tmp
[ -e "${ocs_live_run_tmp}.rc" ] && rm -f ${ocs_live_run_tmp}.rc
else
eval $ocs_live_run
EXIT=$?
fi
if [ "$EXIT" -eq 0 ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
# The return code is not 100% accurate. Therefore we do not show it's successful or not.
echo "\"$ocs_live_run\" finished."
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "Check $OCS_LOGFILE for more details."
else
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "\"$ocs_live_run\" finished with error!"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "Check $OCS_LOGFILE for more details."
fi
# Post run
ocs-live-postrun
# Post actions
# Case 1: Clonezilla SE's client: comment the execution to avoid it's run twice (since all the commands are from /proc/cmdline, and if user inputs "exit" in the shell, the job will be started again in batch mode without stop. While in Clonezilla live interactive mode, it won't be run in batch mode.)
# Case 2: Clonezilla live interactive mode: ask if want to reboot, shutdown or in command line...
if [ -n "$(LC_ALL=C grep -iE "ocs_server" /proc/cmdline)" ]; then
# Case 1: Clonezilla SE's client
# Once the job is done, and if it's started by Clonezilla Server (ocs_server found in /proc/cmdline), we have to comment the autologin account's ~/.bash_profile
# The job is started by Clonezilla SE, comment the line "sudo -i ocs-live-run-menu"
get_live_autologin_account
if [ -z "$live_autologin_account" ]; then
echo "No account with NOPASSWD sudo privilege was found!"
echo "Program terminated!"
exit 1
fi
get_live_auto_login_id_home
LANG=C perl -pi -e 's|(^[^#]*[[:space:]]*)(sudo -i ocs-live-run-menu)|$1true # $2 # commented after clonezilla job is done.|g' $live_auto_login_id_home/.bash_profile
else
# The result got from ocs-live-final-action will be saved in file $ocs_live_run_rlt.
ocs_live_run_rlt="$(mktemp /tmp/ocs_live_run_rlt.XXXXXX)"
# Case 2: Clonezilla live interactive mode
if [ "$use_fb_term" = "yes" ];then
case "$fb_term" in
"bterm")
# Since bterm can only use one parameter (i.e. not working if we run 'bterm -l zh_TW.UTF-8 -f $uni_font ls -alF /etc/', i.e. only ls will be respected. There is no such issue for jfbterm). Here we use a workaround to make it work for bterm, i.e. use a tmp file to run it.
ocs_live_run_tmp="$(mktemp /tmp/ocs_live_run_tmp.XXXXXX)"
echo "ocs-live-final-action $ocs_live_run_rlt" > $ocs_live_run_tmp
chmod 755 $ocs_live_run_tmp
export TERM=bterm
set +e
# bterm need full path command even it's in the PATH already.
bterm -l $LANG -f $uni_font $ocs_live_run_tmp
EXIT=$?
[ -e "$ocs_live_run_tmp" ] && rm -f $ocs_live_run_tmp
;;
"jfbterm")
export TERM=jfbterm
set +e
jfbterm -q -e ocs-live-final-action $ocs_live_run_rlt
EXIT=$?
;;
esac
else
# At this point, it's not in bterm/jfbterm, only text console. Use English.
ask_and_load_lang_set en_US.UTF-8
ocs-live-final-action $ocs_live_run_rlt
fi
# //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.
final_action="$(cat $ocs_live_run_rlt)"
[ -e "$ocs_live_run_rlt" ] && rm -f $ocs_live_run_rlt
[ -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... '
countdown 5
poweroff $HALT_REBOOT_OPT ;;
reboot) unmount_mounted_fs_before_ocs_live_reboot
echo -n 'Will reboot... '
countdown 5
reboot $HALT_REBOOT_OPT ;;
rerun*) # umount the clonezilla home dir
if [ "$final_action" = "rerun1" ]; then
echo "Completely start over, so umounting $ocsroot..."
unmount_mounted_fs_before_ocs_live_reboot
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
fi
|