From 9657ceac9b39f738f1cd85c339b366b73b14ce2d Mon Sep 17 00:00:00 2001 From: Ricardo Pardini Date: Wed, 30 Nov 2022 11:16:17 +0100 Subject: [PATCH] armbian-next: docker: implement `docker-purge` and `docker-shell` cli commands; deprecated mountpoints --- lib/functions/cli/cli-docker.sh | 20 ++++++++++++++++++-- lib/functions/cli/commands.sh | 20 ++++++++++---------- lib/functions/host/docker.sh | 19 +++++++++++++++++-- lib/functions/host/mountpoints.sh | 5 +++++ 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/lib/functions/cli/cli-docker.sh b/lib/functions/cli/cli-docker.sh index c61f45b01..f28056d66 100644 --- a/lib/functions/cli/cli-docker.sh +++ b/lib/functions/cli/cli-docker.sh @@ -28,6 +28,22 @@ function cli_docker_run() { declare -g SKIP_LOG_ARCHIVE=yes # Don't archive logs in the parent instance either. declare -g ARMBIAN_CLI_RELAUNCH_ARGS=() - produce_relaunch_parameters # produces ARMBIAN_CLI_RELAUNCH_ARGS - docker_cli_launch "${ARMBIAN_CLI_RELAUNCH_ARGS[@]}" # MARK: this "re-launches" using the passed params. + produce_relaunch_parameters # produces ARMBIAN_CLI_RELAUNCH_ARGS + + case "${DOCKER_SUBCMD}" in + shell) + display_alert "Launching Docker shell" "docker-shell" "info" + docker run -it "${DOCKER_ARGS[@]}" "${DOCKER_ARMBIAN_INITIAL_IMAGE_TAG}" /bin/bash + ;; + + purge) + display_alert "Purging unused Docker volumes" "docker-purge" "info" + docker_purge_deprecated_volumes + ;; + + *) + docker_cli_launch "${ARMBIAN_CLI_RELAUNCH_ARGS[@]}" # MARK: this "re-launches" using the passed params. + ;; + esac + } diff --git a/lib/functions/cli/commands.sh b/lib/functions/cli/commands.sh index dec754c2e..c8e067b0e 100644 --- a/lib/functions/cli/commands.sh +++ b/lib/functions/cli/commands.sh @@ -1,12 +1,12 @@ function armbian_register_commands() { # More than one command can map to the same handler. In that case, use ARMBIAN_COMMANDS_TO_VARS_DICT for specific vars. declare -g -A ARMBIAN_COMMANDS_TO_HANDLERS_DICT=( - ["docker"]="docker" # thus requires cli_docker_pre_run and cli_docker_run - ["docker-purge"]="docker" # idem @TODO unimplemented!!! - ["dockerpurge"]="docker" # idem @TODO unimplemented!!! - ["docker-shell"]="docker" # idem @TODO unimplemented!!! - ["dockershell"]="docker" # idem @TODO unimplemented!!! - ["generate-dockerfile"]="docker" # idem + ["docker"]="docker" # thus requires cli_docker_pre_run and cli_docker_run + ["docker-purge"]="docker" + ["dockerpurge"]="docker" + ["docker-shell"]="docker" + ["dockershell"]="docker" + ["generate-dockerfile"]="docker" ["vagrant"]="vagrant" # thus requires cli_vagrant_pre_run and cli_vagrant_run @@ -25,10 +25,10 @@ function armbian_register_commands() { # Vars to be set for each command. Optional. declare -g -A ARMBIAN_COMMANDS_TO_VARS_DICT=( - ["docker-purge"]="DOCKER_SUBCMD='purge'" # @TODO unimplemented! - ["dockerpurge"]="DOCKER_SUBCMD='purge'" # @TODO unimplemented! - ["docker-shell"]="DOCKER_SUBCMD='shell'" # @TODO unimplemented! - ["dockershell"]="DOCKER_SUBCMD='shell'" # @TODO unimplemented! + ["docker-purge"]="DOCKER_SUBCMD='purge'" + ["dockerpurge"]="DOCKER_SUBCMD='purge'" + ["docker-shell"]="DOCKER_SUBCMD='shell'" + ["dockershell"]="DOCKER_SUBCMD='shell'" ["generate-dockerfile"]="DOCKERFILE_GENERATE_ONLY='yes'" diff --git a/lib/functions/host/docker.sh b/lib/functions/host/docker.sh index 5bb674aa9..31fb7a263 100755 --- a/lib/functions/host/docker.sh +++ b/lib/functions/host/docker.sh @@ -110,7 +110,7 @@ function docker_cli_prepare() { # Prepare some dependencies; these will be used on the Dockerfile enable_all_extensions_builtin_and_user - initialize_extension_manager # initialize the extension manager. + initialize_extension_manager # initialize the extension manager. declare -a -g host_dependencies=() early_prepare_host_dependencies display_alert "Pre-game dependencies" "${host_dependencies[*]}" "debug" @@ -290,7 +290,7 @@ function docker_cli_prepare_launch() { # Pass env var ARMBIAN_RUNNING_IN_CONTAINER to indicate we're running under Docker. This is also set in the Dockerfile; make sure. "--env" "ARMBIAN_RUNNING_IN_CONTAINER=yes" - + # This env var is used super early (in entrypoint.sh), so set it as an env to current value. "--env" "ARMBIAN_ENABLE_CALL_TRACING=${DOCKER_ARMBIAN_ENABLE_CALL_TRACING:-no}" @@ -418,6 +418,21 @@ function docker_cli_show_armbian_volumes_disk_usage_internal() { fi } +function docker_purge_deprecated_volumes() { + prepare_armbian_mountpoints_description_dict + local mountpoint="" + for mountpoint in "${ARMBIAN_MOUNTPOINTS_DEPRECATED[@]}"; do + local volume_id="armbian-${mountpoint//\//-}" + display_alert "Purging deprecated Docker volume" "${volume_id}" "info" + if docker volume inspect "${volume_id}" &> /dev/null; then + run_host_command_logged docker volume rm "${volume_id}" + display_alert "Purged deprecated Docker volume" "${volume_id} OK" "info" + else + display_alert "Deprecated Docker volume not found" "${volume_id} OK" "info" + fi + done +} + # Leftovers from original Dockerfile before rewrite ## OLD DOCKERFILE ## RUN locale-gen en_US.UTF-8 ## OLD DOCKERFILE ## diff --git a/lib/functions/host/mountpoints.sh b/lib/functions/host/mountpoints.sh index 9f7d334a0..c783a46c4 100644 --- a/lib/functions/host/mountpoints.sh +++ b/lib/functions/host/mountpoints.sh @@ -28,6 +28,11 @@ function prepare_armbian_mountpoints_description_dict() { ["cache/sources/linux-kernel"]="docker_kind_linux=bind docker_kind_darwin=namedvolume" # working tree for kernel builds. huge. contains both sources and the built object files. needs to be local to the container, so it's a volume by default. On Linux, it's a bind-mount by default. ["cache/ccache"]="docker_kind_linux=bind docker_kind_darwin=namedvolume" # ccache object store. limited to 5gb by default. needs to be local to the container, so it's a volume by default. On Linux, it's a bind-mount by default. ) + + # These, if found, will be removed on `dockerpurge` and other cleanups. + # They "used to be" used by the build system, but no longer. + declare -g -a ARMBIAN_MOUNTPOINTS_DEPRECATED=( + ) } function loop_over_armbian_mountpoints() {