diff --git a/scripts/dev_cli.sh b/scripts/dev_cli.sh index e97a33cbd..61bc684ab 100755 --- a/scripts/dev_cli.sh +++ b/scripts/dev_cli.sh @@ -48,32 +48,32 @@ CARGO_TARGET_DIR="${CLH_BUILD_DIR}/cargo_target" # Send a decorated message to stdout, followed by a new line # say() { - [ -t 1 ] && [ -n "$TERM" ] \ - && echo "$(tput setaf 2)[$CLI_NAME]$(tput sgr0) $*" \ - || echo "[$CLI_NAME] $*" + [ -t 1 ] && [ -n "$TERM" ] && + echo "$(tput setaf 2)[$CLI_NAME]$(tput sgr0) $*" || + echo "[$CLI_NAME] $*" } # Send a decorated message to stdout, without a trailing new line # say_noln() { - [ -t 1 ] && [ -n "$TERM" ] \ - && echo -n "$(tput setaf 2)[$CLI_NAME]$(tput sgr0) $*" \ - || echo "[$CLI_NAME] $*" + [ -t 1 ] && [ -n "$TERM" ] && + echo -n "$(tput setaf 2)[$CLI_NAME]$(tput sgr0) $*" || + echo "[$CLI_NAME] $*" } # Send a text message to stderr # say_err() { - [ -t 2 ] && [ -n "$TERM" ] \ - && echo "$(tput setaf 1)[$CLI_NAME] $*$(tput sgr0)" 1>&2 \ - || echo "[$CLI_NAME] $*" 1>&2 + [ -t 2 ] && [ -n "$TERM" ] && + echo "$(tput setaf 1)[$CLI_NAME] $*$(tput sgr0)" 1>&2 || + echo "[$CLI_NAME] $*" 1>&2 } # Send a warning-highlighted text to stdout say_warn() { - [ -t 1 ] && [ -n "$TERM" ] \ - && echo "$(tput setaf 3)[$CLI_NAME] $*$(tput sgr0)" \ - || echo "[$CLI_NAME] $*" + [ -t 1 ] && [ -n "$TERM" ] && + echo "$(tput setaf 3)[$CLI_NAME] $*$(tput sgr0)" || + echo "[$CLI_NAME] $*" } # Exit with an error message and (optional) code @@ -101,17 +101,17 @@ ok_or_die() { # ensure_build_dir() { for dir in "$CLH_BUILD_DIR" \ - "$CLH_INTEGRATION_WORKLOADS" \ - "$CLH_CTR_BUILD_DIR" \ - "$CARGO_TARGET_DIR" \ - "$CARGO_REGISTRY_DIR" \ - "$CARGO_GIT_REGISTRY_DIR"; do + "$CLH_INTEGRATION_WORKLOADS" \ + "$CLH_CTR_BUILD_DIR" \ + "$CARGO_TARGET_DIR" \ + "$CARGO_REGISTRY_DIR" \ + "$CARGO_GIT_REGISTRY_DIR"; do mkdir -p "$dir" || die "Error: cannot create dir $dir" - [ -x "$dir" ] && [ -w "$dir" ] || \ + [ -x "$dir" ] && [ -w "$dir" ] || { say "Wrong permissions for $dir. Attempting to fix them ..." chmod +x+w "$dir" - } || \ + } || die "Error: wrong permissions for $dir. Should be +x+w" done } @@ -132,12 +132,12 @@ fix_dir_perms() { # Yes, running Docker to get elevated privileges, just to chown some files # is a dirty hack. $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - "$CTR_IMAGE" \ - chown -R "$(id -u):$(id -g)" "$CTR_CLH_ROOT_DIR" + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + "$CTR_IMAGE" \ + chown -R "$(id -u):$(id -g)" "$CTR_CLH_ROOT_DIR" return "$1" } @@ -151,8 +151,7 @@ process_volumes_args() { fi exported_volumes="" arr_vols=(${arg_vols//#/ }) - for var in "${arr_vols[@]}" - do + for var in "${arr_vols[@]}"; do parts=(${var//:/ }) if [[ ! -e "${parts[0]}" ]]; then echo "The volume ${parts[0]} does not exist." @@ -214,37 +213,43 @@ cmd_build() { features_build="" exported_device="/dev/kvm" while [ $# -gt 0 ]; do - case "$1" in - "-h"|"--help") { cmd_help; exit 1; } ;; - "--debug") { build="debug"; } ;; - "--release") { build="release"; } ;; - "--libc") - shift - [[ "$1" =~ ^(musl|gnu)$ ]] || \ - die "Invalid libc: $1. Valid options are \"musl\" and \"gnu\"." - libc="$1" - ;; - "--volumes") - shift - arg_vols="$1" - ;; - "--hypervisor") - shift - hypervisor="$1" - ;; - "--") { shift; break; } ;; - *) - die "Unknown build argument: $1. Please use --help for help." - ;; - esac - shift + case "$1" in + "-h" | "--help") { + cmd_help + exit 1 + } ;; + "--debug") { build="debug"; } ;; + "--release") { build="release"; } ;; + "--libc") + shift + [[ "$1" =~ ^(musl|gnu)$ ]] || + die "Invalid libc: $1. Valid options are \"musl\" and \"gnu\"." + libc="$1" + ;; + "--volumes") + shift + arg_vols="$1" + ;; + "--hypervisor") + shift + hypervisor="$1" + ;; + "--") { + shift + break + } ;; + *) + die "Unknown build argument: $1. Please use --help for help." + ;; + esac + shift done ensure_build_dir ensure_latest_ctr process_volumes_args - if [[ ! ("$hypervisor" = "kvm" || "$hypervisor" = "mshv") ]]; then + if [[ ! ("$hypervisor" = "kvm" || "$hypervisor" = "mshv") ]]; then die "Hypervisor value must be kvm or mshv" fi if [[ "$hypervisor" = "mshv" ]]; then @@ -259,21 +264,21 @@ cmd_build() { [ "$(uname -m)" = "aarch64" ] && cargo_args+=(--features "$hypervisor") rustflags="" - if [ "$(uname -m)" = "aarch64" ] && [ "$libc" = "musl" ] ; then + if [ "$(uname -m)" = "aarch64" ] && [ "$libc" = "musl" ]; then rustflags="-C link-arg=-lgcc -C link_arg=-specs -C link_arg=/usr/lib/aarch64-linux-musl/musl-gcc.specs" fi $DOCKER_RUNTIME run \ - --user "$(id -u):$(id -g)" \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --volume $exported_device \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --env RUSTFLAGS="$rustflags" \ - "$CTR_IMAGE" \ - cargo build --all "$features_build" \ - --target-dir "$CTR_CLH_CARGO_TARGET" \ - "${cargo_args[@]}" && say "Binaries placed under $CLH_CARGO_TARGET/$target/$build" + --user "$(id -u):$(id -g)" \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --volume $exported_device \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --env RUSTFLAGS="$rustflags" \ + "$CTR_IMAGE" \ + cargo build --all "$features_build" \ + --target-dir "$CTR_CLH_CARGO_TARGET" \ + "${cargo_args[@]}" && say "Binaries placed under $CLH_CARGO_TARGET/$target/$build" } cmd_clean() { @@ -283,15 +288,15 @@ cmd_clean() { ensure_latest_ctr $DOCKER_RUNTIME run \ - --user "$(id -u):$(id -g)" \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - "$CTR_IMAGE" \ - cargo clean \ - --target-dir "$CTR_CLH_CARGO_TARGET" \ - "${cargo_args[@]}" - } + --user "$(id -u):$(id -g)" \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + "$CTR_IMAGE" \ + cargo clean \ + --target-dir "$CTR_CLH_CARGO_TARGET" \ + "${cargo_args[@]}" +} cmd_tests() { unit=false @@ -307,39 +312,49 @@ cmd_tests() { hypervisor="kvm" exported_device="/dev/kvm" while [ $# -gt 0 ]; do - case "$1" in - "-h"|"--help") { cmd_help; exit 1; } ;; - "--unit") { unit=true; } ;; - "--cargo") { cargo=true; } ;; - "--integration") { integration=true; } ;; - "--integration-sgx") { integration_sgx=true; } ;; - "--integration-vfio") { integration_vfio=true; } ;; - "--integration-windows") { integration_windows=true; } ;; - "--integration-live-migration") { integration_live_migration=true; } ;; - "--metrics") { metrics=true; } ;; - "--libc") - shift - [[ "$1" =~ ^(musl|gnu)$ ]] || \ - die "Invalid libc: $1. Valid options are \"musl\" and \"gnu\"." - libc="$1" - ;; - "--volumes") - shift - arg_vols="$1" - ;; - "--hypervisor") - shift - hypervisor="$1" - ;; - "--all") { cargo=true; unit=true; integration=true; } ;; - "--") { shift; break; } ;; - *) - die "Unknown tests argument: $1. Please use --help for help." - ;; - esac - shift + case "$1" in + "-h" | "--help") { + cmd_help + exit 1 + } ;; + "--unit") { unit=true; } ;; + "--cargo") { cargo=true; } ;; + "--integration") { integration=true; } ;; + "--integration-sgx") { integration_sgx=true; } ;; + "--integration-vfio") { integration_vfio=true; } ;; + "--integration-windows") { integration_windows=true; } ;; + "--integration-live-migration") { integration_live_migration=true; } ;; + "--metrics") { metrics=true; } ;; + "--libc") + shift + [[ "$1" =~ ^(musl|gnu)$ ]] || + die "Invalid libc: $1. Valid options are \"musl\" and \"gnu\"." + libc="$1" + ;; + "--volumes") + shift + arg_vols="$1" + ;; + "--hypervisor") + shift + hypervisor="$1" + ;; + "--all") { + cargo=true + unit=true + integration=true + } ;; + "--") { + shift + break + } ;; + *) + die "Unknown tests argument: $1. Please use --help for help." + ;; + esac + shift done - if [[ ! ("$hypervisor" = "kvm" || "$hypervisor" = "mshv") ]]; then + if [[ ! ("$hypervisor" = "kvm" || "$hypervisor" = "mshv") ]]; then die "Hypervisor value must be kvm or mshv" fi @@ -355,142 +370,142 @@ cmd_tests() { process_volumes_args target="$(uname -m)-unknown-linux-${libc}" - if [[ "$unit" = true ]] ; then - say "Running unit tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --device $exported_device \ - --device /dev/net/tun \ - --cap-add net_admin \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --env BUILD_TARGET="$target" \ - "$CTR_IMAGE" \ - ./scripts/run_unit_tests.sh "$@" || fix_dir_perms $? || exit $? + if [[ "$unit" = true ]]; then + say "Running unit tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --device $exported_device \ + --device /dev/net/tun \ + --cap-add net_admin \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --env BUILD_TARGET="$target" \ + "$CTR_IMAGE" \ + ./scripts/run_unit_tests.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$cargo" = true ] ; then - say "Running cargo tests..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - "$CTR_IMAGE" \ - ./scripts/run_cargo_tests.sh "$@" || fix_dir_perms $? || exit $? + if [ "$cargo" = true ]; then + say "Running cargo tests..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + "$CTR_IMAGE" \ + ./scripts/run_cargo_tests.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$integration" = true ] ; then - say "Running integration tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_integration_tests_"$(uname -m)".sh "$@" || fix_dir_perms $? || exit $? + if [ "$integration" = true ]; then + say "Running integration tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_integration_tests_"$(uname -m)".sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$integration_sgx" = true ] ; then - say "Running SGX integration tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_integration_tests_sgx.sh "$@" || fix_dir_perms $? || exit $? + if [ "$integration_sgx" = true ]; then + say "Running SGX integration tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_integration_tests_sgx.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$integration_vfio" = true ] ; then - say "Running VFIO integration tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_integration_tests_vfio.sh "$@" || fix_dir_perms $? || exit $? + if [ "$integration_vfio" = true ]; then + say "Running VFIO integration tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_integration_tests_vfio.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$integration_windows" = true ] ; then - say "Running Windows integration tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_integration_tests_windows.sh "$@" || fix_dir_perms $? || exit $? + if [ "$integration_windows" = true ]; then + say "Running Windows integration tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_integration_tests_windows.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$integration_live_migration" = true ] ; then - say "Running 'live migration' integration tests for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_integration_tests_live_migration.sh "$@" || fix_dir_perms $? || exit $? + if [ "$integration_live_migration" = true ]; then + say "Running 'live migration' integration tests for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_integration_tests_live_migration.sh "$@" || fix_dir_perms $? || exit $? fi - if [ "$metrics" = true ] ; then - say "Generating performance metrics for $target..." - $DOCKER_RUNTIME run \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --mount type=tmpfs,destination=/tmp \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --env CH_LIBC="${libc}" \ - "$CTR_IMAGE" \ - ./scripts/run_metrics.sh "$@" || fix_dir_perms $? || exit $? + if [ "$metrics" = true ]; then + say "Generating performance metrics for $target..." + $DOCKER_RUNTIME run \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --mount type=tmpfs,destination=/tmp \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --env CH_LIBC="${libc}" \ + "$CTR_IMAGE" \ + ./scripts/run_metrics.sh "$@" || fix_dir_perms $? || exit $? fi fix_dir_perms $? @@ -500,15 +515,21 @@ cmd_build-container() { container_type="dev" while [ $# -gt 0 ]; do - case "$1" in - "-h"|"--help") { cmd_help; exit 1; } ;; - "--dev") { container_type="dev"; } ;; - "--") { shift; break; } ;; - *) - die "Unknown build-container argument: $1. Please use --help for help." - ;; - esac - shift + case "$1" in + "-h" | "--help") { + cmd_help + exit 1 + } ;; + "--dev") { container_type="dev"; } ;; + "--") { + shift + break + } ;; + *) + die "Unknown build-container argument: $1. Please use --help for help." + ;; + esac + shift done ensure_build_dir @@ -523,26 +544,32 @@ cmd_build-container() { [ "$(uname -m)" = "x86_64" ] && TARGETARCH="amd64" $DOCKER_RUNTIME build \ - --target $container_type \ - -t $CTR_IMAGE \ - -f $BUILD_DIR/Dockerfile \ - --build-arg TARGETARCH=$TARGETARCH \ - $BUILD_DIR + --target $container_type \ + -t $CTR_IMAGE \ + -f $BUILD_DIR/Dockerfile \ + --build-arg TARGETARCH=$TARGETARCH \ + $BUILD_DIR } cmd_shell() { while [ $# -gt 0 ]; do - case "$1" in - "-h"|"--help") { cmd_help; exit 1; } ;; - "--volumes") - shift - arg_vols="$1" - ;; - "--") { shift; break; } ;; - *) - ;; - esac - shift + case "$1" in + "-h" | "--help") { + cmd_help + exit 1 + } ;; + "--volumes") + shift + arg_vols="$1" + ;; + "--") { + shift + break + } ;; + *) ;; + + esac + shift done ensure_build_dir ensure_latest_ctr @@ -550,20 +577,20 @@ cmd_shell() { say_warn "Starting a privileged shell prompt as root ..." say_warn "WARNING: Your $CLH_ROOT_DIR folder will be bind-mounted in the container under $CTR_CLH_ROOT_DIR" $DOCKER_RUNTIME run \ - -ti \ - --workdir "$CTR_CLH_ROOT_DIR" \ - --rm \ - --privileged \ - --security-opt seccomp=unconfined \ - --ipc=host \ - --net="$CTR_CLH_NET" \ - --tmpfs /tmp:exec \ - --volume /dev:/dev \ - --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ - --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ - --env USER="root" \ - --entrypoint bash \ - "$CTR_IMAGE" + -ti \ + --workdir "$CTR_CLH_ROOT_DIR" \ + --rm \ + --privileged \ + --security-opt seccomp=unconfined \ + --ipc=host \ + --net="$CTR_CLH_NET" \ + --tmpfs /tmp:exec \ + --volume /dev:/dev \ + --volume "$CLH_ROOT_DIR:$CTR_CLH_ROOT_DIR" "$exported_volumes" \ + --volume "$CLH_INTEGRATION_WORKLOADS:$CTR_CLH_INTEGRATION_WORKLOADS" \ + --env USER="root" \ + --entrypoint bash \ + "$CTR_IMAGE" fix_dir_perms $? } @@ -572,14 +599,17 @@ cmd_shell() { # while [ $# -gt 0 ]; do case "$1" in - -h|--help) { cmd_help; exit 1; } ;; - -y|--unattended) { OPT_UNATTENDED=true; } ;; - -*) - die "Unknown arg: $1. Please use \`$0 help\` for help." - ;; - *) - break - ;; + -h | --help) { + cmd_help + exit 1 + } ;; + -y | --unattended) { OPT_UNATTENDED=true; } ;; + -*) + die "Unknown arg: $1. Please use \`$0 help\` for help." + ;; + *) + break + ;; esac shift done @@ -587,11 +617,10 @@ done # $1 is now a command name. Check if it is a valid command and, if so, # run it. # -declare -f "cmd_$1" > /dev/null +declare -f "cmd_$1" >/dev/null ok_or_die "Unknown command: $1. Please use \`$0 help\` for help." cmd=cmd_$1 shift - $cmd "$@"