Dave Jarvis' Repositories

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

Adds container management script

AuthorDaveJarvis <email>
Date2022-12-11 18:45:09 GMT-0800
Commitd25ceec00c2bc0b937bd15e23874422cf760a67b
Parent4cffef7
container/Containerfile
RUN rm -rf $CONTEXT_HOME/tex/texmf-context/doc
RUN find . -type f -name "*.pdf" -exec rm {} \;
+RUN find . -type f -name "*.log" -exec rm {} \;
# Prepare to process text files
WORKDIR "/root"
-
container/context-container.sh
-#!/usr/bin/env bash
-
-readonly CONTAINER_NAME=typesetter
-readonly CONTAINER_NETWORK=host
-
-# Force clean
-podman rmi --all --force
-
-# Build from Containerfile
-podman build \
- --network=${CONTAINER_NETWORK} \
- --tag ${CONTAINER_NAME} .
-
-# Connect and mount images
-podman run \
- --network=${CONTAINER_NETWORK} \
- --rm \
- -i \
- -t ${CONTAINER_NAME} \
- /bin/sh --login -c 'context --version'
-
-# -v ${IMAGES_DIR}:/root/images:ro \
-
-# Create a persistent container
-# podman create typesetter typesetter
-
-# Create a long-running task
-# podman create -ti typesetter /bin/sh
-
-# Connect
-
-# Export
-# podman image save context -o typesetter.tar
-# zip -9 -r typesetter.zip typesetter.tar
-
container/manage.sh
+#!/usr/bin/env bash
+
+# ---------------------------------------------------------------------------
+# Copyright 2022 White Magic Software, Ltd.
+#
+# This script helps manage a container. The container is configured to
+# run ConTeXt.
+# ---------------------------------------------------------------------------
+
+source ../scripts/build-template
+
+readonly CONTAINER_NAME=typesetter
+readonly CONTAINER_NETWORK=host
+readonly CONTAINER_FILE=${CONTAINER_NAME}
+readonly CONTAINER_ARCHIVE_FILE=${CONTAINER_FILE}.tar
+readonly CONTAINER_COMPRESSED_FILE=${CONTAINER_ARCHIVE_FILE}.gz
+readonly CONTAINER_EXE=podman
+
+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 (default)"
+ "l,load,Load container image (${CONTAINER_COMPRESSED_FILE})"
+ "r,remove,Remove all container images"
+ "s,save,Save container image (${CONTAINER_COMPRESSED_FILE})"
+)
+
+# ---------------------------------------------------------------------------
+# Manages the container image
+# ---------------------------------------------------------------------------
+execute() {
+ $do_remove
+ $do_build
+ $do_save
+ $do_load
+ $do_execute
+ $do_connect
+
+ return 1
+}
+
+# ---------------------------------------------------------------------------
+# Removes all container images
+# ---------------------------------------------------------------------------
+utile_remove() {
+ ${CONTAINER_EXE} rmi --all --force
+}
+
+# ---------------------------------------------------------------------------
+# Builds the container file in the current working directory
+# ---------------------------------------------------------------------------
+utile_build() {
+ ${CONTAINER_EXE} build \
+ --network=${CONTAINER_NETWORK} \
+ --tag ${CONTAINER_NAME} . | \
+ grep ^STEP
+}
+
+# ---------------------------------------------------------------------------
+# Connects to the container
+# ---------------------------------------------------------------------------
+utile_connect() {
+ ${CONTAINER_EXE} run \
+ --network=${CONTAINER_NETWORK} \
+ --rm \
+ -i \
+ -t ${CONTAINER_NAME}
+}
+
+# ---------------------------------------------------------------------------
+# Runs a command in the container
+# ---------------------------------------------------------------------------
+utile_execute() {
+# -v ${IMAGES_DIR}:/root/images:ro \
+ ${CONTAINER_EXE} run \
+ --network=${CONTAINER_NETWORK} \
+ --rm \
+ -i \
+ -t ${CONTAINER_NAME} \
+ /bin/sh --login -c 'context --version'
+}
+
+# ---------------------------------------------------------------------------
+# Saves the container to a file
+# ---------------------------------------------------------------------------
+utile_save() {
+ ${CONTAINER_EXE} save \
+ --quiet \
+ -o "${CONTAINER_ARCHIVE_FILE}" \
+ "${CONTAINER_NAME}"
+ gzip "${CONTAINER_ARCHIVE_FILE}"
+}
+
+# ---------------------------------------------------------------------------
+# Loads the container from a file
+# ---------------------------------------------------------------------------
+utile_load() {
+ if [[ -f "${CONTAINER_COMPRESSED_FILE}" ]]; then
+ ${CONTAINER_EXE} load \
+ --quiet \
+ -i "${CONTAINER_COMPRESSED_FILE}"
+ else
+ warning "Missing ${CONTAINER_COMPRESSED_FILE}; use build and save"
+ fi
+}
+
+argument() {
+ local consume=1
+
+ case "$1" in
+ -b|--build)
+ do_remove=utile_build
+ ;;
+ -c|--connect)
+ do_connect=utile_connect
+ ;;
+ -l|--load)
+ do_load=utile_load
+ ;;
+ -r|--remove)
+ do_remove=utile_remove
+ ;;
+ -s|--save)
+ do_save=utile_save
+ ;;
+ esac
+
+ return ${consume}
+}
+
+do_build=:
+do_clean=:
+do_save=:
+do_load=:
+do_execute=:
+do_connect=utile_connect
+
+main "$@"
+
Delta145 lines added, 36 lines removed, 109-line increase