Escape function

This commit is contained in:
Jip-Hop 2023-01-25 08:25:34 +01:00
parent e96f2679b7
commit e8a5076809
1 changed files with 27 additions and 5 deletions

View File

@ -11,6 +11,7 @@ LXC_CACHE_PATH="${LXC_DIR_PATH}/cache"
LXC_DOWNLOAD_SCRIPT_PATH="${LXC_DIR_PATH}/lxc-download.sh" LXC_DOWNLOAD_SCRIPT_PATH="${LXC_DIR_PATH}/lxc-download.sh"
ARCH="$(dpkg --print-architecture)" ARCH="$(dpkg --print-architecture)"
JAILS_DIR_PATH='jails' JAILS_DIR_PATH='jails'
JAIL_ROOTFS_NAME='rootfs'
JAIL_NAME= JAIL_NAME=
JAIL_PATH= JAIL_PATH=
DISTRO= DISTRO=
@ -55,6 +56,7 @@ stat_chmod() {
if [[ "$(stat -c%a "${2}")" -ne "${1}" ]]; then chmod "${1}" "${2}"; fi if [[ "$(stat -c%a "${2}")" -ne "${1}" ]]; then chmod "${1}" "${2}"; fi
} }
# TODO: put body inside the create function (no need for a function)
read_name() { read_name() {
local jail_name local jail_name
local jail_path local jail_path
@ -134,6 +136,22 @@ run_jail() (
fi fi
) )
escape() {
s=""
for t in "$@"; do
t="$(declare -p t)"
t="${t#*=}"
s+=" ${t}"
done
echo "${s}"
}
# TODO: remove indent
# https://stackoverflow.com/questions/6916856/can-bash-show-a-functions-definition
get_function_body() {
type "${1}" | sed '1,3d;$d'
}
create_jail() { create_jail() {
read -p "Create a new jail? [Y/n] " -n 1 -r REPLY && echo read -p "Create a new jail? [Y/n] " -n 1 -r REPLY && echo
@ -203,10 +221,10 @@ Please create a dedicated directory called 'jailmaker', store ${SCRIPT_NAME} the
read_name read_name
local jail_rootfs_name systemd_run_additional_args systemd_nspawn_additional_args local systemd_run_additional_args systemd_nspawn_additional_args
jail_rootfs_name='rootfs' # TODO: don't use jail name inside these strings? Allow reading the basename of dir containing the script?
systemd_run_additional_args="--unit='${SYSTEMD_RUN_UNIT_NAME}' --description='jailmaker ${JAIL_NAME}'" systemd_run_additional_args="--unit='${SYSTEMD_RUN_UNIT_NAME}' --description='jailmaker ${JAIL_NAME}'"
systemd_nspawn_additional_args="--machine='${JAIL_NAME}' --directory='./${jail_rootfs_name}'" systemd_nspawn_additional_args="--machine='${JAIL_NAME}' --directory='./${JAIL_ROOTFS_NAME}'"
echo "${SCRIPT_NAME} will not install docker for you." echo "${SCRIPT_NAME} will not install docker for you."
echo "But it can configure the jail with the capabilities required to run docker." echo "But it can configure the jail with the capabilities required to run docker."
@ -238,12 +256,16 @@ Please create a dedicated directory called 'jailmaker', store ${SCRIPT_NAME} the
# weird chars :?\" # weird chars :?\"
# the corresponding command would be: # the corresponding command would be:
# --bind-ro='/mnt/data/weird chars \:?\\"' # --bind-ro='/mnt/data/weird chars \:?\\"'
systemd_nspawn_additional_args+="$(echo "${SYSTEMD_NSPAWN_USER_ARGS_STRING}" | xargs bash -c 's=""; for t in "$@"; do t="$(declare -p t)"; t="${t#*=}"; s+=" ${t}"; done; echo "${s}"' --)" echo "$(get_function_body escape)"
systemd_nspawn_additional_args+="$(echo "${SYSTEMD_NSPAWN_USER_ARGS_STRING}" | xargs bash -c "$(get_function_body escape)" --)"
echo "$systemd_nspawn_additional_args"
cleanup
exit
# https://superuser.com/a/1529316/1268213 # https://superuser.com/a/1529316/1268213
# https://superuser.com/a/1627765 # https://superuser.com/a/1627765
# Create directory for rootfs # Create directory for rootfs
JAIL_ROOTFS_PATH="${JAIL_PATH}/${jail_rootfs_name}" JAIL_ROOTFS_PATH="${JAIL_PATH}/${JAIL_ROOTFS_NAME}"
mkdir -p "${JAIL_ROOTFS_PATH}" mkdir -p "${JAIL_ROOTFS_PATH}"
JAIL_CONFIG_NAME='config' JAIL_CONFIG_NAME='config'