#!/bin/bash # ------------------------------------------------------------------------------ # # OpenSLX Toolkit Next Gen # # ------------------------------------------------------------------------------ # # The next generation toolkit to build a stateless linux system bootable # over the network. Composed of dracut-built initramfs and a full system clone. # # ------------------------------------------------------------------------------ # # OpenSLX-NG Functions # # ------------------------------------------------------------------------------ pinfo() { echo -e "\033[38;5;10m[info]\033[0m $@" } perror() { echo -e "\033[38;5;9m[error]\033[0m $@" kill "$SELF_PID" exit 1 } print_usage() { perror "$ARG0 " } # ------------------------------------------------------------------------------ # # OpenSLX-NG Main Code # # ------------------------------------------------------------------------------ declare -rg ARG0="$0" declare -rg SELF="$(readlink -f "$ARG0")" declare -rg ROOT_DIR="$(dirname "${SELF}")" declare -rg SELF_PID="$$" # root check if [ "$(id -u)" -ne 0 ]; then perror "ERROR: You need to be root to use this toolkit." else pinfo "" fi # do we even have tools? for TOOL in qemu-img qemu-nbd mkfs.ext4; do which $TOOL &>/dev/null || perror "Could not find '$TOOL'." done # let's keep it simple for now, just source our main functions file . "${ROOT_DIR}/$ARG0".functions || perror "Could not source functions." # ok, now check that we have 3 args [ $# -ne 3 ] && print_usage # even though functions check their parameter, we also do it to be safe. valid_ip "$1" || perror "'$1' is not a valid IP adress, aborting..." [ ! -d "$2" ] || perror "'$2' already exists, aborting..." [ ! -f "$3" ] || perror "'$3' already exists, aborting..." # all good, let's start pinfo " ## RUNNING ##" clone_stage4 $1 $2 || perror "Failed to clone stage4 with: $1 $2" export_qcow2 $2 $3 || perror "Failed to export stage4 with: $2 $3" pinfo " ## COMPLETE ##"