mirror of
https://github.com/optim-enterprises-bv/secureblue.git
synced 2025-11-02 19:38:10 +00:00
chore: copy config from upstream and remove dep (#593)
This commit is contained in:
138
files/system/usr/lib/ujust/libdistrobox.sh
Normal file
138
files/system/usr/lib/ujust/libdistrobox.sh
Normal file
@@ -0,0 +1,138 @@
|
||||
#!/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
|
||||
}
|
||||
Reference in New Issue
Block a user