Skip to content

Commit

Permalink
Adding a white_listed_devices parameter to find_cow_device and find_f…
Browse files Browse the repository at this point in the history
…iles.

This will be needed for the upcoming persistent-media={removable,removable-usb}
boot option.
  • Loading branch information
Tails developers committed Sep 7, 2011
1 parent a8ee91a commit 209828c
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
13 changes: 7 additions & 6 deletions scripts/live
Expand Up @@ -1033,16 +1033,17 @@ find_snap ()
# Look for ${snap_label}.* in block devices
snap_label="${1}"
black_listed_devices="${2}"
white_listed_devices="${3}"

if [ "${PERSISTENT}" != "nofiles" ]
then
# search for image files
snapdata=$(find_files "${PERSISTENT_PATH}${snap_label}.squashfs ${PERSISTENT_PATH}${snap_label}.cpio.gz ${PERSISTENT_PATH}${snap_label}.ext2 ${PERSISTENT_PATH}${snap_label}.ext3 ${PERSISTENT_PATH}${snap_label}.ext4 ${PERSISTENT_PATH}${snap_label}.jffs2" "${black_listed_devices}")
snapdata=$(find_files "${PERSISTENT_PATH}${snap_label}.squashfs ${PERSISTENT_PATH}${snap_label}.cpio.gz ${PERSISTENT_PATH}${snap_label}.ext2 ${PERSISTENT_PATH}${snap_label}.ext3 ${PERSISTENT_PATH}${snap_label}.ext4 ${PERSISTENT_PATH}${snap_label}.jffs2" "${black_listed_devices}" "${white_listed_devices}")
fi

if [ -z "${snapdata}" ]
then
snapdata=$(find_cow_device "${snap_label}" "${black_listed_devices}")
snapdata=$(find_cow_device "${snap_label}" "${black_listed_devices}" "${white_listed_devices}")
fi
echo "${snapdata}"
}
Expand Down Expand Up @@ -1351,7 +1352,7 @@ setup_unionfs ()
fi

# search for label and files (this could be hugely optimized)
cowprobe=$(find_cow_device "${root_persistence}")
cowprobe=$(find_cow_device "${root_persistence}" "${blacklistdev}" "${whitelistdev}")
if [ -b "${cowprobe}" ]
then
# Blacklist /cow device, to avoid inconsistent setups for overlapping snapshots
Expand All @@ -1363,17 +1364,17 @@ setup_unionfs ()
export PERSISTENCE_IS_ON
fi
# homecow just mount something on /home, this should be generalized some way
homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}")
homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}" "${whitelistdev}")
if [ -b "${homecow}" ]
then
PERSISTENCE_IS_ON="1"
export PERSISTENCE_IS_ON
fi
root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}")
root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}" "${whitelistdev}")
# This second type should be removed when snapshot will get smarter,
# hence when "/etc/live-snapshot*list" will be supported also by
# ext2|ext3|ext4|jffs2 snapshot types.
home_snapdata=$(find_snap "${home_snapshot_label}" "${blacklistdev}")
home_snapdata=$(find_snap "${home_snapshot_label}" "${blacklistdev}" "${whitelistdev}")

if [ -b "${cowprobe}" ]
then
Expand Down
27 changes: 26 additions & 1 deletion scripts/live-helpers
Expand Up @@ -283,10 +283,13 @@ find_cow_device ()
{
# Returns a device containing a partition labeled "${pers_label}" or containing a file named the same way
# in the latter case the partition containing the file is left mounted
# if is not in black_listed_devices
# if is not in black_listed_devices.
# Additionally, if the white_listed_devices list is non-empty, the
# parent block device of the returned device must be part of this list.
pers_label="${1}"
cow_backing="/${pers_label}-backing"
black_listed_devices="${2}"
white_listed_devices="${3}"

if [ -z "${PERSISTENT_PATH}" ]
then
Expand All @@ -305,6 +308,15 @@ find_cow_device ()
break
fi

if [ -n "${white_listed_devices}" ]
then
if echo "${white_listed_devices}" | grep -v -q -w "${fulldevname}"
then
# skip this device entirely
break
fi
fi

for dev in $(subdevices "${sysblock}")
do
devname=$(sys2dev "${dev}")
Expand Down Expand Up @@ -383,11 +395,15 @@ find_cow_device ()
find_files ()
{
# return the a string composed by device name, mountpoint an the first of ${filenames} found on a supported partition
# if is not in black_listed_devices.
# Additionally, if the white_listed_devices list is non-empty, the
# parent block device of the returned device must be part of this list.
# FIXME: merge with above function

filenames="${1}"
snap_backing="/snap-backing"
black_listed_devices="${2}"
white_listed_devices="${3}"

for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd)
do
Expand All @@ -399,6 +415,15 @@ find_files ()
break
fi

if [ -n "${white_listed_devices}" ]
then
if echo "${white_listed_devices}" | grep -v -q -w "${fulldevname}"
then
# skip this device entirely
break
fi
fi

for dev in $(subdevices "${sysblock}")
do
devname=$(sys2dev "${dev}")
Expand Down

0 comments on commit 209828c

Please sign in to comment.