PERSISTENT_PATH="${ARGUMENT#persistent-path=}"
export PERSISTENT_PATH
;;
+ persistent-read-only)
+ PERSISTENT_READONLY="Yes"
+ export PERSISTENT_READONLY
+ ;;
persistent-storage=*)
PERSISTENT_STORAGE="${ARGUMENT#persistent-storage=}"
export UNIONTYPE
fi
+ if [ -z "${PERSISTENT_ENCRYPTION}" ]
+ then
+ PERSISTENT_ENCRYPTION="none"
+ export PERSISTENT_ENCRYPTION
+ elif echo ${PERSISTENT_ENCRYPTION} | grep -qe "\<luks\>"
+ then
+ if ! modprobe dm-crypt
+ then
+ log_warning_msg "Unable to load module dm-crypt"
+ PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
+ export PERSISTENT_ENCRYPTION
+ fi
+
+ if [ ! -x /lib/cryptsetup/askpass ] || [ ! -x /sbin/cryptsetup ]
+ then
+ log_warning_msg "cryptsetup in unavailable"
+ PERSISTENT_ENCRYPTION=$(echo ${PERSISTENT_ENCRYPTION} | sed -e 's/\<luks,\|,\?luks$//g')
+ export PERSISTENT_ENCRYPTION
+ fi
+ fi
+
if [ -n "${PERSISTENT}" ] && [ -z "${PERSISTENT_METHOD}" ]
then
PERSISTENT_METHOD="snapshot,overlay"
PATH_ID="/sbin/udevadm test-builtin path_id"
fi
- if "${PATH_ID}" "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-[^-]*-(ide|sas|scsi|usb|virtio)|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci)"
+ if ${PATH_ID} "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-[^-]*-(ide|sas|scsi|usb|virtio)|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci)"
then
return 0
elif echo "${sysfs_path}" | grep -q '^/block/vd[a-z]$'
return 1
fi
- echo "export ${snap_type}SNAP=${snap_relpath}:${snapdev}:${snapfile}" >> snapshot.conf # for resync on reboot/halt
+ if [ -z ${PERSISTENT_READONLY} ]
+ then
+ echo "export ${snap_type}SNAP=${snap_relpath}:${snapdev}:${snapfile}" >> snapshot.conf # for resync on reboot/halt
+ fi
return 0
}
;;
esac
- if echo ${PERSISTENT_METHOD} | grep -qw overlay
+ if echo ${PERSISTENT_METHOD} | grep -qe "\<overlay\>"
then
overlays="${root_persistence} ${home_persistence}"
fi
- if echo ${PERSISTENT_METHOD} | grep -qw snapshot
+ if echo ${PERSISTENT_METHOD} | grep -qe "\<snapshot\>"
then
snapshots="${root_snapshot_label} ${home_snapshot_label}"
fi
then
cowdevice=${cowprobe}
cow_fstype=$(get_fstype "${cowprobe}")
- cow_mountopt="rw,noatime"
+ if [ -z "${PERSISTENT_READONLY}" ]
+ then
+ cow_mountopt="rw,noatime"
+ else
+ cow_mountopt="ro,noatime"
+ fi
if [ "${FORCEPERSISTENTFSCK}" = "Yes" ]
then
fsck -y ${cowdevice}
fi
- else
- cowdevice="tmpfs"
- cow_fstype="tmpfs"
- cow_mountopt="rw,noatime,mode=755"
fi
elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENT}" ]
then
nfs_cow_opts="-o nolock"
nfs_cow=${NFS_COW}
fi
+
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ nfs_cow_opts="${nfs_cow_opts},nocto,ro"
+ fi
+
mac="$(get_mac)"
if [ -n "${mac}" ]
then
else
panic "unable to determine mac address"
fi
- else
+ fi
+
+ if [ -z "${cowdevice}" ]
+ then
cowdevice="tmpfs"
cow_fstype="tmpfs"
cow_mountopt="rw,noatime,mode=755"
if [ "${UNIONTYPE}" != "unionmount" ]
then
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ persistent_root="/$(basename ${cowdevice})-backing"
+ mkdir -p ${persistent_root}
+ else
+ persistent_root="/cow"
+ fi
if [ "${cow_fstype}" = "nfs" ]
then
log_begin_msg \
- "Trying nfsmount ${nfs_cow_opts} ${cowdevice} /cow"
- nfsmount ${nfs_cow_opts} ${cowdevice} /cow || \
- panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on /cow"
+ "Trying nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root}"
+ nfsmount ${nfs_cow_opts} ${cowdevice} ${persistent_root} || \
+ panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on ${persistent_root}"
else
- mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || \
- panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on /cow"
+ mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} ${persistent_root} || \
+ panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on ${persistent_root}"
fi
fi
*)
- unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}"
+ if [ -n "${PERSISTENT_READONLY}" ]
+ then
+ mount -t tmpfs -o rw,noatime,mode=755 tmpfs "${unionrw}"
+ unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${persistent_root}=${roopt}:${unionro}=${roopt}"
+ else
+ unionmountopts="-o noatime,${noxino_opt}dirs=${unionrw}=rw:${unionro}=${roopt}"
+ fi
mount -t ${UNIONTYPE} ${unionmountopts} ${UNIONTYPE} "${unionmountpoint}"
;;
esac || \
if [ -b "${homecow}" ]
then
- mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
+ if [ -z "${PERSISTENT_READONLY}" ]
+ then
+ mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
+ else
+ homerw="/cow/home"
+ homero="/$(basename ${homecow})-backing"
+ homemountpoint="${rootmnt}/home"
+ mkdir -p ${homerw} ${homero} ${homemountpoint}
+ mount -t $(get_fstype "${homecow}") -o ro "${homecow}" "${homero}"
+ mount -t "${UNIONTYPE}" -o "noatime,${noxino_opt}dirs=${homerw}=rw:${homero}=${roopt}" "${UNIONTYPE}" "${homemountpoint}"
+ fi
export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
else
log_warning_msg "Unable to find the persistent home medium"
then
# We found a memdisk, set up phram
modprobe phram phram=memdisk,${MEMDISK}
+ modprobe phram phram=memdisk,${MEMDISK}
# Load mtdblock, the memdisk will be /dev/mtdblock0
modprobe mtdblock