Skip to content

Commit 1750980

Browse files
mandeepsplahajslobodzian
authored andcommitted
move busybox from core to golden container (#8559)
1 parent 37e0d81 commit 1750980

File tree

4 files changed

+37
-33
lines changed

4 files changed

+37
-33
lines changed

.pipelines/containerSourceData/base/Dockerfile-Busybox-Template renamed to .pipelines/containerSourceData/busybox/Dockerfile-Busybox

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,28 @@ FROM $BASE_IMAGE AS BASE
77

88
ARG AZL_VERSION=3.0
99

10-
ARG RPMS
11-
ARG LOCAL_REPO_FILE="local.repo"
12-
ARG LOCAL_REPO_PATH="/localrepo"
10+
ARG RPMS_TO_INSTALL
11+
ARG RPMS_PATH="/dockerStage/RPMS"
12+
ARG LOCAL_REPO_FILE="/dockerStage/azurelinuxlocal.repo"
13+
ARG LOCAL_REPO_PATH="/localrepo"
1314

14-
COPY ${RPMS} /WORKDIR/RPMS
15-
COPY ${LOCAL_REPO_FILE} /WORKDIR/REPO/local.repo
16-
17-
# Create local repo if RPMS are provided
15+
# Create local repo with the given RPMS.
1816
# This will allow the user to install packages from the local repo
1917
# instead of fetching from PMC
20-
RUN if [ "${RPMS}" ]; then \
18+
RUN --mount=type=bind,source=./Stage/,target=/dockerStage/ \
2119
mkdir -p $LOCAL_REPO_PATH; \
2220
tdnf install -y --releasever=$AZL_VERSION createrepo; \
23-
cp -r /WORKDIR/RPMS ${LOCAL_REPO_PATH}; \
24-
cp /WORKDIR/REPO/local.repo /etc/yum.repos.d/local.repo; \
25-
createrepo --database ${LOCAL_REPO_PATH} --workers 10; \
21+
cp -r ${RPMS_PATH} ${LOCAL_REPO_PATH}; \
22+
cp ${LOCAL_REPO_FILE} /etc/yum.repos.d/local.repo; \
23+
createrepo --compatibility --database ${LOCAL_REPO_PATH} --workers 10; \
2624
tdnf makecache; \
27-
tdnf autoremove -y createrepo; \
28-
fi
25+
tdnf autoremove -y createrepo;
2926

30-
# Install busybox, glibc, and their dependencies into a staging location.
27+
# Install packages into a staging location.
3128
# Staging directory is copied into the final scratch image.
3229
RUN mkdir /staging \
3330
&& tdnf install -y --releasever=$AZL_VERSION --installroot /staging \
34-
busybox glibc \
31+
${RPMS_TO_INSTALL} \
3532
&& tdnf clean all \
3633
&& pushd /staging \
3734
&& rm -rf boot media mnt opt run \
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
azurelinux-release
2+
busybox
3+
glibc

.pipelines/containerSourceData/scripts/BuildBaseContainers.sh

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ set -e
2323
# │ ├── base
2424
# │ │ ├── Dockerfile-Base-Template
2525
# │ │ ├── Dockerfile-Base-Nonroot-Template
26-
# │ | ├── Dockerfile-Busybox-Template
2726
# │ │ ├── Dockerfile-Distroless-Template
2827
# │ │ ├── Dockerfile-Distroless-Nonroot-Template
2928
# │ container_tarballs
@@ -165,7 +164,6 @@ function initialization {
165164
# Image types
166165
BASE="base"
167166
DISTROLESS="distroless"
168-
BUSYBOX="busybox"
169167
MARINARA="marinara"
170168

171169
base_tarball_file_name=$(basename "$BASE_TARBALL") # core-3.0.20240101.tar.gz
@@ -193,7 +191,6 @@ function initialization {
193191
DISTROLESS_DEBUG_NONROOT_IMAGE_NAME="$ACR_NAME_FULL/distroless/debug:$NONROOT_IMAGE_TAG"
194192
DISTROLESS_DEBUG_IMAGE_NAME="$ACR_NAME_FULL/distroless/debug:$IMAGE_TAG"
195193

196-
BUSYBOX_IMAGE_NAME="$ACR_NAME_FULL/busybox:$IMAGE_TAG"
197194
MARINARA_IMAGE_NAME="$ACR_NAME_FULL/marinara:$IMAGE_TAG"
198195

199196
echo "BASE_IMAGE_NAME -> $BASE_IMAGE_NAME"
@@ -204,7 +201,6 @@ function initialization {
204201
echo "DISTROLESS_MINIMAL_NONROOT_IMAGE_NAME -> $DISTROLESS_MINIMAL_NONROOT_IMAGE_NAME"
205202
echo "DISTROLESS_DEBUG_IMAGE_NAME -> $DISTROLESS_DEBUG_IMAGE_NAME"
206203
echo "DISTROLESS_DEBUG_NONROOT_IMAGE_NAME -> $DISTROLESS_DEBUG_NONROOT_IMAGE_NAME"
207-
echo "BUSYBOX_IMAGE_NAME -> $BUSYBOX_IMAGE_NAME"
208204
echo "MARINARA_IMAGE_NAME -> $MARINARA_IMAGE_NAME"
209205
}
210206

@@ -236,7 +232,8 @@ function docker_build {
236232
--build-arg EULA="$EULA_FILE_NAME" \
237233
--build-arg BASE_IMAGE="$temp_image" \
238234
-t "$image_full_name" \
239-
--no-cache
235+
--no-cache \
236+
--progress=plain
240237

241238
docker rmi "$temp_image"
242239
popd > /dev/null
@@ -264,7 +261,8 @@ function docker_build_custom {
264261
--build-arg LOCAL_REPO_FILE="$LOCAL_REPO_FILE" \
265262
-t "$image_full_name" \
266263
-f "$CONTAINER_SRC_DIR/base/$dockerfile" \
267-
--no-cache
264+
--no-cache \
265+
--progress=plain
268266

269267
popd > /dev/null
270268

@@ -328,8 +326,6 @@ function build_images {
328326
docker_build_custom $DISTROLESS "$DISTROLESS_MINIMAL_NONROOT_IMAGE_NAME" "$DISTROLESS_MINIMAL_IMAGE_NAME" "Dockerfile-Distroless-Nonroot-Template"
329327
docker_build_custom $DISTROLESS "$DISTROLESS_DEBUG_NONROOT_IMAGE_NAME" "$DISTROLESS_DEBUG_IMAGE_NAME" "Dockerfile-Distroless-Nonroot-Template"
330328

331-
docker_build_custom $BUSYBOX "$BUSYBOX_IMAGE_NAME" "" "Dockerfile-Busybox-Template"
332-
333329
docker_build_marinara
334330
}
335331

.pipelines/containerSourceData/scripts/BuildGoldenContainer.sh

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ set -e
2727
# - s) SBOM tool path.
2828
# - t) Script to create SBOM for the container image.
2929
# - u) Create Distroless container (e.g. true, false. If true, the script will also create a distroless container)
30+
# - v) Version extract command (e.g. 'busybox | head -1 | cut -c 10-15')
3031

3132
# Assuming you are in your current working directory. Below should be the directory structure:
3233
# │ rpms.tar.gz
@@ -55,7 +56,7 @@ set -e
5556
# -j OUTPUT -k ./rpms.tar.gz -l ~/azurelinux/.pipelines/containerSourceData \
5657
# -m "false" -n "false" -p development -q "false" -u "true"
5758

58-
while getopts ":a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:" OPTIONS; do
59+
while getopts ":a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:" OPTIONS; do
5960
case ${OPTIONS} in
6061
a ) BASE_IMAGE_NAME_FULL=$OPTARG;;
6162
b ) ACR=$OPTARG;;
@@ -78,6 +79,7 @@ while getopts ":a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:" OPTIONS; do
7879
s ) SBOM_TOOL_PATH=$OPTARG;;
7980
t ) SBOM_SCRIPT=$OPTARG;;
8081
u ) DISTROLESS=$OPTARG;;
82+
v ) VERSION_EXTRACT_CMD=$OPTARG;;
8183

