mirror of
https://github.com/optim-enterprises-bv/secureblue.git
synced 2025-11-07 13:58:03 +00:00
138 lines
4.7 KiB
Bash
138 lines
4.7 KiB
Bash
#!/usr/bin/bash
|
|
# shellcheck disable=SC2154
|
|
########
|
|
## Function to create a distrobox with standardized args
|
|
########
|
|
## Create a distrobox using default fedora:latest, name the box "my-fedora-box" and give it a custom homedir
|
|
# Distrobox "fedora:latest" "my-fedora-box" "$HOME/.var/containers/fedora-box"
|
|
## Create a debian toolbox distrobox named debian-unstable
|
|
# Distrobox "quay.io/toolbx-images/debian-toolbox:unstable" "debian-unstable"
|
|
## Create an ubuntu distrobox named someubuntubox with no custom homedir and unshare network namespace
|
|
## ($3 is required if supplying extra args, using "" makes the function skip it)
|
|
# Distrobox "ubuntu:latest" "someubuntubox" "" --unshare-ns
|
|
function Distrobox (){
|
|
IMAGE="$1"
|
|
NAME="$2"
|
|
HOMEDIR=""
|
|
# If custom home directory is supplied
|
|
if [ -n "$3" ]; then
|
|
HOMEDIR="$3"
|
|
fi
|
|
|
|
# If a custom home directory is not specified
|
|
if [ -z "$HOMEDIR" ]; then
|
|
distrobox create --nvidia -Y --image "$IMAGE" -n "$NAME" "${@:3}"
|
|
else
|
|
# Make the custom homedir path if it does not exist
|
|
if [ ! -d "$HOMEDIR" ]; then
|
|
mkdir -p "$HOMEDIR"
|
|
fi
|
|
# Create distrobox with custom home path
|
|
distrobox create --nvidia -Y --image "$IMAGE" -n "$NAME" -H "$HOMEDIR" "${@:4}"
|
|
fi
|
|
}
|
|
|
|
########
|
|
## Function to assemble pre-defined distrobox containers from manifest files
|
|
########
|
|
## Assemble all containers defined in an ini file without confirmation
|
|
# Assemble noconfirmcreate "/etc/distrobox/distrobox.ini"
|
|
# Assemble noconfirmcreate "" ALL
|
|
## Assemble ubuntu from default ini manifest, with confirmation
|
|
# Assemble confirm "" ubuntu
|
|
## Remove a container defined in the default ini manifest
|
|
# Assemble rm "" ubuntu
|
|
function Assemble(){
|
|
# Set defaults
|
|
ACTION="create"
|
|
FILE="/etc/distrobox/distrobox.ini"
|
|
NAME=""
|
|
|
|
# If an action is provided
|
|
if [ -n "$1" ]; then
|
|
# Set ACTION to the action specified
|
|
# and remove "noconfirm" from $1 when assigning it to ACTION
|
|
ACTION="${1/noconfirm/}"
|
|
fi
|
|
|
|
# If a filename is provided
|
|
if [ -n "$2" ]; then
|
|
# Set FILE to the provided filename
|
|
FILE="$2"
|
|
fi
|
|
|
|
# If container name is ALL
|
|
if [ "$3" == "ALL" ] || [ -z "$3" ]; then
|
|
if [[ ! "$1" =~ ^noconfirm ]]; then
|
|
# Ask user if they REALLY want to assemble all the containers
|
|
echo -e "${b}WARNING${n}: This will assemble and ${u}replace${n}\nALL containers defined in ${b}$FILE${n}."
|
|
CONFIRM=$(Confirm "Are you sure you want to do this?")
|
|
if [ "$CONFIRM" == "1" ]; then
|
|
echo "Aborting..."
|
|
return 1
|
|
fi
|
|
fi
|
|
# Run the distrobox assemble command
|
|
distrobox assemble "$ACTION" --file "$FILE" --replace
|
|
return $?
|
|
else
|
|
# Set distrobox name to provided name
|
|
NAME="$3"
|
|
fi
|
|
|
|
# If we do not want confirmations
|
|
if [[ ! "$1" =~ ^noconfirm ]]; then
|
|
# Ask the user if they really want to replace $NAME container
|
|
echo -e "${b}WARNING${n}: This will assemble and ${u}replace${n} the container ${b}$NAME${n}\nwith the one defined in ${b}$FILE${n}."
|
|
CONFIRM=$(Confirm "Are you sure you want to do this?")
|
|
if [ "$CONFIRM" == "1" ]; then
|
|
echo "Aborting..."
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# Run the distrobox assemble command
|
|
distrobox assemble "$ACTION" --file "$FILE" --name "$NAME" --replace
|
|
}
|
|
|
|
########
|
|
## Function to parse a distrobox.ini file and make a selectable list from it
|
|
########
|
|
## Parse a distrobox.ini manifest and let user select which container to setup
|
|
# AssembleList "$HOME/distrobox.ini" create
|
|
## Parse a distrobox.ini manifest and create ubuntu container without confirmation
|
|
# AssembleList "$HOME/distrobox.ini" noconfirmcreate ubuntu
|
|
function AssembleList (){
|
|
# Set defaults
|
|
FILE="$1"
|
|
ACTION="create"
|
|
CHOICE="prompt"
|
|
|
|
# If an ACTION is supplied
|
|
if [ -n "$2" ]; then
|
|
# Replace default action
|
|
ACTION="$2"
|
|
fi
|
|
|
|
# If a CHOICE is predefined
|
|
if [ -n "$3" ]; then
|
|
# Replace default choice
|
|
CHOICE="$3"
|
|
fi
|
|
|
|
# If the choice is "prompt" then ask user what container they want
|
|
if [ "$CHOICE" == "prompt" ]; then
|
|
CONTAINERS=$(grep -P "\[.+\]" "$FILE" | sed -E 's/\[(.+)\]/\1/')
|
|
echo "${b}Pre-defined Containers${n}"
|
|
echo "Please select a container to create"
|
|
# Disable an irrelevant shellscheck for next line as we want word splitting
|
|
# shellcheck disable=SC2086
|
|
CHOICE=$(Choose ALL $CONTAINERS)
|
|
fi
|
|
|
|
# If choice is not empty by now (will be empty if escaped from Choice function)
|
|
if [ -n "$CHOICE" ]; then
|
|
# Assemble the selected container
|
|
Assemble "$ACTION" "$FILE" "$CHOICE"
|
|
fi
|
|
} |