- while read source dest options # < ${custom_mounts}
- do
- local opt_linkfiles=""
- local opt_union=""
- for opt in $(echo ${options} | tr ',' ' ');
- do
- case "${opt}" in
- linkfiles)
- opt_linkfiles="yes"
- ;;
- union)
- opt_union="yes"
- ;;
- esac
- done
-
- if mountpoint -q "${dest}";
- then
- log_warning_msg "Skipping custom mount ${source} on ${dest}: destination is already a mount point"
- continue
- fi
-
- # FIXME: we don't handle already existing non-directory files in the paths of both $source and $dest.
-
- if [ ! -d "${dest}" ]
- then
- # if ${dest} is in /home/$user, try fixing proper ownership
- # FIXME: this should really be handled by live-config since we don't know for sure which uid a certain user has until then
- if echo ${dest} | grep -qe "^${rootmnt}/*home/\+[^/]\+"
- then
- path="/"
- for dir in $(echo ${dest} | sed -e 's|/\+| |g')
- do
- path=${path}/${dir}
- if [ ! -e ${path} ]
- then
- mkdir -p ${path}
- # assume that the intended user is the first, which is usually the case
- chown 1000:1000 ${path}
- fi
- done
- else
- mkdir -p ${dest}
- fi
- fi
-
- # if ${source} doesn't exist on our persistent media we
- # bootstrap it with $dest from the live filesystem.
- # this both makes sense and is critical if we're
- # dealing with /etc or other system dir.
- if [ ! -d "${source}" ]
- then
- if [ -n "${PERSISTENT_READONLY}" ] || [ -n "${opt_linkfiles}" ]
- then
- continue
- elif [ -n "${opt_union}" ]
- then
- # union's don't need to be bootstrapped
- mkdir "${source}"
- else
- # ensure that $dest is not copied *into* $source
- mkdir -p "$(dirname ${source})"
- cp -a "${dest}" "${source}"
- fi
- fi
-
- rofs_dest_backing=""
- for d in ${live_rofs_list}
- do
- rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
- if [ -d "${rofs_dest_backing}" ]
- then
- break
- else
- rofs_dest_backing=""
- fi
- done
-
- if [ -z "${PERSISTENT_READONLY}" ]
- then
- if [ -n "${opt_linkfiles}" ]
- then
- links_source="${source}"
- links_dest="${dest}"
- elif [ -n "${opt_union}" ]
- then
- do_union ${dest} ${source} ${rofs_dest_backing}
- else
- mount --bind "${source}" "${dest}"
- fi
- else
- if [ -n "${opt_linkfiles}" ]
- then
- links_dest="${dest}"
- dest="$(mktemp -d ${persistent_backing}/links_source-XXXXXX)"
- links_source="${dest}"
- fi
- cow_dir="$(echo ${dest} | sed -e "s|${rootmnt}|/cow/|")"
- mkdir -p ${cow_dir}
- do_union ${dest} ${cow_dir} ${source} ${rofs_dest_backing}
- fi
-
- if [ -n "${opt_linkfiles}" ]
- then
- link_files "${links_source}" "${links_dest}" "${rootmnt}"
- fi
-
- PERSISTENCE_IS_ON="1"
- export PERSISTENCE_IS_ON
- done < ${custom_mounts}
- rm -f ${custom_mounts}