Skip to content

Commit

Permalink
add support for mounting the cow device on an nfs volume
Browse files Browse the repository at this point in the history
  • Loading branch information
lollipopman committed Oct 30, 2007
1 parent c16b43a commit d3b9448
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 16 deletions.
53 changes: 44 additions & 9 deletions scripts/live
Expand Up @@ -169,6 +169,11 @@ Arguments ()
export NFSOPTS
;;

nfscow=*)
NFS_COW="${ARGUMENT#nfscow=}"
export NFS_COW
;;

noaccessibility)
NOACCESSIBILITY="Yes"
export NOACCESSIBILITY
Expand Down Expand Up @@ -949,8 +954,6 @@ setup_unionfs ()
rofsstring=${rofsstring%:}

mkdir -p /cow
cowdevice="tmpfs"
cow_fstype="tmpfs"

# Looking for "${root_persistence}" device or file
if [ -n "${PERSISTENT}" ]
Expand All @@ -964,6 +967,39 @@ setup_unionfs ()
else
[ "${quiet}" != "y" ] && log_warning_msg "Unable to find the persistent medium"
fi
elif [ -n "${NFS_COW}" ]
then
# check if there are any nfs options
if echo ${NFS_COW}|grep -q ','
then
nfs_cow_opts="-o nolock,$(echo ${NFS_COW}|cut -d, -f2-)"
nfs_cow=$(echo ${NFS_COW}|cut -d, -f1)
else
nfs_cow_opts="-o nolock"
nfs_cow=${NFS_COW}
fi
mac=$(get_mac)
if [ -n "${mac}" ]
then
cowdevice=$(echo ${nfs_cow}|sed "s/client_mac_address/${mac}/")
cow_fstype="nfs"
else
panic "unable to determine mac address"
fi
else
cowdevice="tmpfs"
cow_fstype="tmpfs"
fi

if [ "${cow_fstype}" = "nfs" ]
then
[ "${quiet}" != "y" ] && log_begin_msg \
"Trying nfsmount ${nfs_cow_opts} ${cowdevice} /cow"
nfsmount ${nfs_cow_opts} ${cowdevice} /cow || \
panic "Can not mount ${cowdevice} on /cow"
else
mount ${cowdevice} -t ${cow_fstype} -o rw,noatime /cow || \
panic "Can not mount ${cowdevice} on /cow"
fi

rofscount=$(echo ${rofslist} |wc -w)
Expand All @@ -979,11 +1015,8 @@ setup_unionfs ()
mount --bind ${exposedrootfs} ${rootmnt} || \
panic "bind mount of ${exposedrootfs} failed"

mount ${cowdevice} -t ${cow_fstype} -o rw,noatime /cow || \
panic "Can not mount ${cowdevice} on /cow"

cow_dirs='/tmp /var/tmp /var/lock /var/run /var/log /var/spool
/home /live /var/lib/live'
cow_dirs='/var/tmp /var/lock /var/run /var/log /var/spool
/home /var/lib/live'

for dir in ${cow_dirs}; do
mkdir -p /cow${dir}
Expand All @@ -994,13 +1027,15 @@ setup_unionfs ()
rw,noatime,dirs=/cow${dir}=rw:${exposedrootfs}${dir}=ro"
done
else
mount ${cowdevice} -t ${cow_fstype} -o rw,noatime /cow || \
panic "Can not mount ${cowdevice} on /cow"
mount -t ${UNIONTYPE} -o noatime,dirs=/cow=rw:${rofsstring} \
${UNIONTYPE} "${rootmnt}" || panic "mount ${UNIONTYPE} on \
${rootmnt} failed with option noatime,dirs=/cow=rw:${rofsstring}"
fi

# tmpfs file systems
mkdir -p "${rootmnt}/live"
mount -t tmpfs tmpfs ${rootmnt}/live

# Adding other custom mounts
if [ -n "${PERSISTENT}" ]
then
Expand Down
22 changes: 15 additions & 7 deletions scripts/live-bottom/12fstab
Expand Up @@ -5,6 +5,7 @@
# initramfs-tools header

PREREQ=""
FSTAB=/root/etc/fstab

prereqs()
{
Expand All @@ -27,16 +28,23 @@ then
exit 0
fi

log_begin_msg "Configuring fstab..."
if [ -s ${FSTAB} ]
then
log_begin_msg "Not touching preexisting fstab..."
else
log_begin_msg "Configuring fstab..."

cat >> ${FSTAB} <<-EOF
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
${UNIONTYPE} / ${UNIONTYPE} rw 0 0
tmpfs /tmp tmpfs nosuid,nodev 0 0
EOF
fi

# live-initramfs script

FSTAB=/root/etc/fstab

cat >> ${FSTAB} << EOF
${UNIONTYPE} / ${UNIONTYPE} rw 0 0
tmpfs /tmp tmpfs nosuid,nodev 0 0
EOF

# disabled for now
#rm -f /root/etc/rcS.d/S*checkroot.sh
Expand Down
14 changes: 14 additions & 0 deletions scripts/live-helpers
Expand Up @@ -288,3 +288,17 @@ find_files ()
done
done
}

get_mac ()
{
mac=""
for adaptor in /sys/class/net/*;do
status=$(cat ${adaptor}/iflink)
if [ ${status} -eq 2 ];
then
mac=$(cat ${adaptor}/address)
mac=$(echo ${mac}|sed 's/:/-/g'|tr '[a-z]' '[A-Z]')
fi
done
echo $mac
}

0 comments on commit d3b9448

Please sign in to comment.