Skip to content

Commit 310734f

Browse files
judovanasxa
andauthored
make build -D work with podman (#3796)
* added podman to switches with -D podman is preffered, becuase if there is podman, then docker woudl be podman wrapper, and it is not 1:1 with original docker All other work shoudl be in signalhandler.sh and docker-build.sh and not sure how with ./docker/buildDocker.sh * Adjusted signalHandler to countwith podman/docker Not sure if it is used: KEEP_CONTAINER and $CONTAINER_NAME are nowhere to found however BUILD_CONFIG[KEEP_CONTAINER] and BUILD_CONFIG[CONTAINER_NAME] are thus using them and BUILD_CONFIG[USE_DOCKER] for command handler * reworked BUILD_CONFIG[DOCKER] to contain only sudo information it is not used consitently anyway, there is BUILD_CONFIG[DOCKER] x plain docker. It will be utilised to ${BUILD_CONFIG[DOCKER]} ${BUILD_CONFIG[USE_DOCKER]} where commands are same. Where not (eg buildah), ${BUILD_CONFIG[DOCKER]} will be used as needed Once it is unified, it would be worth to rename BUILD_CONFIG[DOCKER] to BUILD_CONFIG[CONTAINER_WITH_SUDO] BUILD_CONFIG[USE_DOCKER] to BUILD_CONFIG[CONTAINER_PROVIDER] * using the BUILD_CONFIG[DOCKER] BUILD_CONFIG[USE_DOCKER] combo proeprly * On podman, set --userns=keep-id * porecreate all necessary dirs Podman is creating all mounted folders as root root 744 So next to --userns=keep-id which set proeprly the owner ow mounted folder itself, we have to pre-create the used parents of mounted folder Maybe this should be podman only, but afaik it do not hurt in docker * Added warinbg to `docker build` command when used with podman * Using absolute path instead of "." however it was not guilty: open my $fh, '<', $filename or die "Couldn't open file: $!"; in mk-ca-bundle.pl is. * docker-build.sh jsut-> just Co-authored-by: Stewart X Addison <[email protected]> * Removed unused parameter of buildOpenJDKViaDocker buildOpenJDKViaDocker do not need ${BUILD_CONFIG[USE_DOCKER]} as parameter. docker-build.sh is inheriting the whole BUILD_CONFIG * use which podman without [] and to dev/null Co-authored-by: Stewart X Addison <[email protected]> * Revert "Using absolute path instead of "."" This reverts commit 55f1195. * Fixed issue with missing test for mk-ca-bundle.pl * Always generate configure-and-build.sh * Removed more hardcoded dockers * Do not set boot jdk for docekr builds (it is removed later anyway) * Added few more missing dirs * Fixed boot jdk check against new docker/podman/false * replacing missed ${BUILD_CONFIG[DOCKER]} by ${BUILD_CONFIG[DOCKER]} "${BUILD_CONFIG[USE_DOCKER]}" Originally, this patch started to fix properly quote for safety (thanx linter), I foudn that on sme pleaces, original ${BUILD_CONFIG[DOCKER]} was not repalced by new tandem. ${BUILD_CONFIG[DOCKER]} was 'docker' or 'sudo docker'. I had split it, so ${BUILD_CONFIG[DOCKER]} is sudo or nothing and ${BUILD_CONFIG[USE_DOCKER]}" is docker or podman. The variables have to be renamed at the end to adhere more to theirs purposes. * instead of workspace/build/src creatig directly /workspace/build all sub dirs should be then created by follwoing prepare-workspace * Remoed accident tab * Added support for building local dir/src tarball in contianer * Removed wrongly added ASSEMBLE_EXPLODED_IMAGE=true to container builds * used -n instead of '! -z ' * Highlighted sudo for dcoekr * Added missing bracket * Fixed typo * Mentioned issue with --custom-cacerts on podman with #3862 * renamed USE_DOCKER->CONTAINER_COMMAND DOCKER->CONTAINER_AS_ROOT BUILD_CONFIG[USE_DOCKER]-> BUILD_CONFIG[CONTAINER_COMMAND] BUILD_CONFIG[DOCKER] -> BUILD_CONFIG[CONTAINER_AS_ROOT] BUILD_CONFIG[USE_DOCKER] values: false, podman, docker BUILD_CONFIG[DOCKER] values: sudo,empty string Other docker based variables which are globally container bound remained intact (CLEAN_DOCKER_BUILD, DEBUG_DOCKER, DOCKER_FILE_PATH...) * Improved warning about --custom-cacerts --------- Co-authored-by: Stewart X Addison <[email protected]>
1 parent d937e1f commit 310734f

11 files changed

+134
-47
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ as we can generate valid dockerfile for it):
4545

