27
27
# - s) SBOM tool path.
28
28
# - t) Script to create SBOM for the container image.
29
29
# - 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')
30
31
31
32
# Assuming you are in your current working directory. Below should be the directory structure:
32
33
# │ rpms.tar.gz
55
56
# -j OUTPUT -k ./rpms.tar.gz -l ~/azurelinux/.pipelines/containerSourceData \
56
57
# -m "false" -n "false" -p development -q "false" -u "true"
57
58
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
59
60
case ${OPTIONS} in
60
61
a ) BASE_IMAGE_NAME_FULL=$OPTARG ;;
61
62
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
78
79
s ) SBOM_TOOL_PATH=$OPTARG ;;
79
80
t ) SBOM_SCRIPT=$OPTARG ;;
80
81
u ) DISTROLESS=$OPTARG ;;
82
+ v ) VERSION_EXTRACT_CMD=$OPTARG ;;
81
83
82
84
\? )
83
85
echo " Error - Invalid Option: -$OPTARG " 1>&2
@@ -113,6 +115,7 @@ function print_inputs {
113
115
echo " CONTAINER_SRC_DIR -> $CONTAINER_SRC_DIR "
114
116
echo " IS_HCI_IMAGE -> $IS_HCI_IMAGE "
115
117
echo " USE_RPM_QA_CMD -> $USE_RPM_QA_CMD "
118
+ echo " VERSION_EXTRACT_CMD -> $VERSION_EXTRACT_CMD "
116
119
echo " REPO_PREFIX -> $REPO_PREFIX "
117
120
echo " PUBLISHING_LEVEL -> $PUBLISHING_LEVEL "
118
121
echo " PUBLISH_TO_ACR -> $PUBLISH_TO_ACR "
@@ -273,21 +276,26 @@ function set_image_tag {
273
276
local containerId
274
277
local installedPackage
275
278
276
- containerId=$( docker run --entrypoint /bin/bash -dt " $GOLDEN_IMAGE_NAME " )
279
+ containerId=$( docker run --entrypoint /bin/sh -dt " $GOLDEN_IMAGE_NAME " )
277
280
278
281
echo " Container ID -> $containerId "
279
282
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 " )
283
286
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
287
297
fi
288
298
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
291
299
echo " Component Version -> $COMPONENT_VERSION "
292
300
docker rm -f " $containerId "
293
301
0 commit comments