1515# Get all stages
1616CONTENDER_STAGES=$( cat $SINGULARITY_BUILDDEF | grep ^[[:blank:]]* Stage:)
1717
18- stages= " build "
18+ # Case 1: We have stages
1919for stage in $CONTENDER_STAGES ; do
2020 if [ " $stage " != " Stage" ]; then
2121 stages=" $stage $stages "
2222 fi
2323done
2424
25- echo " Found stages $stages "
26-
2725SINGULARITY_confdir=" /usr/local/etc/singularity"
2826SINGULARITY_bindir=" /usr/local/bin"
2927SINGULARITY_libexecdir=" /usr/local/libexec/singularity"
@@ -63,18 +61,9 @@ cat > "$SINGULARITY_WORKDIR/root/.rpmmacros" << RPMMAC
6361%_dbpath %{_var}/lib/rpm
6462RPMMAC
6563
66- # Staged build image is the main / final build
64+ # Location for the repository
6765REPO_DIR=" /root/repo"
68- STAGED_BUILD_IMAGE=" /root/build"
69-
7066mkdir -p ${SINGULARITY_WORKDIR}${REPO_DIR}
71- mkdir -p ${SINGULARITY_WORKDIR}${STAGED_BUILD_IMAGE}
72-
73- # Make directory for each stage (build included)
74- # for stage in $stages; do
75- # echo "Creating ${SINGULARITY_WORKDIR}/root/$stage"
76- # mkdir -p "${SINGULARITY_WORKDIR}/root/$stage"
77- # done
7867
7968# Move the repo to be the REPO_DIR
8069cp -R $BUILDDEF_DIR /* ${SINGULARITY_WORKDIR} $REPO_DIR
@@ -88,10 +77,7 @@ HOSTS_FILE="$SINGULARITY_WORKDIR/hosts"
8877cp /etc/resolv.conf $RESOLV_CONF
8978cp /etc/hosts $HOSTS_FILE
9079
91- cat > " $FSTAB_FILE " << FSTAB
92- none $STAGED_BUILD_IMAGE bind dev 0 0
93- FSTAB
94-
80+ # Create base temporary config file
9581cat > " $TMP_CONF_FILE " << CONF
9682config passwd = yes
9783config group = no
@@ -109,7 +95,6 @@ user bind control = no
10995bind path = $SINGULARITY_WORKDIR /root:/root
11096bind path = $SINGULARITY_WORKDIR /tmp:/tmp
11197bind path = $SINGULARITY_WORKDIR /var_tmp:/var/tmp
112- bind path = /tmp/sbuild/fs:$STAGED_BUILD_IMAGE
11398bind path = $FSTAB_FILE :/etc/fstab
11499bind path = $RESOLV_CONF :/etc/resolv.conf
115100bind path = $HOSTS_FILE :/etc/hosts
@@ -118,10 +103,7 @@ allow user capabilities = no
118103allow setuid = yes
119104CONF
120105
121- # We only use the builder once, make default config
122- cp " $TMP_CONF_FILE " " ${SINGULARITY_confdir} /singularity.conf"
123-
124- # here build pre-stage
106+ # Shared starting script (will have build command appended)
125107cat > " $BUILD_SCRIPT " << SCRIPT
126108#!/bin/sh
127109mount -r --no-mtab -t proc proc /proc
@@ -135,10 +117,53 @@ if [ \$? != 0 ]; then
135117 exit 1
136118fi
137119cd $REPO_DIR
138- singularity build $STAGED_BUILD_IMAGE /container.sif $BUILDDEF
139- exit \$ ?
140120SCRIPT
141121
122+
123+ # Proceed based on stages (or not)
124+ if [ " $stages " == " " ]; then
125+ echo " NO STAGES"
126+
127+ # Staged build image is the main / final build
128+ STAGED_BUILD_IMAGE=" /root/build"
129+ mkdir -p ${SINGULARITY_WORKDIR}${STAGED_BUILD_IMAGE}
130+
131+ cat > " $FSTAB_FILE " << FSTAB
132+ none $STAGED_BUILD_IMAGE bind dev 0 0
133+ FSTAB
134+
135+ # Update config file with staged build image
136+ echo " bind path = /tmp/sbuild/fs:$STAGED_BUILD_IMAGE " >> " $TMP_CONF_FILE "
137+
138+ # We only use the builder once, make default config
139+ cp " $TMP_CONF_FILE " " ${SINGULARITY_confdir} /singularity.conf"
140+
141+ # add final lines of build script
142+ echo " singularity build $STAGED_BUILD_IMAGE /container.sif $BUILDDEF " >> " ${BUILD_SCRIPT} "
143+ echo " exit \$ ?" >> ${BUILD_SCRIPT}
144+
145+ else
146+ echo " Found stages $stages "
147+
148+ # Make directory for each stage (/root/<stage>
149+ for stage in $stages ; do
150+ STAGED_BUILD_IMAGE=" /root/$stage "
151+ echo " Creating ${SINGULARITY_WORKDIR} $STAGED_BUILD_IMAGE "
152+ mkdir -p " ${SINGULARITY_WORKDIR} $STAGED_BUILD_IMAGE "
153+ echo " none ${STAGED_BUILD_IMAGE} bind dev 0 0" >> " $FSTAB_FILE "
154+ echo " bind path = /tmp/sbuild$stage /fs:$STAGED_BUILD_IMAGE " >> " $TMP_CONF_FILE "
155+ echo " bind path = /tmp/sbuild$stage /fs:$STAGED_BUILD_IMAGE " >> " $TMP_CONF_FILE "
156+ done
157+
158+ # The final stage is where we put the container
159+ echo " Final staged build image is $STAGED_BUILD_IMAGE "
160+
161+ # We only use the builder once, make default config
162+ cp " $TMP_CONF_FILE " " ${SINGULARITY_confdir} /singularity.conf"
163+
164+ fi
165+
166+ # Shared final tweaks
142167chmod +x $BUILD_SCRIPT
143168
144169unset SINGULARITY_IMAGE
@@ -154,8 +179,8 @@ if [ $? != 0 ]; then
154179fi
155180
156181if [ ! -f " ${SINGULARITY_WORKDIR}${STAGED_BUILD_IMAGE} /container.sif" ]; then
157- echo " Container was not built." ;
158- exit 1;
182+ echo " Container was not built." ;
183+ exit 1;
159184fi
160185
161186mv " ${SINGULARITY_WORKDIR}${STAGED_BUILD_IMAGE} /container.sif" " $BUILDDEF_DIR /${SINGULARITY_FINAL} "
0 commit comments