echo "$PORTSNAP_WORKDIR"
echo "$PKGNG_PKG_CACHEDIR"
fi | str_regularize_df_path_filter | grep -v '^[[:space:]]*$' | sort -u > ${DBDIR}/shared_dirs.lst
- str_escape_regexp_filter < ${DBDIR}/shared_dirs.lst | sed 's|^|^|;s|$|\/|' > ${TMPDIR}/fs_build_chroot:shared_dirs.regexp
+ str_escape_regexp_filter < ${DBDIR}/shared_dirs.lst | sed 's|^|^|;s|$|\/|' > ${TMPDIR}/fs_build_chroot:shared_dirs.regexp.tmp
+ paste "${DBDIR}/shared_dirs.lst" "${TMPDIR}/fs_build_chroot:shared_dirs.regexp.tmp" > ${TMPDIR}/fs_build_chroot:shared_dirs.regexp
cp /dev/null "${TMPDIR}/fs_build_chroot:shared_dirs:added"
# Build target directories and the manifest for mounting
cp /dev/null "${DBDIR}/mount_manifest.tmp"
fs=`echo "$srcline" | cut -f 1`
mp=`echo "$srcline" | cut -f 2 | str_regularize_df_path_filter`
relative=`echo "$srcline" | cut -f 3 | str_regularize_df_path_filter`
+ fullpath=`str_regularize_df_path "/$directory/$relative"`
rm -f "${TMPDIR}/fs_build_chroot:shared_dirs:is_under"
- while read -r shared_path_regexp
+ rm -f "${TMPDIR}/fs_build_chroot:shared_dirs:is_itself"
+ while read -r shared_path shared_path_regexp
do
- echo "/$directory/$relative/" | grep -qE "$shared_path_regexp" || continue
- grep -qFx "/$directory/$relative/" "${DBDIR}/shared_dirs.lst" || continue
- if ! grep -qFx "/$directory/$relative/" "${TMPDIR}/fs_build_chroot:shared_dirs:added"
- then
- echo "/$directory/$relative/" >> ${TMPDIR}/fs_build_chroot:shared_dirs:added
- mp_share=`realpath "$systembase/$directory/$relative"`
- printf '%s\t%s\t%s\t%s\n' nullfs "$mp_share" "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
- fi
+ echo "$fullpath/" | grep -qE "$shared_path_regexp" || continue
+ echo "$shared_path"$'\n'"$fullpath" | while read mpath
+ do
+ if ! grep -qFx "$mpath" "${TMPDIR}/fs_build_chroot:shared_dirs:added"
+ then
+ echo "$mpath" >> ${TMPDIR}/fs_build_chroot:shared_dirs:added
+ mp_share=`realpath "$systembase/$mpath"`
+ printf '%s\t%s\t%s\t%s\n' nullfs "$mp_share" "$mpath" rw >> ${DBDIR}/mount_manifest.tmp
+ fi
+ done
touch "${TMPDIR}/fs_build_chroot:shared_dirs:is_under"
done < ${TMPDIR}/fs_build_chroot:shared_dirs.regexp
+ [ -e "${TMPDIR}/fs_build_chroot:shared_dirs:is_under" ] && continue
case $fs in
normal )
- masktarget=$systembase/$opt_basedir/mask/$directory/$relative
+ masktarget=`str_regularize_df_path "$systembase/$opt_basedir/mask/$fullpath"`
mkdir -p "$masktarget"
- if [ -e "${TMPDIR}/fs_build_chroot:shared_dirs:is_under" ]
- then
- printf '%s\t%s\t%s\t%s\n' nullfs "$mp" "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
- else
- printf '%s\t%s\t%s\t%s\n' nullfs "$mp" "$directory/$relative" ro >> ${DBDIR}/mount_manifest.tmp
- printf '%s\t%s\t%s\t%s\n' unionfs "$masktarget" "$directory/$relative" rw,noatime >> ${DBDIR}/mount_manifest.tmp
- fi
+ printf '%s\t%s\t%s\t%s\n' nullfs "$mp" "$fullpath" ro >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' unionfs "$masktarget" "$fullpath" rw,noatime >> ${DBDIR}/mount_manifest.tmp
;;
devfs )
- printf '%s\t%s\t%s\t%s\n' devfs devfs "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' devfs devfs "$fullpath" rw >> ${DBDIR}/mount_manifest.tmp
;;
fdescfs )
- printf '%s\t%s\t%s\t%s\n' fdescfs fdesc "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' fdescfs fdesc "$fullpath" rw >> ${DBDIR}/mount_manifest.tmp
;;
procfs )
- printf '%s\t%s\t%s\t%s\n' procfs proc "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' procfs proc "$fullpath" rw >> ${DBDIR}/mount_manifest.tmp
;;
linprocfs )
- printf '%s\t%s\t%s\t%s\n' linprocfs linproc "$directory/$relative" rw >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' linprocfs linproc "$fullpath" rw >> ${DBDIR}/mount_manifest.tmp
;;
tmpfs )
- printf '%s\t%s\t%s\t%s\n' tmpfs tmpfs "$directory/$relative" rw,mode=1777 >> ${DBDIR}/mount_manifest.tmp
+ printf '%s\t%s\t%s\t%s\n' tmpfs tmpfs "$fullpath" rw,mode=1777 >> ${DBDIR}/mount_manifest.tmp
;;
esac
done < ${TMPDIR}/fs_build_chroot:descendant/$directory/list
;;
esac
done < ${TMPDIR}/fs_build_chroot:directories
+ grep -Ev -f "${TMPDIR}/fs_build_chroot:shared_dirs:added" "${DBDIR}/shared_dirs.lst" | while read shared_dir
+ do
+ mp_share=`realpath "$systembase$shared_dir"`
+ printf '%s\t%s\t%s\t%s\n' nullfs "$mp_share" "/$shared_dir" rw >> ${DBDIR}/mount_manifest.tmp
+ done
for directory in dev proc tmp
do
[ -e $directory ] || mkdir $directory