Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
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.