From 8ef7fe3a260ad86e20673172a4d0550ad1b0d823 Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Wed, 1 Sep 2021 12:48:02 -0700 Subject: [PATCH 01/12] add lttng to kernel build Signed-off-by: Evan Flynn --- .config-fragment | 13 +++++++++++++ Dockerfile | 17 +++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/.config-fragment b/.config-fragment index 01de715..4c2f514 100644 --- a/.config-fragment +++ b/.config-fragment @@ -2,3 +2,16 @@ CONFIG_PREEMPT_RT=y CONFIG_NO_HZ_FULL=y CONFIG_HZ_1000=y # CONFIG_AUFS_FS is not set +# required for lttng +CONFIG_LTTNG=y +CONFIG_MODULES=y +CONFIG_KALLSYMS=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_TRACEPOINTS=y +CONFIG_KPROBES=y # for kernel 5.7 and newer +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_EVENT_TRACING=y +# CONFIG_PERF_EVENTS not set +# CONFIG_KPROBES not set +# CONFIG_KRETPROBES not set +# CONFIG_KALLSYMS_ALL not set diff --git a/Dockerfile b/Dockerfile index 131a184..eebb7d1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -95,6 +95,10 @@ RUN sudo apt-get update \ && apt-get source linux-image-`cat /uname_r` \ && sudo rm -rf /var/lib/apt/lists/* +# install lttng dependencies +RUN sudo apt-get update \ + && sudo apt-get install -y libuuid1 libpopt0 liburcu6 libxml2 numactl + COPY ./getpatch.sh /getpatch.sh # get the nearest RT patch to the kernel SUBLEVEL @@ -130,3 +134,16 @@ RUN cd `ls -d */` \ RUN cd `ls -d */` \ && fakeroot debian/rules clean + +# download lttng source for use later +# TODO(flynneva): make script to auto-determine which version to get? +RUN cd $HOME \ + && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-2.12.tar.bz2 \ + && tar -xf *.tar.bz2 + +# run lttng built-in script to configur RT kernel +RUN set -x \ + && export KERNEL_DIR=`ls -d */` \ + && cd $HOME \ + && cd `ls -d lttng-*/` \ + && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR}kernel/ From 511ac2feca97135d2c521f4fb3d91874eadf1889 Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Wed, 1 Sep 2021 15:17:45 -0700 Subject: [PATCH 02/12] fix kernel src path for lttng script Signed-off-by: Evan Flynn --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index eebb7d1..e9c499b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -141,9 +141,10 @@ RUN cd $HOME \ && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-2.12.tar.bz2 \ && tar -xf *.tar.bz2 -# run lttng built-in script to configur RT kernel +# run lttng built-in script to configure RT kernel RUN set -x \ && export KERNEL_DIR=`ls -d */` \ && cd $HOME \ && cd `ls -d lttng-*/` \ - && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR}kernel/ + && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR} \ + && ./scripts/rt-patch-version.sh ${HOME}/linux_build/${KERNEL_DIR} From cb93bf69f66883e83b2bb3a6afec596f59720deb Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Thu, 2 Sep 2021 12:47:07 -0700 Subject: [PATCH 03/12] update config fragment, use arg for lttng version --- .config-fragment | 14 +++++++------- Dockerfile | 3 ++- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.config-fragment b/.config-fragment index 4c2f514..fc129a0 100644 --- a/.config-fragment +++ b/.config-fragment @@ -2,16 +2,16 @@ CONFIG_PREEMPT_RT=y CONFIG_NO_HZ_FULL=y CONFIG_HZ_1000=y # CONFIG_AUFS_FS is not set -# required for lttng -CONFIG_LTTNG=y +CONFIG_LTTNG=m +CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM=n +CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m CONFIG_MODULES=y CONFIG_KALLSYMS=y CONFIG_HIGH_RES_TIMERS=y CONFIG_TRACEPOINTS=y -CONFIG_KPROBES=y # for kernel 5.7 and newer +CONFIG_KPROBES=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_EVENT_TRACING=y -# CONFIG_PERF_EVENTS not set -# CONFIG_KPROBES not set -# CONFIG_KRETPROBES not set -# CONFIG_KALLSYMS_ALL not set +CONFIG_PERF_EVENTS=y +CONFIG_KRETPROBES=y +CONFIG_KALLSYMS_ALL=y diff --git a/Dockerfile b/Dockerfile index e9c499b..0876d34 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,6 +39,7 @@ ARG ARCH=arm64 ARG UNAME_R ARG RT_PATCH ARG triple=aarch64-linux-gnu +ARG LTTNG=2.12 # setup arch RUN apt-get update && apt-get install -q -y \ @@ -138,7 +139,7 @@ RUN cd `ls -d */` \ # download lttng source for use later # TODO(flynneva): make script to auto-determine which version to get? RUN cd $HOME \ - && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-2.12.tar.bz2 \ + && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-${LTTNG}.tar.bz2 \ && tar -xf *.tar.bz2 # run lttng built-in script to configure RT kernel From 7b47e89fe958405019a84a20090873d22e8523f5 Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Fri, 3 Sep 2021 12:28:20 -0700 Subject: [PATCH 04/12] reorder dockerfile, update config fragment settings for lttng Signed-off-by: Evan Flynn --- .config-fragment | 12 ++++++------ Dockerfile | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.config-fragment b/.config-fragment index fc129a0..3bb0cf4 100644 --- a/.config-fragment +++ b/.config-fragment @@ -2,16 +2,16 @@ CONFIG_PREEMPT_RT=y CONFIG_NO_HZ_FULL=y CONFIG_HZ_1000=y # CONFIG_AUFS_FS is not set -CONFIG_LTTNG=m -CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM=n -CONFIG_LTTNG_CLOCK_PLUGIN_TEST=m +CONFIG_LTTNG=y +# CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM is not set +CONFIG_LTTNG_CLOCK_PLUGIN_TEST=y CONFIG_MODULES=y CONFIG_KALLSYMS=y CONFIG_HIGH_RES_TIMERS=y CONFIG_TRACEPOINTS=y -CONFIG_KPROBES=y +# CONFIG_KPROBES is not set CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_EVENT_TRACING=y CONFIG_PERF_EVENTS=y -CONFIG_KRETPROBES=y -CONFIG_KALLSYMS_ALL=y +# CONFIG_KRETPROBES is not set +# CONFIG_KALLSYMS_ALL is not set diff --git a/Dockerfile b/Dockerfile index 0876d34..6756888 100644 --- a/Dockerfile +++ b/Dockerfile @@ -116,6 +116,20 @@ RUN cd `ls -d */` \ RUN wget http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-`cat $HOME/rt_patch`.patch.gz \ && gunzip patch-`cat $HOME/rt_patch`.patch.gz +# download lttng source for use later +# TODO(flynneva): make script to auto-determine which version to get? +RUN cd $HOME \ + && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-${LTTNG}.tar.bz2 \ + && tar -xf *.tar.bz2 + +# run lttng built-in script to configure RT kernel +RUN set -x \ + && export KERNEL_DIR=`ls -d */` \ + && cd $HOME \ + && cd `ls -d lttng-*/` \ + && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR} \ + && ./scripts/rt-patch-version.sh ${HOME}/linux_build/${KERNEL_DIR} + # patch `raspi` kernel, do not fail if some patches are skipped RUN cd `ls -d */` \ && OUT="$(patch -p1 --forward < ../patch-`cat $HOME/rt_patch`.patch)" || echo "${OUT}" | grep "Skipping patch" -q || (echo "$OUT" && false); @@ -135,17 +149,3 @@ RUN cd `ls -d */` \ RUN cd `ls -d */` \ && fakeroot debian/rules clean - -# download lttng source for use later -# TODO(flynneva): make script to auto-determine which version to get? -RUN cd $HOME \ - && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-${LTTNG}.tar.bz2 \ - && tar -xf *.tar.bz2 - -# run lttng built-in script to configure RT kernel -RUN set -x \ - && export KERNEL_DIR=`ls -d */` \ - && cd $HOME \ - && cd `ls -d lttng-*/` \ - && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR} \ - && ./scripts/rt-patch-version.sh ${HOME}/linux_build/${KERNEL_DIR} From 94f737b16cc93d44b8a0623cc1eb6ebcfefbf440 Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Tue, 7 Sep 2021 12:11:54 -0700 Subject: [PATCH 05/12] specify entire LTTNG version via ARG Signed-off-by: Evan Flynn --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6756888..2ce639b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,7 +39,7 @@ ARG ARCH=arm64 ARG UNAME_R ARG RT_PATCH ARG triple=aarch64-linux-gnu -ARG LTTNG=2.12 +ARG LTTNG=2.12.5 # setup arch RUN apt-get update && apt-get install -q -y \ @@ -119,7 +119,7 @@ RUN wget http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-`cat # download lttng source for use later # TODO(flynneva): make script to auto-determine which version to get? RUN cd $HOME \ - && wget https://lttng.org/files/lttng-modules/lttng-modules-latest-${LTTNG}.tar.bz2 \ + && wget https://lttng.org/files/lttng-modules/lttng-modules-${LTTNG}.tar.bz2 \ && tar -xf *.tar.bz2 # run lttng built-in script to configure RT kernel From 7454731d3a553f989e2d72eb23be6da7dc255a58 Mon Sep 17 00:00:00 2001 From: Evan Flynn Date: Thu, 9 Sep 2021 10:28:54 -0700 Subject: [PATCH 06/12] use ubuntu ppa source for lttng, add lttng section to readme Signed-off-by: Evan Flynn --- Dockerfile | 10 +++++----- README.md | 8 ++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2ce639b..ae713c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,7 +39,7 @@ ARG ARCH=arm64 ARG UNAME_R ARG RT_PATCH ARG triple=aarch64-linux-gnu -ARG LTTNG=2.12.5 +ARG LTTNG=2.12 # setup arch RUN apt-get update && apt-get install -q -y \ @@ -119,16 +119,16 @@ RUN wget http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older/patch-`cat # download lttng source for use later # TODO(flynneva): make script to auto-determine which version to get? RUN cd $HOME \ - && wget https://lttng.org/files/lttng-modules/lttng-modules-${LTTNG}.tar.bz2 \ - && tar -xf *.tar.bz2 + && sudo apt-add-repository ppa:lttng/stable-${LTTNG} \ + && sudo apt-get update \ + && apt-get source lttng-modules-dkms # run lttng built-in script to configure RT kernel RUN set -x \ && export KERNEL_DIR=`ls -d */` \ && cd $HOME \ && cd `ls -d lttng-*/` \ - && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR} \ - && ./scripts/rt-patch-version.sh ${HOME}/linux_build/${KERNEL_DIR} + && ./scripts/built-in.sh ${HOME}/linux_build/${KERNEL_DIR} # patch `raspi` kernel, do not fail if some patches are skipped RUN cd `ls -d */` \ diff --git a/README.md b/README.md index 5302edb..f2101ba 100644 --- a/README.md +++ b/README.md @@ -95,12 +95,14 @@ which corresponds to the following kernel configuration If you need to reconfigure it, run ```bash +$ cd $HOME/linux_build/linux-raspi $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig ``` ### Kernel build ```bash +$ cd $HOME/linux_build/linux-raspi $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j `nproc` deb-pkg ``` @@ -174,6 +176,12 @@ Linux ubuntu 5.4.101-rt53 #1 SMP PREEMPT_RT Mon May 17 12:10:16 UTC 2021 aarch64 To build ```x86_64``` Linux kernel, see [Building Realtime rt_preempt kernel for ROS 2](https://index.ros.org/doc/ros2/Tutorials/Building-Realtime-rt_preempt-kernel-for-ROS-2) +## Why is LTTNG included in the kernel? + +[LTTNG](https://lttng.org/docs) stands for _Linux Trace Toolkit: next generation_ and is an open source toolkit that enables low-level kernel tracing which can be extremely useful when calculating callback times, memory usage and many other key characteristics. + +As this repository is within the `ros-realtime` organization it can be assumed that most users will install ROS2 on the end system - which then they can use the `ros2_tracing` package to trace various things. Since [the `ros2_tracing` package](https://gitlab.com/ros-tracing/ros2_tracing) uses `LTTNG` as its tracer, and since [the `lttng-modules` package is not easily available](https://github.com/ros-realtime/rt-kernel-docker-builder/issues/16) for the raspberry-pi RT linux kernel we build it into the kernel here as a work around. + ## References * https://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=linux-image-5.4&searchon=names From 0c4436b1a97a16e9572b149d566cf741e2e1fa26 Mon Sep 17 00:00:00 2001 From: Andrei Kholodnyi Date: Fri, 10 Sep 2021 22:23:36 +0200 Subject: [PATCH 07/12] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a4358d..301c727 100644 --- a/README.md +++ b/README.md @@ -94,14 +94,14 @@ which corresponds to the following kernel configuration If you need to reconfigure it, run ```bash -$ cd $HOME/linux_build/linux-raspi +$ cd $HOME/linux_build/linux-raspi-* $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig ``` ### Kernel build ```bash -$ cd $HOME/linux_build/linux-raspi +$ cd $HOME/linux_build/linux-raspi-* $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j `nproc` deb-pkg ``` From 2539890d7c51919a40df30ec1326cde4fc8f6b86 Mon Sep 17 00:00:00 2001 From: Evan Flynn <6157095+flynneva@users.noreply.github.com> Date: Fri, 10 Sep 2021 13:38:34 -0700 Subject: [PATCH 08/12] Update README.md LTTng section Co-authored-by: Christophe Bedard --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 301c727..9fb2ac2 100644 --- a/README.md +++ b/README.md @@ -179,11 +179,11 @@ Linux ubuntu 5.4.101-rt53 #1 SMP PREEMPT_RT Mon May 17 12:10:16 UTC 2021 aarch64 To build ```x86_64``` Linux kernel, see [Building Realtime rt_preempt kernel for ROS 2](https://index.ros.org/doc/ros2/Tutorials/Building-Realtime-rt_preempt-kernel-for-ROS-2) -## Why is LTTNG included in the kernel? +## Why is LTTng included in the kernel? -[LTTNG](https://lttng.org/docs) stands for _Linux Trace Toolkit: next generation_ and is an open source toolkit that enables low-level kernel tracing which can be extremely useful when calculating callback times, memory usage and many other key characteristics. +[LTTng](https://lttng.org/docs) stands for _Linux Trace Toolkit: next generation_ and is an open source toolkit that enables low-level kernel tracing which can be extremely useful when calculating callback times, memory usage and many other key characteristics. -As this repository is within the `ros-realtime` organization it can be assumed that most users will install ROS2 on the end system - which then they can use the `ros2_tracing` package to trace various things. Since [the `ros2_tracing` package](https://gitlab.com/ros-tracing/ros2_tracing) uses `LTTNG` as its tracer, and since [the `lttng-modules` package is not easily available](https://github.com/ros-realtime/rt-kernel-docker-builder/issues/16) for the raspberry-pi RT linux kernel we build it into the kernel here as a work around. +As this repository is within the `ros-realtime` organization it can be assumed that most users will install ROS 2 on the end system - which then they can use `ros2_tracing` to trace various things. Since [`ros2_tracing`](https://gitlab.com/ros-tracing/ros2_tracing) uses LTTng as its tracer, and since [the `lttng-modules` package is not easily available](https://github.com/ros-realtime/rt-kernel-docker-builder/issues/16) for the raspberry-pi RT linux kernel we build it into the kernel here as a work around. ## References From c30ef660b93bc2b1468e04402ad94428ce3303fa Mon Sep 17 00:00:00 2001 From: Andrei Kholodnyi Date: Sat, 11 Sep 2021 19:36:23 +0000 Subject: [PATCH 09/12] build kernel on each pull request of the master branch --- .github/workflows/rpi4-kernel-build.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rpi4-kernel-build.yml b/.github/workflows/rpi4-kernel-build.yml index 28e8389..8d4107c 100644 --- a/.github/workflows/rpi4-kernel-build.yml +++ b/.github/workflows/rpi4-kernel-build.yml @@ -14,13 +14,17 @@ name: 'RPI4 RT Kernel build' # Controls when the workflow will run on: - # Triggers the workflow on push only if kernel configuration changed + # Trigger the workflow on push or pull request, + # but only for the master branch push: - paths: - - '.config-fragment' + branches: + - master + pull_request: + branches: + - master # Allows you to run this workflow manually from the Actions tab - # manual start works on teh default branch only + # manual start works on the default branch only workflow_dispatch: # A workflow run is made up of one or more jobs that can run sequentially or in parallel @@ -160,4 +164,4 @@ jobs: with: name: 'RPI4 RT Kernel deb packages' path: ~/linux_build/*.deb - + \ No newline at end of file From d8328dd505f5613cfb2d3d95050f3b5938088bc6 Mon Sep 17 00:00:00 2001 From: Carlos Date: Mon, 27 Sep 2021 16:44:40 +0200 Subject: [PATCH 10/12] Update kernel settings - Disable 99 priority tasks - enable freq scaling and performance governor Signed-off-by: Carlos --- .config-fragment | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.config-fragment b/.config-fragment index ea8942c..af4a7a3 100644 --- a/.config-fragment +++ b/.config-fragment @@ -1,8 +1,14 @@ CONFIG_PREEMPT_RT=y +CONFIG_LOCKUP_DETECTOR=n +CONFIG_DETECT_HUNG_TASK=n CONFIG_NO_HZ_FULL=y CONFIG_HZ_1000=y # CONFIG_AUFS_FS is not set -CONFIG_CPU_FREQ=n +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y CONFIG_CPU_IDLE=n CONFIG_LTTNG=y # CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM is not set From 483090dfa69de42fc63a5474da447c709d73f669 Mon Sep 17 00:00:00 2001 From: Andrei Kholodnyi Date: Tue, 28 Sep 2021 23:28:13 +0200 Subject: [PATCH 11/12] add CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y --- .config-fragment | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.config-fragment b/.config-fragment index af4a7a3..576a6c9 100644 --- a/.config-fragment +++ b/.config-fragment @@ -5,10 +5,9 @@ CONFIG_NO_HZ_FULL=y CONFIG_HZ_1000=y # CONFIG_AUFS_FS is not set CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -CONFIG_CPU_FREQ_GOV_COMMON=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y CONFIG_CPU_IDLE=n CONFIG_LTTNG=y # CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM is not set From 8940570b348bc4b93b1de011c16a1aa018a356e2 Mon Sep 17 00:00:00 2001 From: LanderU Date: Wed, 29 Sep 2021 23:01:25 +0200 Subject: [PATCH 12/12] Include openssh-client to use scp command Signed-off-by: LanderU --- Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 241eee2..b585951 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,17 +4,17 @@ # if the build arguments defined it will build a corresponding version instead # $ docker build [--build-arg UNAME_R=] [--build-arg RT_PATCH=] -t rtwg-image . # -# where is in a form of 5.4.0-1034-raspi, +# where is in a form of 5.4.0-1034-raspi, # see https://packages.ubuntu.com/search?suite=default§ion=all&arch=any&keywords=linux-image-5.4&searchon=names -# and is in a form of 5.4.106-rt54, +# and is in a form of 5.4.106-rt54, # see http://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/older # -# $ docker run -it rtwg-image bash +# $ docker run -it rtwg-image bash # # and then inside the docker # $ $HOME/linux_build && cd `ls -d */` # $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j `nproc` deb-pkg -# +# # user ~/linux_build/linux-raspi-5.4.0 $ ls -la ../*.deb # -rw-r--r-- 1 user user 11430676 May 17 14:40 ../linux-headers-5.4.101-rt53_5.4.101-rt53-1_arm64.deb # -rw-r--r-- 1 user user 487338132 May 17 14:40 ../linux-image-5.4.101-rt53-dbg_5.4.101-rt53-1_arm64.deb @@ -32,7 +32,7 @@ ARG DEBIAN_FRONTEND=noninteractive # setup timezone RUN echo 'Etc/UTC' > /etc/timezone \ && ln -s -f /usr/share/zoneinfo/Etc/UTC /etc/localtime \ - && apt-get update && apt-get install -q -y tzdata apt-utils lsb-release software-properties-common \ + && apt-get update && apt-get install -q -y tzdata apt-utils lsb-release software-properties-common openssh-client \ && rm -rf /var/lib/apt/lists/* ARG ARCH=arm64