@@ -626,32 +626,55 @@ runKexec() {
626
626
fi
627
627
628
628
step Switching system into kexec
629
- runSsh sh << SSH
630
- set -efu ${enableDebug}
631
- $maybeSudo rm -rf /root/kexec
632
- $maybeSudo mkdir -p /root/kexec
633
- SSH
634
629
635
630
# no way to reach global ipv4 destinations, use gh-v6.com automatically if github url
636
631
if [[ ${hasIpv6Only} == " y" ]] && [[ $kexecUrl == " https://github.com/" * ]]; then
637
632
kexecUrl=${kexecUrl/ " github.com" / " gh-v6.com" }
638
633
fi
639
634
635
+ # Define common remote commands template
636
+ local remoteCommandTemplate="
637
+ set -eu ${enableDebug}
638
+ ${maybeSudo} rm -rf /root/kexec
639
+ ${maybeSudo} mkdir -p /root/kexec
640
+ %TAR_COMMAND%
641
+ TMPDIR=/root/kexec setsid sudo /root/kexec/kexec/run --kexec-extra-flags \" $kexecExtraFlags \"
642
+ "
643
+
644
+ # Define upload commands
645
+ local localUploadCommand=()
646
+ local remoteUploadCommand=()
647
+
640
648
if [[ -f $kexecUrl ]]; then
641
- runSsh " ${maybeSudo} tar -C /root/kexec -xvzf- " < " $ kexecUrl"
642
- elif [[ ${hasCurl} == " y" ]]; then
643
- runSsh " curl --fail -Ss -L ' ${ kexecUrl} ' | ${maybeSudo} tar -C /root/kexec -xvzf- "
644
- elif [[ ${hasWget} == " y" ]]; then
645
- runSsh " wget ' ${kexecUrl} ' -O- | ${maybeSudo} tar -C /root/kexec -xvzf- "
649
+ localUploadCommand=(cat " $kexecUrl " )
650
+ elif [[ $hasWget == " y" ]]; then
651
+ remoteUploadCommand=(wget " $ kexecUrl" -O-)
652
+ elif [[ $hasCurl == " y" ]]; then
653
+ remoteUploadCommand=(curl --fail -Ss -L " $kexecUrl " )
646
654
else
647
- curl --fail -Ss -L " ${kexecUrl} " | runSsh " ${maybeSudo} tar -C /root/kexec -xvzf-"
655
+ # Fallback to local curl
656
+ localUploadCommand=(curl --fail -Ss -L " ${kexecUrl} " )
648
657
fi
649
658
650
- runSsh << SSH
651
- TMPDIR=/root/kexec setsid ${maybeSudo} /root/kexec/kexec/run --kexec-extra-flags "${kexecExtraFlags} "
652
- SSH
659
+ local tarCommand
660
+ local remoteCommands
661
+ if [[ ${# localUploadCommand[@]} -eq 0 ]]; then
662
+ # Use remote command for download and execution
663
+ tarCommand=" $( printf ' %q ' " ${remoteUploadCommand[@]} " ) | ${maybeSudo} tar -C /root/kexec -xvzf-"
664
+
665
+ remoteCommands=${remoteCommandTemplate// ' %TAR_COMMAND%' / $tarCommand }
666
+
667
+ runSsh sh -c " $remoteCommands "
668
+ else
669
+ # Use local command with pipe to remote
670
+ tarCommand=" ${maybeSudo} tar -C /root/kexec -xvzf-"
671
+ remoteCommands=${remoteCommandTemplate// ' %TAR_COMMAND%' / $tarCommand }
672
+
673
+ " ${localUploadCommand[@]} " | runSsh sh -c " $remoteCommands "
674
+ fi
653
675
654
676
# use the default SSH port to connect at this point
677
+ local i
655
678
for i in " ${! sshArgs[@]} " ; do
656
679
if [[ ${sshArgs[i]} == " -p" ]]; then
657
680
sshArgs[i + 1]=$postKexecSshPort
0 commit comments