Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Adds host/guest paths

AuthorDaveJarvis <email>
Date2022-12-11 22:10:25 GMT-0800
Commitef8887f47ec8f08c0d7c406a8b39491aac619640
Parent79970ae
Delta97 lines added, 28 lines removed, 69-line increase
container/Containerfile
WORKDIR "/root"
+RUN mkdir -p "text"
+RUN mkdir -p "images"
+
container/manage.sh
readonly BUILD_DIR=build
+
+readonly CONTAINER_EXE=podman
readonly CONTAINER_NAME=typesetter
readonly CONTAINER_NETWORK=host
readonly CONTAINER_FILE="${CONTAINER_NAME}"
readonly CONTAINER_ARCHIVE_FILE="${CONTAINER_FILE}.tar"
+readonly CONTAINER_ARCHIVE_PATH="${BUILD_DIR}/${CONTAINER_ARCHIVE_FILE}"
readonly CONTAINER_COMPRESSED_FILE="${CONTAINER_ARCHIVE_FILE}.gz"
-readonly CONTAINER_EXE=podman
readonly CONTAINER_COMPRESSED_PATH="${BUILD_DIR}/${CONTAINER_ARCHIVE_FILE}.gz"
+readonly CONTAINER_DIR_TEXT="/root/text"
+readonly CONTAINER_DIR_IMAGES="/root/images"
+
+ARG_CONTAINER_COMMAND="context --version"
+ARG_MOUNTPOINT_TEXT=""
+ARG_MOUNTPOINT_IMAGES=""
DEPENDENCIES=(
"podman,https://podman.io"
"tar,https://www.gnu.org/software/tar"
"bzip2,https://gitlab.com/bzip2/bzip2"
)
ARGUMENTS+=(
- "b,build,Build container image (${CONTAINER_NAME})"
- "c,connect,Connect to container image"
- "l,load,Load container image (${CONTAINER_COMPRESSED_PATH})"
- "r,remove,Remove all container images"
- "s,save,Save container image (${CONTAINER_COMPRESSED_PATH})"
+ "b,build,Build container (${CONTAINER_NAME})"
+ "c,connect,Connect to container"
+ "d,delete,Remove all containers"
+ "i,images,Set image files mount point"
+ "l,load,Load container (${CONTAINER_COMPRESSED_PATH})"
+ "r,run,Run a command in the container (\"${ARG_CONTAINER_COMMAND}\")"
+ "s,save,Save container (${CONTAINER_COMPRESSED_PATH})"
+ "t,text,Set text file mount point (to typeset)"
)
# ---------------------------------------------------------------------------
-# Manages the container image
+# Manages the container image.
# ---------------------------------------------------------------------------
execute() {
- $do_remove
+ $do_delete
$do_build
$do_save
# ---------------------------------------------------------------------------
-# Removes all container images
+# Deletes all container images.
# ---------------------------------------------------------------------------
-utile_remove() {
- $log "Removing all images"
+utile_delete() {
+ $log "Deleting all images"
${CONTAINER_EXE} rmi --all --force > /dev/null
- $log "Images removed"
+ $log "Images deleted"
}
# ---------------------------------------------------------------------------
-# Builds the container file in the current working directory
+# Builds the container file in the current working directory.
# ---------------------------------------------------------------------------
utile_build() {
${CONTAINER_EXE} build \
--network=${CONTAINER_NETWORK} \
--tag ${CONTAINER_NAME} . | \
grep ^STEP
+}
+
+get_mountpoint() {
+ local result=""
+
+ if [ -z "${1}" ]; then
+ result="-v ${1}:${2}:Z"
+ fi
+
+ return $result
+}
+
+get_mountpoint_text() {
+ return $(get_mountpoint "${ARG_MOUNTPOINT_TEXT}", "${CONTAINER_DIR_TEXT}")
+}
+
+get_mountpoint_images() {
+ return $(get_mountpoint "${ARG_MOUNTPOINT_IMAGES}", "${CONTAINER_DIR_IMAGES}")
}
# ---------------------------------------------------------------------------
-# Connects to the container
+# Connects to the container.
# ---------------------------------------------------------------------------
utile_connect() {
+ local mount_text=$(get_mountpoint_text)
+ local mount_images=$(get_mountpoint_images)
+
${CONTAINER_EXE} run \
- --network=${CONTAINER_NETWORK} \
+ --network="${CONTAINER_NETWORK}" \
--rm \
+ ${mount_text} \
+ ${mount_images} \
-i \
- -t ${CONTAINER_NAME}
+ -t "${CONTAINER_NAME}"
}
# ---------------------------------------------------------------------------
-# Runs a command in the container
+# Runs a command in the container.
+#
+# Examples:
+#
+# ./manage.sh -r "ls /"
+# ./manage.sh -r "context --version"
# ---------------------------------------------------------------------------
utile_execute() {
-# -v ${IMAGES_DIR}:/root/images:ro \
+ $log "Run \"${ARG_CONTAINER_COMMAND}\":"
+
${CONTAINER_EXE} run \
- --network=${CONTAINER_NETWORK} \
+ --network="${CONTAINER_NETWORK}" \
--rm \
-i \
- -t ${CONTAINER_NAME} \
- /bin/sh --login -c 'context --version'
+ -t "${CONTAINER_NAME}" \
+ /bin/sh --login -c "${ARG_CONTAINER_COMMAND}"
}
# ---------------------------------------------------------------------------
-# Saves the container to a file
+# Saves the container to a file.
# ---------------------------------------------------------------------------
utile_save() {
# ---------------------------------------------------------------------------
-# Loads the container from a file
+# Loads the container from a file.
# ---------------------------------------------------------------------------
utile_load() {
case "$1" in
-b|--build)
- do_remove=utile_build
+ do_build=utile_build
;;
-c|--connect)
do_connect=utile_connect
+ ;;
+ -d|--delete)
+ do_delete=utile_delete
;;
-l|--load)
do_load=utile_load
;;
- -r|--remove)
- do_remove=utile_remove
+ -i|--images)
+ if [ -z "${2+x}" ]; then
+ :
+ else
+ ARG_MOUNTPOINT_IMAGES="$2"
+ consume=2
+ fi
+ ;;
+ -r|--run)
+ do_execute=utile_execute
+
+ if [ -z "${2+x}" ]; then
+ :
+ else
+ ARG_CONTAINER_COMMAND="$2"
+ consume=2
+ fi
;;
-s|--save)
do_save=utile_save
+ ;;
+ -t|--text)
+ if [ -z "${2+x}" ]; then
+ :
+ else
+ ARG_MOUNTPOINT_TEXT="$2"
+ consume=2
+ fi
;;
esac
return ${consume}
}
do_build=:
do_connect=:
-do_execute=:
+do_delete=:
do_load=:
-do_remove=:
+do_execute=:
do_save=: