armbian-next: docker: implement docker-purge and docker-shell cli commands; deprecated mountpoints

This commit is contained in:
Ricardo Pardini
2022-11-30 11:16:17 +01:00
parent 277ce40e6f
commit 9657ceac9b
4 changed files with 50 additions and 14 deletions

View File

@@ -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
}

View File

@@ -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'"

View File

@@ -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 ##

View File

@@ -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() {