foxshell/sc/ssh-bootstrap
2025-07-04 11:48:40 -05:00

262 lines
7.8 KiB
Bash
Executable file

#!/bin/sh
if '[' '-n' "${ZSH_VERSION-}" ']'; then
'emulate' 'sh' '-o' 'no_aliases' '-o' 'no_glob'
else
'set' '-f'
fi
_z4h_bypass=''
for _z4h_ssh_cmd in 'tar' 'tail' 'rm' 'mkdir' 'mv' 'cp' 'ln' 'wc' 'cat' 'uname' 'tr'; do
if ! command -v "$_z4h_ssh_cmd" >'/dev/null' 2>&1; then
_z4h_bypass='1'
'break'
fi
done
if '[' '-z' "$_z4h_bypass" ']'; then
{
_z4h_ssh_platform="$('command' 'uname' '-sm')" &&
_z4h_ssh_platform="$('printf' '%s' "$_z4h_ssh_platform" | 'command' 'tr' '[A-Z]' '[a-z]')" ||
_z4h_ssh_platform=''
} 2>'/dev/null'
case "$_z4h_ssh_platform" in
'darwin arm64');;
'darwin x86_64');;
'linux aarch64');;
'linux armv6l');;
'linux armv7l');;
'linux armv8l');;
'linux x86_64');;
'linux i686');;
*) _z4h_bypass='1';;
esac
fi
if '[' '-n' "$_z4h_bypass" ']'; then
command -v 'rm' >'/dev/null' 2>&1 && 'command' 'rm' '-f' '--' "$0"
export TERM=^TERM^
if '[' '-x' "${SHELL-}" ']'; then
case "/$SHELL" in
*/'ksh93') 'exec' "$SHELL" '-l'; 'exit';;
*/'dash') 'exec' "$SHELL" '-l'; 'exit';;
*/'vbash') 'exec' "$SHELL" '-l'; 'exit';;
*/'bash') 'exec' "$SHELL" '-l'; 'exit';;
*/'tcsh') 'exec' "$SHELL" '-l'; 'exit';;
*/'csh') 'exec' "$SHELL" '-l'; 'exit';;
*/'zsh') 'exec' "$SHELL" '-l'; 'exit';;
esac
fi
'printf' '\001z4h.%s%s' ^DUMP_MARKER^ 'bypass '
'exit'
fi
'set' '--' "$0"
_z4h_ssh_error() {
>&2 'printf' '\n'
>&2 'printf' '\033[33mz4h\033[0m: failed to start \033[32mzsh\033[0m on \033[1m%s\033[0m\n' ^SSH_HOST^
>&2 'printf' '\n'
>&2 'printf' 'See error messages above to identify the culprit.\n'
>&2 'printf' '\n'
>&2 'printf' 'Open login shell on \033[1m%s\033[0m:\n' ^SSH_HOST^
>&2 'printf' '\n'
>&2 'printf' ' \033[4;32mcommand\033[0m \033[32mssh\033[0m %s\n' ^SSH_ARGS^
>&2 'printf' '\n'
>&2 'printf' 'Open interactive \033[32msh\033[0m on \033[1m%s\033[0m:\n' ^SSH_HOST^
>&2 'printf' '\n'
>&2 'printf' ' \033[4;32mcommand\033[0m \033[32mssh\033[0m %s sh -i\n' ^SSH_ARGS^
>&2 'printf' '\n'
>&2 'printf' 'Configure \033[32mz4h\033[0m \033[1mssh\033[0m to open login shell on \033[1m%s\033[0m (like above):\n' ^SSH_HOST^
>&2 'printf' '\n'
>&2 'printf' ' \033[32mzstyle\033[0m \033[33m\047:z4h:ssh:%s\047\033[0m enable no\n' ^SSH_HOST^
>&2 'printf' '\n'
}
_z4h_ssh_mktemp() {
if '[' '-n' "${TMPDIR-}" '-a' '(' '(' '-d' "${TMPDIR-}" '-a' '-w' "${TMPDIR-}" ')' '-o' \
'!' '(' '-d' '/tmp' '-a' '-w' '/tmp' ')' ')' ]; then
'set' '--' "$TMPDIR"
else
'set' '--' '/tmp'
fi
if command -v 'mktemp' >'/dev/null' 2>&1; then
_z4h_ssh_tmp="$('command' 'mktemp' '-d' -- "$1"/z4h-ssh.XXXXXXXXXX)"
else
_z4h_ssh_tmp="$1"/z4h-ssh.tmp."$$"
'[' '!' '-e' "$_z4h_ssh_tmp" ']' || 'command' 'rm' '-rf' '--' "$_z4h_ssh_tmp" || 'exit'
'command' 'mkdir' '-p' '--' "$_z4h_ssh_tmp" || 'exit'
fi
}
_z4h_ssh_cleanup='"trap" "-" "HUP" "INT" "TERM" "EXIT"; "command" "rm" "-rf" "--" "$@" 2>"/dev/null"'
'trap' "$_z4h_ssh_cleanup; 'exit' '129'" 'HUP'
'trap' "$_z4h_ssh_cleanup; 'exit' '130'" 'INT'
'trap' "$_z4h_ssh_cleanup; 'exit' '143'" 'TERM'
'trap' "$_z4h_ssh_cleanup; _z4h_ssh_error" 'EXIT'
z4h_min_version=^MIN_VERSION^
z4h_ssh_client=^SSH_CLIENT^
z4h_ssh_host=^SSH_HOST^
'export' Z4H_SSH="$z4h_min_version":"$z4h_ssh_client":"$z4h_ssh_host"
'export' P9K_TTY="old"
if '[' ^CAN_SAVE_RESTORE_SCREEN^ '=' '1' ']'; then
'export' _Z4H_SSH_MARKER=^DUMP_MARKER^
fi
^PRELUDE^
_z4h_ssh_tar_c_opt=
_z4h_ssh_tar_x_opt=
if _z4h_ssh_tar_v="$('command' 'tar' '--version' 2>&1)"; then
case "$_z4h_ssh_tar_v" in
*'GNU tar'*)
_z4h_ssh_tar_c_opt='--owner=0 --group=0'
_z4h_ssh_tar_x_opt='--warning=no-unknown-keyword --warning=no-timestamp --no-same-owner'
;;
esac
fi
_z4h_ssh_mktemp
'set' '--' "$@" "$_z4h_ssh_tmp"
'command' 'tail' '-c' '+'^DUMP_POS^ '--' "$0" \
| 'command' 'tar' '-C' "$_z4h_ssh_tmp" $_z4h_ssh_tar_x_opt '-xzf' '-' || 'exit'
'command' 'rm' '-f' '--' "$0" || 'exit'
'shift'
_z4h_ssh_src='0'
for _z4h_ssh_dst in ^SEND_TO^; do
_z4h_ssh_src="$((_z4h_ssh_src + 1))"
case "$_z4h_ssh_dst" in
'')
>&2 'printf' '\033[33mz4h\033[0m: \033[31mz4h_ssh_send_files[%s]\033[0m is empty after expansion\n' "$((2 * _z4h_ssh_src + 2))"
'exit' '1'
;;
*/)
>&2 'printf' '\033[33mz4h\033[0m: \033[1mz4h_ssh_send_files[%s]\033[0m ends with \033[1m/\033[0m after expansion: \033[31m%s\033[0m\n' "$((2 * _z4h_ssh_src + 2))" "$_z4h_ssh_dst"
'exit' '1'
;;
/*);;
*)
>&2 'printf' '\033[33mz4h\033[0m: \033[1mz4h_ssh_send_files[%s]\033[0m is not absolute: \033[31m%s\033[0m\n' "$((2 * _z4h_ssh_src + 2))" "$_z4h_ssh_dst"
'exit' '1'
;;
esac
if '[' '-e' "$_z4h_ssh_dst" ']'; then
'command' 'rm' '-rf' '--' "$_z4h_ssh_dst" || 'exit'
fi
if '[' '-e' "$1"/"$_z4h_ssh_src" ']'; then
_z4h_ssh_dir="${_z4h_ssh_dst%/*}"
if '[' '!' '-e' "$_z4h_ssh_dir" ]; then
'command' 'mkdir' '-p' '--' "$_z4h_ssh_dir" || 'exit'
fi
if ! 'command' 'mv' '-f' '--' "$1"/"$_z4h_ssh_src" "$_z4h_ssh_dst" 2>'/dev/null'; then
'command' 'cp' '-rf' '--' "$1"/"$_z4h_ssh_src" "$_z4h_ssh_dst" || 'exit'
fi
fi
done
'rm' '-rf' '--' "$_z4h_ssh_tmp" || 'exit'
^SETUP^
'set' '--' "$0"
'printf' '' >"$0" || 'exit'
(
'trap' '-' 'HUP' 'INT' 'TERM' 'EXIT'
'unset' '-f' '_z4h_ssh_error' '_z4h_ssh_mktemp'
'unset' '_z4h_ssh_cleanup' '_z4h_ssh_tar_v' '_z4h_ssh_tar_c_opt' '_z4h_ssh_tar_x_opt'
'unset' '_z4h_ssh_cmd' '_z4h_ssh_tmp' '_z4h_ssh_src' '_z4h_ssh_dst' 'z4h_min_version'
'unset' 'z4h_ssh_client' 'z4h_ssh_host' '_z4h_ssh_platform'
export _z4h_ssh_feedback="$0"
Z4H_BOOTSTRAPPING='1'
'set' '+f'
'set' '--'
if '[' '-n' "${ZSH_VERSION-}" ']'; then
'setopt' 'aliases'
fi
^RUN^
_z4h_ssh_ret="$?"
'set' '-f'
'command' 'rm' '--' "$0" || 'exit'
'exit' "$_z4h_ssh_ret"
)
_z4h_ssh_ret="${?#0}"
'[' '-e' "$0" ']' || 'exit' "${_z4h_ssh_ret:-1}"
'trap' "$_z4h_ssh_cleanup" 'EXIT'
'.' "$0"
'rm' '-f' '--' "$0" || 'exit'
'set' '--'
^TEARDOWN^
if ^EMPTY_RETRIEVE_FROM^; then
'trap' '-' 'HUP' 'INT' 'TERM' 'EXIT'
'exit' "${_z4h_ssh_ret:-0}"
fi
_z4h_ssh_mktemp
'set' '--' "$@" "$_z4h_ssh_tmp"
_z4h_ssh_dst='0'
_z4h_ssh_dst_list=''
for _z4h_ssh_src in ^RETRIEVE_FROM^; do
_z4h_ssh_dst="$((_z4h_ssh_dst + 1))"
if '[' '-z' "$_z4h_ssh_src" ']'; then
>&2 'printf' '\033[33mz4h\033[0m: empty file source path \033[31mnumber '$((_z4h_ssh_dst+1))'\033[0m\n'
'exit' '1'
fi
if '[' '-e' "$_z4h_ssh_src" ']'; then
'command' 'ln' '-s' '--' "$_z4h_ssh_src" "$_z4h_ssh_tmp"/"$_z4h_ssh_dst" || 'exit'
_z4h_ssh_dst_list="$_z4h_ssh_dst_list $_z4h_ssh_dst"
fi
done
_z4h_dump_size='0'
if command -v 'base64' >'/dev/null' 2>&1 && command -v 'tr' >'/dev/null' 2>&1; then
if '[' '-n' "$_z4h_ssh_dst_list" ']'; then
case "$_z4h_ssh_tar_v" in
*'GNU tar'*) _z4h_ssh_tar_opt='--owner=0 --group=0';;
esac
'command' 'tar' '-C' "$_z4h_ssh_tmp" $tar_opt '-czhf' "$_z4h_ssh_tmp"/dump.tar.gz \
'--' $_z4h_ssh_dst_list || 'exit'
'base64' <"$_z4h_ssh_tmp"/dump.tar.gz >"$_z4h_ssh_tmp"/dump.base64 || 'exit'
'command' 'tr' '-d' '\n' <"$_z4h_ssh_tmp"/dump.base64 >"$_z4h_ssh_tmp"/dump.base64-sl || 'exit'
_z4h_dump_size="$('command' 'wc' '-c' <"$_z4h_ssh_tmp"/dump.base64-sl)" || 'exit'
fi
fi
while '[' "${_z4h_dump_size# }" '!=' "$_z4h_dump_size" ']'; do
_z4h_dump_size="${_z4h_dump_size# }"
done
'[' "${#_z4h_dump_size}" '-lt' '16' ']' || _z4h_dump_size='0'
while '[' "${#_z4h_dump_size}" '-lt' '16' ']'; do
_z4h_dump_size="$_z4h_dump_size "
done
{
'printf' '\001z4h.%s%s' ^DUMP_MARKER^ "$_z4h_dump_size" || 'exit'
if '[' "$_z4h_dump_size" '!=' '0 ' ']'; then
'command' 'cat' '--' "$_z4h_ssh_tmp"/dump.base64-sl || 'exit'
fi
} 2>'/dev/null'
'command' 'rm' '-rf' '--' "$@" || 'exit'
'trap' '-' 'HUP' 'INT' 'TERM' 'EXIT'
'exit' "${_z4h_ssh_ret:-0}"