8284
\? )
8385
echo "Error - Invalid Option: -$OPTARG" 1>&2
@@ -113,6 +115,7 @@ function print_inputs {
113115
echo "CONTAINER_SRC_DIR -> $CONTAINER_SRC_DIR"
114116
echo "IS_HCI_IMAGE -> $IS_HCI_IMAGE"
115117
echo "USE_RPM_QA_CMD -> $USE_RPM_QA_CMD"
118+
echo "VERSION_EXTRACT_CMD -> $VERSION_EXTRACT_CMD"
116119
echo "REPO_PREFIX -> $REPO_PREFIX"
117120
echo "PUBLISHING_LEVEL -> $PUBLISHING_LEVEL"
118121
echo "PUBLISH_TO_ACR -> $PUBLISH_TO_ACR"
@@ -273,21 +276,26 @@ function set_image_tag {
273276
local containerId
274277
local installedPackage
275278

276-
containerId=$(docker run --entrypoint /bin/bash -dt "$GOLDEN_IMAGE_NAME")
279+
containerId=$(docker run --entrypoint /bin/sh -dt "$GOLDEN_IMAGE_NAME")
277280

278281
echo "Container ID -> $containerId"
279282

280-
if [[ $USE_RPM_QA_CMD =~ [Tt]rue ]] ; then
281-
echo "Using rpm -qa command to get installed package."
282-
installedPackage=$(docker exec "$containerId" rpm -qa | grep ^"$COMPONENT")
283+
if [[ -n "$VERSION_EXTRACT_CMD" ]]; then
284+
echo "Using custom version extract command."
285+
COMPONENT_VERSION=$(docker exec "$containerId" sh -c "$VERSION_EXTRACT_CMD")
283286
else
284-
echo "Using tdnf repoquery command to get installed package."
285-
# exec as root as the default user for some containers is non-root
286-
installedPackage=$(docker exec -u 0 "$containerId" tdnf repoquery --installed "$COMPONENT" | grep ^"$COMPONENT")
287+
if [[ $USE_RPM_QA_CMD =~ [Tt]rue ]] ; then
288+
echo "Using rpm -qa command to get installed package."
289+
installedPackage=$(docker exec "$containerId" rpm -qa | grep ^"$COMPONENT")
290+
else
291+
echo "Using tdnf repoquery command to get installed package."
292+
# exec as root as the default user for some containers is non-root
293+
installedPackage=$(docker exec -u 0 "$containerId" tdnf repoquery --installed "$COMPONENT" | grep ^"$COMPONENT")
294+
fi
295+
echo "Full Installed Package: -> $installedPackage"
296+
COMPONENT_VERSION=$(echo "$installedPackage" | awk '{n=split($0,a,"-")};{split(a[n],b,".")}; {print a[n-1]"-"b[1]}') # 16.16.0-1
287297
fi
288298

289-
echo "Full Installed Package: -> $installedPackage"
290-
COMPONENT_VERSION=$(echo "$installedPackage" | awk '{n=split($0,a,"-")};{split(a[n],b,".")}; {print a[n-1]"-"b[1]}') # 16.16.0-1
291299
echo "Component Version -> $COMPONENT_VERSION"
292300
docker rm -f "$containerId"
293301

0 commit comments

Comments
 (0)