@@ -208,20 +208,36 @@ function prepare_source_code() {
208208 # links must be relative
209209 if [[ " ${AGENT_POLICY} " ]]; then
210210 echo " Custom agent policy is being set through the AGENT_POLICY value"
211- echo ${AGENT_POLICY} | base64 -d > " ${podvm_dir} " /files/etc/kata-opa/custom.rego
212- if [[ $? == 0 ]] && grep -q " agent_policy" " ${podvm_dir} " /files/etc/kata-opa/custom.rego; then # checks policy validity
213- ln -sf custom.rego " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego
211+ echo " ${AGENT_POLICY} " | base64 -d > " ${podvm_dir} " /files/etc/kata-opa/custom.rego
212+ return_code=$?
213+ if [[ " $return_code " == 0 ]] && grep -q " agent_policy" " ${podvm_dir} " /files/etc/kata-opa/custom.rego; then # checks policy validity
214+ ln -sf custom.rego " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego
214215 else
215216 error_exit " Invalid AGENT_POLICY value set, expected base64 encoded valid agent policy, got: \" ${AGENT_POLICY} \" "
216- fi
217+ fi
217218 elif [[ " $CONFIDENTIAL_COMPUTE_ENABLED " == " yes" ]]; then
218219 echo " Setting custom agent policy to CoCo's recommended policy"
219220 sed ' s/default ReadStreamRequest := true/default ReadStreamRequest := false/;
220221 s/default ExecProcessRequest := true/default ExecProcessRequest := false/' \
221- " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego > " ${podvm_dir} " /files/etc/kata-opa/coco-default-policy.rego
222+ " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego > " ${podvm_dir} " /files/etc/kata-opa/coco-default-policy.rego
222223 ln -sf coco-default-policy.rego " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego
223224 fi
224225 echo " ~~~ Current Agent Policy ~~~" && cat " ${podvm_dir} " /files/etc/kata-opa/default-policy.rego
226+
227+ # Fix disk mounts for CoCo
228+ if [[ " $CONFIDENTIAL_COMPUTE_ENABLED " == " yes" ]]; then
229+ create_overlay_mount_unit
230+ fi
231+
232+ # Validate and copy HKD for IBM Z Secure Enablement
233+ if [[ " $SE_BOOT " == " true" ]]; then
234+ if [[ -z " $HOST_KEY_CERTS " ]]; then
235+ error_exit " Error: HKD is not present."
236+ else
237+ echo " $HOST_KEY_CERTS " >> " ${podvm_dir} /files/HKD.crt"
238+ fi
239+ fi
240+
225241}
226242
227243# Download and extract pause container image
@@ -267,6 +283,36 @@ function download_and_extract_pause_image() {
267283
268284}
269285
286+ # Function to create overlay mount unit in the podvm files
287+ # this ensures rw (overlay) layer for the container images are in memory (encrypted)
288+ function create_overlay_mount_unit() {
289+ # The actual mount point is /run/kata-containers/image/overlay
290+ local unit_name=" run-kata\\ x2dcontainers-image-overlay.mount"
291+ local unit_path=" ${podvm_dir} /files/etc/systemd/system/${unit_name} "
292+
293+ cat << EOF >"${unit_path} "
294+ [Unit]
295+ Description=Mount unit for /run/kata-containers/image/overlay
296+ Before=kata-agent.service
297+
298+ [Mount]
299+ What=tmpfs
300+ Where=/run/kata-containers/image/overlay
301+ Type=tmpfs
302+
303+ [Install]
304+ WantedBy=multi-user.target
305+ EOF
306+
307+ echo " Mount unit created at ${unit_name} "
308+
309+ # Enable the mount unit by creating a symlink
310+ # This syntax works to create the symlink to the unit file in ${podvm_dir}/files/etc/systemd/system
311+ ln -sf ../" ${unit_name} " " ${podvm_dir} /files/etc/systemd/system/multi-user.target.wants/${unit_name} " ||
312+ error_exit " Failed to enable the overlay mount unit"
313+
314+ }
315+
270316# Global variables
271317
272318# Set global variable for the source code directory
0 commit comments