Add sample scripts for image-based custom O/S installation

This commit is contained in:
Saverio Miroddi 2020-05-05 23:06:22 +02:00
parent efe75eb994
commit 7fbc5c0c42
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,12 @@
#!/bin/bash
c_fifo_filename="/tmp/target_image.fifo"
c_root_pool_mount=/mnt
echo "Restoring the target image..."
# shellcheck disable=SC2002 # xz doesn't accept as input a fifo, and reverting the commands orde
# is ugly.
cat "$c_fifo_filename" | xz -d | tar xv -C "$c_root_pool_mount"
echo

View File

@ -0,0 +1,42 @@
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
# Don't use spaces in the filenames; avoids ugly quoting.
#
c_fifo_filename="/tmp/target_image.fifo"
c_os_install_script="$(dirname "$0")/from_target_image-guest.sh"
c_zfs_installer_script="$(dirname "${0%/*}")/install-zfs.sh"
if [[ $# -ne 3 ]] || [[ ! -x "$(command -v sshpass)" ]]; then
echo "Usage: $(basename "$0") <compressed_image> <host> <password>
Perform a ZFS installation via custom script \`$(basename "$c_os_install_script")\`, using the provided O/S image.
The image must be an XZ-tarball of the target mountpoint (typically, \`/target\`), as it is immediately after the installer (S)Ubiquity has finished.
The files must be relative to the target mountpoint.
Requirements:
- the \`sshpass\` tool on the host (for convenience);
- the SSH server on the guest, with allowed password authentication;
- the SSH client configured on the host.
"
echo
exit 1
fi
v_image=$1
v_host=$2
export SSHPASS=$3
# Initiate the image copy in the background, but block until it's picked up.
#
sshpass -e ssh "$v_host" "rm -f $c_fifo_filename && mkfifo $c_fifo_filename"
sshpass -e scp -q "$v_image" "$v_host":"$c_fifo_filename" &
sshpass -e scp "$c_os_install_script" "$c_zfs_installer_script" "$v_host":
sshpass -e ssh -t "$v_host" "sudo ZFS_OS_INSTALLATION_SCRIPT=./$(basename "$c_os_install_script") ./$(basename "$c_zfs_installer_script")"