Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: 80bba797da
Fetching contributors…

Cannot retrieve contributors at this time

executable file 121 lines (99 sloc) 2.281 kB
#!/bin/sh
set -e
# Read cmdline
for _PARAMETER in $(cat /proc/cmdline)
do
case "${_PARAMETER}" in
module=*)
_MODULE="${_PARAMETER#module=}"
;;
esac
done
# Assemble filesystems
if [ -z "${_MODULE}" ]
then
_FILESYSTEMS="/live/image/live/filesystem.squashfs"
else
for _FILESYSTEM in _MODULE
do
_FILESYSTEMS="${_FILESYSTEMS} /live/image/live/${_FILESYSTEM}"
done
fi
# Exit if system is not debian live
if [ ! -d /live/image ]
then
echo "E: live-toram only works on Debian Live systems."
exit 1
fi
# Exit if filesystem not accessible
for _FILESYSTEM in ${_FILESYSTEMS}
do
if [ ! -r ${_FILESYSTEM} ]
then
echo "E: ${_FILESYSTEM}: No such file"
echo "I: live-toram already run?"
exit 1
fi
done
# Exit if user is unprivileged
if [ "$(id -u)" -ne 0 ]
then
echo "E: need root privileges"
exit 1
fi
# Exit if not enough free memory
_SIZE=0
for _FILESYSTEM in ${_FILESYSTEMS}
do
_SIZE="$((${_SIZE} + $(du ${_FILESYSTEM} | awk '{ print $1 }')))"
_MEMORY="$(awk '/MemFree/ { print $2 }' /proc/meminfo)"
done
case ${@} in
-f|--force)
echo "W: Ignoring memory constrains as requested"
;;
*)
if [ $_MEMORY -lt $_SIZE ]
then
echo "E: not enough free memory available."
echo "I: images need ${_SIZE}kB, free memory is ${_MEMORY}kB."
exit 1
fi
;;
esac
# Copying image to memory
echo "P: Copying images to memory."
echo "P: This may take a while..."
# FIXME: doesn't work with multiple filesystems
for _FILESYSTEM in ${_FILESYSTEMS}
do
if [ ! -x "$(which rsync 2>/dev/null)" ]
then
rsync -a --progress ${_FILESYSTEM} /tmp/live
else
cp -av ${_FILESYSTEM} /tmp/live
fi
LANGUAGE=C LANG=C LC_ALL=C perl << EOF
open LOOP, '</dev/loop0' or die $!;
open DEST, '</tmp/live' or die $!;
ioctl(LOOP, 0x4C06, fileno(DEST)) or die $!
close LOOP;
close DEST;
EOF
done
# Unmounting live media
_DEVICE="$(awk '/\/live\/image / { print $1 }' /proc/mounts)"
if [ -d /live/image ]
then
umount /live/image
rmdir --ignore-fail-on-non-empty /live/image || true
fi
# Ejecting live media if it is not an optical device
if [ "$(expr substr ${_DEVICE} 1 2)" != "sd" ] && \
! readlink /sys/block/$(expr substr ${_DEVICE} 6 3) | grep -q usb
then
if [ ! -x "$(which rsync 2>/dev/null)" ]
then
eject -p -m ${_DEVICE} >/dev/null 2>&1
fi
fi
Jump to Line
Something went wrong with that request. Please try again.