4646
```bash
4747
./makejdk-any-platform.sh --docker --clean-docker-build jdk8u
48-
./makejdk-any-platform.sh --docker --clean-docker-build --build-variant openj9 jdk11u
48+
./makejdk-any-platform.sh --podman --clean-docker-build --build-variant openj9 jdk11u
4949
```
5050

5151
We test these dockerfiles on a regular basis in the
@@ -144,8 +144,8 @@ specify the location for the built binary, e.g. /path/.
144144
This is typically used in conjunction with -T to create a custom path
145145
/ file name for the resulting binary.
146146

147-
-D, --docker
148-
build OpenJDK in a docker container.
147+
-D, --docker, --podman
148+
build OpenJDK in a docker/podman container. -D will autodetect, using podman if found, docker otherwise.
149149

150150
--cross-compile
151151
use this if you are cross compiling - it will skip the java -version checks at the end
@@ -253,7 +253,7 @@ specify the JVM variant (server or client), defaults to server.
253253

254254
Example usage:
255255

256-
./makejdk-any-platform --docker jdk8u
256+
./makejdk-any-platform -D jdk8u
257257
./makejdk-any-platform -T MyOpenJDK10.tar.gz jdk10
258258

259259
```

configureBuild.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ doAnyBuildVariantOverrides() {
8686
# Set the working directory for this build
8787
setWorkingDirectory() {
8888
if [ -z "${BUILD_CONFIG[WORKSPACE_DIR]}" ]; then
89-
if [[ "${BUILD_CONFIG[USE_DOCKER]}" == "true" ]]; then
89+
if [[ "${BUILD_CONFIG[CONTAINER_COMMAND]}" == "true" ]]; then
9090
BUILD_CONFIG[WORKSPACE_DIR]="/openjdk/"
9191
else
9292
BUILD_CONFIG[WORKSPACE_DIR]="$PWD/workspace"
@@ -410,5 +410,7 @@ configure_build() {
410410
setWorkingDirectory
411411
configureMacFreeFont
412412
setMakeArgs
413-
setBootJdk
413+
if [ "${BUILD_CONFIG[CONTAINER_COMMAND]}" == false ] ; then
414+
setBootJdk
415+
fi
414416
}

cyclonedx-lib/build.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@
354354
<arg value="--name"/>
355355
<arg value="openjdk_built_config"/>
356356
<arg value="--value"/>
357-
<arg value="# ============================\n# OPENJDK BUILD CONFIGURATION:\n# ============================\nBUILD_CONFIG[ADOPT_PATCHES]=\true\\nBUILD_CONFIG[ASSEMBLE_EXPLODED_IMAGE]=\false\\nBUILD_CONFIG[BRANCH]=\dev\\nBUILD_CONFIG[BUILD_FULL_NAME]=\linux-x86_64--server-release\\nBUILD_CONFIG[BUILD_VARIANT]=\hotspot\\nBUILD_CONFIG[CLEAN_DOCKER_BUILD]=\false\/>\nBUILD_CONFIG[CLEAN_GIT_REPO]=\true\nBUILD_CONFIG[CLEAN_LIBS]=\false\\nBUILD_CONFIG[CONTAINER_NAME]=\openjdk_container\\nBUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_FOR_JDK_FLAG]=\false\\nBUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_FOR_JRE_FLAG]=\false\\nBUILD_CONFIG[CREATE_DEBUG_IMAGE]=\true\\nBUILD_CONFIG[CREATE_SOURCE_ARCHIVE]=\false\\nBUILD_CONFIG[CROSSCOMPILE]=\false\\nBUILD_CONFIG[CUSTOM_CACERTS]=\true\\nBUILD_CONFIG[DEBUG_DOCKER]=\false\\nBUILD_CONFIG[DEBUG_IMAGE_PATH]=\debug-image\\nBUILD_CONFIG[DISABLE_ADOPT_BRANCH_SAFETY]=\false\\nBUILD_CONFIG[DOCKER]=\docker\\nBUILD_CONFIG[DOCKER_FILE_PATH]=\\nBUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]=\openjdk-source-volume-jdk17-hotspot\\nBUILD_CONFIG[FREETYPE]=\false\\nBUILD_CONFIG[FREETYPE_DIRECTORY]=\\nBUILD_CONFIG[FREETYPE_FONT_BUILD_TYPE_PARAM]=\\nBUILD_CONFIG[FREETYPE_FONT_VERSION]=\2.9.1\\nBUILD_CONFIG[GRADLE_USER_HOME_DIR]=\\nBUILD_CONFIG[JDK_BOOT_DIR]=\/usr/lib/jvm/jdk-16\ \nBUILD_CONFIG[JDK_PATH]=\jdk\\nBUILD_CONFIG[JRE_PATH]=\jre\\nBUILD_CONFIG[JVM_VARIANT]=\server\\nBUILD_CONFIG[KEEP_CONTAINER]=\false\\nBUILD_CONFIG[MACOSX_CODESIGN_IDENTITY]=\\nBUILD_CONFIG[MAKE_ARGS_FOR_ANY_PLATFORM]=\product-images legacy-jre-image\\nBUILD_CONFIG[MAKE_COMMAND_NAME]=\make\\nBUILD_CONFIG[MAKE_EXPLODED]=\false\\nBUILD_CONFIG[NUM_PROCESSORS]=\1\\nBUILD_CONFIG[OPENJDK_BUILD_NUMBER]=\\nBUILD_CONFIG[OPENJDK_BUILD_REPO_BRANCH]=\master\\nBUILD_CONFIG[OPENJDK_BUILD_REPO_URI]=\https://github.com/adoptium/temurin-build.git\\nBUILD_CONFIG[OPENJDK_CORE_VERSION]=\jdk17\\nBUILD_CONFIG[OPENJDK_FEATURE_NUMBER]=\17\\nBUILD_CONFIG[OPENJDK_FOREST_NAME]=\jdk17\\nBUILD_CONFIG[OPENJDK_SOURCE_DIR]=\src\nBUILD_CONFIG[OPENJDK_UPDATE_VERSION]=\\nBUILD_CONFIG[OS_ARCHITECTURE]=\x86_64\\nBUILD_CONFIG[OS_FULL_VERSION]=\Linux 5.8.0-34-generic : CentOS release 6.10 (Final)\\nBUILD_CONFIG[OS_KERNEL_NAME]=\linux\\nBUILD_CONFIG[PATCHES]=\\nBUILD_CONFIG[RELEASE]=\true\\nBUILD_CONFIG[REPOSITORY]=\https://github.com/adoptium/jdk17\\nBUILD_CONFIG[REUSE_CONTAINER]=\true\\nBUILD_CONFIG[SHALLOW_CLONE_OPTION]=\\nBUILD_CONFIG[SIGN]=\false\\nBUILD_CONFIG[TAG]=\jdk-17+35_adopt\\nBUILD_CONFIG[TARGET_DIR]=\target/\\nBUILD_CONFIG[TARGET_FILE_NAME]=\OpenJDK17-jdk_x64_linux_hotspot_17_35.tar.gz\\nBUILD_CONFIG[TEST_IMAGE_PATH]=\test\\nBUILD_CONFIG[TMP_CONTAINER_NAME]=\openjdk-copy-src\\nBUILD_CONFIG[TMP_SPACE_BUILD]=\false\\nBUILD_CONFIG[USER_SUPPLIED_CONFIGURE_ARGS]=\ --disable-warnings-as-errors --enable-ccache --enable-dtrace\\nBUILD_CONFIG[USER_SUPPLIED_MAKE_ARGS]=\\nBUILD_CONFIG[USE_DOCKER]=\false\\nBUILD_CONFIG[USE_JEP319_CERTS]=\true\\nBUILD_CONFIG[USE_SSH]=\false\\nBUILD_CONFIG[VENDOR]=\Eclipse Adoptium\\nBUILD_CONFIG[WORKING_DIR]=\./build/\\nBUILD_CONFIG[WORKSPACE_DIR]=\/home/jenkins/workspace/build-scripts/jobs/jdk17/jdk17-linux-x64-hotspot/workspace\"/>
357+
<arg value="# ============================\n# OPENJDK BUILD CONFIGURATION:\n# ============================\nBUILD_CONFIG[ADOPT_PATCHES]=\true\\nBUILD_CONFIG[ASSEMBLE_EXPLODED_IMAGE]=\false\\nBUILD_CONFIG[BRANCH]=\dev\\nBUILD_CONFIG[BUILD_FULL_NAME]=\linux-x86_64--server-release\\nBUILD_CONFIG[BUILD_VARIANT]=\hotspot\\nBUILD_CONFIG[CLEAN_DOCKER_BUILD]=\false\/>\nBUILD_CONFIG[CLEAN_GIT_REPO]=\true\nBUILD_CONFIG[CLEAN_LIBS]=\false\\nBUILD_CONFIG[CONTAINER_NAME]=\openjdk_container\\nBUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_FOR_JDK_FLAG]=\false\\nBUILD_CONFIG[COPY_MACOSX_FREE_FONT_LIB_FOR_JRE_FLAG]=\false\\nBUILD_CONFIG[CREATE_DEBUG_IMAGE]=\true\\nBUILD_CONFIG[CREATE_SOURCE_ARCHIVE]=\false\\nBUILD_CONFIG[CROSSCOMPILE]=\false\\nBUILD_CONFIG[CUSTOM_CACERTS]=\true\\nBUILD_CONFIG[DEBUG_DOCKER]=\false\\nBUILD_CONFIG[DEBUG_IMAGE_PATH]=\debug-image\\nBUILD_CONFIG[DISABLE_ADOPT_BRANCH_SAFETY]=\false\\nBUILD_CONFIG[CONTAINER_AS_ROOT]=\docker\\nBUILD_CONFIG[DOCKER_FILE_PATH]=\\nBUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]=\openjdk-source-volume-jdk17-hotspot\\nBUILD_CONFIG[FREETYPE]=\false\\nBUILD_CONFIG[FREETYPE_DIRECTORY]=\\nBUILD_CONFIG[FREETYPE_FONT_BUILD_TYPE_PARAM]=\\nBUILD_CONFIG[FREETYPE_FONT_VERSION]=\2.9.1\\nBUILD_CONFIG[GRADLE_USER_HOME_DIR]=\\nBUILD_CONFIG[JDK_BOOT_DIR]=\/usr/lib/jvm/jdk-16\ \nBUILD_CONFIG[JDK_PATH]=\jdk\\nBUILD_CONFIG[JRE_PATH]=\jre\\nBUILD_CONFIG[JVM_VARIANT]=\server\\nBUILD_CONFIG[KEEP_CONTAINER]=\false\\nBUILD_CONFIG[MACOSX_CODESIGN_IDENTITY]=\\nBUILD_CONFIG[MAKE_ARGS_FOR_ANY_PLATFORM]=\product-images legacy-jre-image\\nBUILD_CONFIG[MAKE_COMMAND_NAME]=\make\\nBUILD_CONFIG[MAKE_EXPLODED]=\false\\nBUILD_CONFIG[NUM_PROCESSORS]=\1\\nBUILD_CONFIG[OPENJDK_BUILD_NUMBER]=\\nBUILD_CONFIG[OPENJDK_BUILD_REPO_BRANCH]=\master\\nBUILD_CONFIG[OPENJDK_BUILD_REPO_URI]=\https://github.com/adoptium/temurin-build.git\\nBUILD_CONFIG[OPENJDK_CORE_VERSION]=\jdk17\\nBUILD_CONFIG[OPENJDK_FEATURE_NUMBER]=\17\\nBUILD_CONFIG[OPENJDK_FOREST_NAME]=\jdk17\\nBUILD_CONFIG[OPENJDK_SOURCE_DIR]=\src\nBUILD_CONFIG[OPENJDK_UPDATE_VERSION]=\\nBUILD_CONFIG[OS_ARCHITECTURE]=\x86_64\\nBUILD_CONFIG[OS_FULL_VERSION]=\Linux 5.8.0-34-generic : CentOS release 6.10 (Final)\\nBUILD_CONFIG[OS_KERNEL_NAME]=\linux\\nBUILD_CONFIG[PATCHES]=\\nBUILD_CONFIG[RELEASE]=\true\\nBUILD_CONFIG[REPOSITORY]=\https://github.com/adoptium/jdk17\\nBUILD_CONFIG[REUSE_CONTAINER]=\true\\nBUILD_CONFIG[SHALLOW_CLONE_OPTION]=\\nBUILD_CONFIG[SIGN]=\false\\nBUILD_CONFIG[TAG]=\jdk-17+35_adopt\\nBUILD_CONFIG[TARGET_DIR]=\target/\\nBUILD_CONFIG[TARGET_FILE_NAME]=\OpenJDK17-jdk_x64_linux_hotspot_17_35.tar.gz\\nBUILD_CONFIG[TEST_IMAGE_PATH]=\test\\nBUILD_CONFIG[TMP_CONTAINER_NAME]=\openjdk-copy-src\\nBUILD_CONFIG[TMP_SPACE_BUILD]=\false\\nBUILD_CONFIG[USER_SUPPLIED_CONFIGURE_ARGS]=\ --disable-warnings-as-errors --enable-ccache --enable-dtrace\\nBUILD_CONFIG[USER_SUPPLIED_MAKE_ARGS]=\\nBUILD_CONFIG[CONTAINER_COMMAND]=\false\\nBUILD_CONFIG[USE_JEP319_CERTS]=\true\\nBUILD_CONFIG[USE_SSH]=\false\\nBUILD_CONFIG[VENDOR]=\Eclipse Adoptium\\nBUILD_CONFIG[WORKING_DIR]=\./build/\\nBUILD_CONFIG[WORKSPACE_DIR]=\/home/jenkins/workspace/build-scripts/jobs/jdk17/jdk17-linux-x64-hotspot/workspace\"/>
358358
<arg value="--jsonFile"/>
359359
<arg value="${testSBOMFile}"/>
360360
</java>

docker-build.sh

Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
#
2121
################################################################################
2222

23+
# the ${BUILD_CONFIG[CONTAINER_AS_ROOT]} can not be quoted. It is sudo (or simialrly) or nothing. "" is not an option.
24+
# simialrly the ${cpuset} and ${userns}
25+
# shellcheck disable=SC2206
26+
# shellcheck disable=SC2046
27+
# shellcheck disable=SC2086
28+
2329
set -eu
2430

2531
# Create a data volume called ${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]},
@@ -30,21 +36,24 @@ set -eu
3036
createPersistentDockerDataVolume()
3137
{
3238
set +e
33-
${BUILD_CONFIG[DOCKER]} volume inspect "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}" > /dev/null 2>&1
39+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" volume inspect "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}" > /dev/null 2>&1
3440
local data_volume_exists=$?
3541
set -e
3642

3743
if [[ "${BUILD_CONFIG[CLEAN_DOCKER_BUILD]}" == "true" || "$data_volume_exists" != "0" ]]; then
3844

3945
# shellcheck disable=SC2154
4046
echo "Removing old volumes and containers"
41-
# shellcheck disable=SC2046
42-
${BUILD_CONFIG[DOCKER]} rm -f $(${BUILD_CONFIG[DOCKER]} ps -a --no-trunc -q -f volume="${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}") || true
43-
${BUILD_CONFIG[DOCKER]} volume rm -f "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}" || true
47+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" rm -f $(${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" ps -a --no-trunc -q -f volume="${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}") || true
48+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" volume rm -f "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}" || true
4449

4550
# shellcheck disable=SC2154
4651
echo "Creating tmp container"
47-
${BUILD_CONFIG[DOCKER]} volume create --name "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}"
52+
if echo "${BUILD_CONFIG[CONTAINER_COMMAND]}" | grep docker ; then
53+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" volume create --name "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}"
54+
else
55+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" volume create "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}"
56+
fi
4857
fi
4958
}
5059

@@ -64,12 +73,25 @@ buildDockerContainer()
6473

6574
writeConfigToFile
6675

67-
${BUILD_CONFIG[DOCKER]} build -t "${BUILD_CONFIG[CONTAINER_NAME]}" -f "${dockerFile}" . --build-arg "OPENJDK_CORE_VERSION=${BUILD_CONFIG[OPENJDK_CORE_VERSION]}" --build-arg "HostUID=${UID}"
76+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" build -t "${BUILD_CONFIG[CONTAINER_NAME]}" -f "${dockerFile}" . --build-arg "OPENJDK_CORE_VERSION=${BUILD_CONFIG[OPENJDK_CORE_VERSION]}" --build-arg "HostUID=${UID}"
6877
}
6978

7079
# Execute the (Adoptium) OpenJDK build inside the Docker Container
7180
buildOpenJDKViaDocker()
7281
{
82+
local hostDir
83+
hostDir="$(pwd)"
84+
local pipelinesdir="${hostDir}"/workspace/pipelines
85+
local workspacedir="${hostDir}"/workspace # we must ensure build user have correct permissions here
86+
local targetdir="${hostDir}"/workspace/target
87+
local targetbuilddir="${hostDir}"/workspace/build
88+
local configdir="${hostDir}"/workspace/config
89+
local localsourcesdir=
90+
91+
if [ "${BUILD_CONFIG[OPENJDK_LOCAL_SOURCE_ARCHIVE]}" = "true" ] ; then
92+
# OPENJDK_LOCAL_SOURCE_ARCHIVE_ABSPATH can be file, you can nto mount file
93+
localsourcesdir=$(dirname "${BUILD_CONFIG[OPENJDK_LOCAL_SOURCE_ARCHIVE_ABSPATH]}")
94+
fi
7395

7496
# TODO This could be extracted overridden by the user if we support more
7597
# architectures going forwards
@@ -80,7 +102,8 @@ buildOpenJDKViaDocker()
80102
if [ "${BUILD_CONFIG[BUILD_VARIANT]}" == "openj9" ]; then
81103
build_variant_flag="--openj9"
82104
fi
83-
docker/dockerfile-generator.sh --version "${BUILD_CONFIG[OPENJDK_FEATURE_NUMBER]}" --path "${BUILD_CONFIG[DOCKER_FILE_PATH]}" "$build_variant_flag"
105+
docker/dockerfile-generator.sh --version "${BUILD_CONFIG[OPENJDK_FEATURE_NUMBER]}" --path "${BUILD_CONFIG[DOCKER_FILE_PATH]}" "$build_variant_flag" \
106+
--dirs "${workspacedir} ${targetdir} ${targetbuilddir} ${configdir} ${localsourcesdir}" --command "${BUILD_CONFIG[CONTAINER_AS_ROOT]} ${BUILD_CONFIG[CONTAINER_COMMAND]}"
84107

85108
# shellcheck disable=SC1090,SC1091
86109
source "${BUILD_CONFIG[DOCKER_FILE_PATH]}/dockerConfiguration.sh"
@@ -129,7 +152,7 @@ buildOpenJDKViaDocker()
129152
BUILD_CONFIG[DEBUG_IMAGE_PATH]=$openjdk_debug_image_path
130153
BUILD_CONFIG[STATIC_LIBS_IMAGE_PATH]=$static_libs_dir
131154

132-
if [ -z "$(command -v docker)" ]; then
155+
if [ -z "$(command -v "${BUILD_CONFIG[CONTAINER_COMMAND]}")" ]; then
133156
# shellcheck disable=SC2154
134157
echo "Error, please install docker and ensure that it is in your path and running!"
135158
exit
@@ -144,15 +167,15 @@ buildOpenJDKViaDocker()
144167
if [[ "${BUILD_CONFIG[REUSE_CONTAINER]}" == "true" ]] ; then
145168
# shellcheck disable=SC2086
146169
# If we can't find the previous Docker container then build a new one
147-
if [ "$(${BUILD_CONFIG[DOCKER]} ps -a | grep -c \"${BUILD_CONFIG[CONTAINER_NAME]}\")" == 0 ]; then
170+
if [ "$(${BUILD_CONFIG[CONTAINER_AS_ROOT]} ${BUILD_CONFIG[CONTAINER_COMMAND]} ps -a | grep -c \"${BUILD_CONFIG[CONTAINER_NAME]}\")" == 0 ]; then
148171
echo "No docker container for reuse was found, so creating '${BUILD_CONFIG[CONTAINER_NAME]}' "
149172
buildDockerContainer
150173
fi
151174
else
152175
# shellcheck disable=SC2154
153176
echo "Since you specified --ignore-container, we are removing the existing container (if it exists) and building you a new one{$good}"
154177
# Find the previous Docker container and remove it (if it exists)
155-
${BUILD_CONFIG[DOCKER]} ps -a | awk '{ print $1,$2 }' | grep "${BUILD_CONFIG[CONTAINER_NAME]}" | awk '{print $1 }' | xargs -I {} "${BUILD_CONFIG[DOCKER]}" rm -f {}
178+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" ps -a | awk '{ print $1,$2 }' | grep "${BUILD_CONFIG[CONTAINER_NAME]}" | awk '{print $1 }' | xargs -I {} ${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" rm -f {}
156179

157180
# Build a new container
158181
buildDockerContainer
@@ -161,9 +184,6 @@ buildOpenJDKViaDocker()
161184
# Show the user all of the config before we build
162185
displayParams
163186

164-
local hostDir
165-
hostDir="$(pwd)"
166-
167187
echo "Target binary directory on host machine: ${hostDir}/target"
168188
mkdir -p "${hostDir}/workspace/target"
169189

@@ -183,11 +203,36 @@ buildOpenJDKViaDocker()
183203
fi
184204

185205
# Command without gitSshAccess or dockerMode arrays
206+
if [ -e "${hostDir}"/pipelines ] ; then
207+
local pipelinesdir="${hostDir}"/pipelines
208+
else
209+
mkdir -p "${pipelinesdir}"
210+
fi
211+
if echo "${BUILD_CONFIG[CONTAINER_COMMAND]}" | grep docker ; then
212+
local cpuset="--cpuset-cpus=${cpuSet}"
213+
else
214+
local cpuset=""
215+
fi
216+
if echo "${BUILD_CONFIG[CONTAINER_COMMAND]}" | grep podman ; then
217+
local userns="--userns=keep-id"
218+
else
219+
local userns=""
220+
fi
221+
local mountflag=Z #rw? maybe this should be bound to root/rootles content of BUILD_CONFIG[CONTAINER_AS_ROOT] rather then just podman/docker in USE_DOCKER?
222+
mkdir -p "${hostDir}"/workspace/build # shouldnt be already there?
223+
local localsourcesdirmount=
224+
if [ -n "${localsourcesdir}" ] ; then
225+
localsourcesdirmount="-v ${localsourcesdir}:${localsourcesdir}:${mountflag}" #read only? Is copied anwya
226+
fi
227+
echo "If you get permissions denied on ${targetdir} or ${pipelinesdir} try to turn off selinux"
186228
local commandString=(
187-
"--cpuset-cpus=${cpuSet}"
229+
${cpuset}
230+
${userns}
231+
${localsourcesdirmount}
188232
-v "${BUILD_CONFIG[DOCKER_SOURCE_VOLUME_NAME]}:/openjdk/build"
189-
-v "${hostDir}"/workspace/target:/"${BUILD_CONFIG[WORKSPACE_DIR]}"/"${BUILD_CONFIG[TARGET_DIR]}":Z
190-
-v "${hostDir}"/pipelines:/openjdk/pipelines:Z
233+
-v "${targetdir}":/"${BUILD_CONFIG[WORKSPACE_DIR]}"/"${BUILD_CONFIG[TARGET_DIR]}":"${mountflag}"
234+
-v "${pipelinesdir}":/openjdk/pipelines:"${mountflag}"
235+
-v "${configdir}":/"${BUILD_CONFIG[WORKSPACE_DIR]}"/"config":"${mountflag}"
191236
-e "DEBUG_DOCKER_FLAG=${BUILD_CONFIG[DEBUG_DOCKER]}"
192237
-e "BUILD_VARIANT=${BUILD_CONFIG[BUILD_VARIANT]}"
193238
"${dockerEntrypoint[@]:+${dockerEntrypoint[@]}}")
@@ -204,14 +249,14 @@ buildOpenJDKViaDocker()
204249
fi
205250

206251
# Run the command string in Docker
207-
${BUILD_CONFIG[DOCKER]} run --name "${BUILD_CONFIG[OPENJDK_CORE_VERSION]}-${BUILD_CONFIG[BUILD_VARIANT]}" "${commandString[@]}"
252+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" run --name "${BUILD_CONFIG[OPENJDK_CORE_VERSION]}-${BUILD_CONFIG[BUILD_VARIANT]}" "${commandString[@]}"
208253

209254
# Tell user where the resulting binary can be found on the host system
210-
echo "The finished image can be found in ${hostDir}/workspace/target on the host system"
255+
echo "The finished image can be found in ${targetdir} on the host system"
211256

212257
# If we didn't specify to keep the container then remove it
213258
if [[ "${BUILD_CONFIG[KEEP_CONTAINER]}" == "false" ]] ; then
214259
echo "Removing container ${BUILD_CONFIG[OPENJDK_CORE_VERSION]}-${BUILD_CONFIG[BUILD_VARIANT]}"
215-
${BUILD_CONFIG[DOCKER]} ps -a | awk '{ print $1,$(NF) }' | grep "${BUILD_CONFIG[OPENJDK_CORE_VERSION]}-${BUILD_CONFIG[BUILD_VARIANT]}" | awk '{print $1 }' | xargs -I {} "${BUILD_CONFIG[DOCKER]}" rm {}
260+
${BUILD_CONFIG[CONTAINER_AS_ROOT]} "${BUILD_CONFIG[CONTAINER_COMMAND]}" ps -a | awk '{ print $1,$(NF) }' | grep "${BUILD_CONFIG[OPENJDK_CORE_VERSION]}-${BUILD_CONFIG[BUILD_VARIANT]}" | awk '{print $1 }' | xargs -I {} ${BUILD_CONFIG[CONTAINER_AS_ROOT]} ${BUILD_CONFIG[CONTAINER_COMMAND]} rm {}
216261
fi
217262
}

0 commit comments

Comments
 (0)