6 for _PARAMETER in $(cat /proc/cmdline)
8 case "${_PARAMETER}" in
10 _MODULE="${_PARAMETER#module=}"
15 # Assemble filesystems
16 if [ -z "${_MODULE}" ]
18 _FILESYSTEMS="/live/image/live/filesystem.squashfs"
20 for _FILESYSTEM in _MODULE
22 _FILESYSTEMS="${_FILESYSTEMS} /live/image/live/${_FILESYSTEM}"
26 # Exit if system is not debian live
27 if [ ! -d /live/image ]
29 echo "E: live-toram only works on Debian Live systems."
34 # Exit if filesystem not accessible
35 for _FILESYSTEM in ${_FILESYSTEMS}
37 if [ ! -r ${_FILESYSTEM} ]
39 echo "E: ${_FILESYSTEM}: No such file"
40 echo "I: live-toram already run?"
46 # Exit if user is unprivileged
47 if [ "$(id -u)" -ne 0 ]
49 echo "E: need root privileges"
54 # Exit if not enough free memory
57 for _FILESYSTEM in ${_FILESYSTEMS}
59 _SIZE="$((${_SIZE} + $(du ${_FILESYSTEM} | awk '{ print $1 }')))"
60 _MEMORY="$(awk '/MemFree/ { print $2 }' /proc/meminfo)"
65 echo "W: Ignoring memory constrains as requested"
69 if [ $_MEMORY -lt $_SIZE ]
71 echo "E: not enough free memory available."
72 echo "I: images need ${_SIZE}kB, free memory is ${_MEMORY}kB."
79 # Copying image to memory
80 echo "P: Copying images to memory."
81 echo "P: This may take a while..."
83 # FIXME: doesn't work with multiple filesystems
84 for _FILESYSTEM in ${_FILESYSTEMS}
86 if [ ! -x "$(which rsync 2>/dev/null)" ]
88 rsync -a --progress ${_FILESYSTEM} /tmp/live
90 cp -av ${_FILESYSTEM} /tmp/live
93 LANGUAGE=C LANG=C LC_ALL=C perl << EOF
94 open LOOP, '</dev/loop0' or die $!;
95 open DEST, '</tmp/live' or die $!;
96 ioctl(LOOP, 0x4C06, fileno(DEST)) or die $!
103 # Unmounting live media
104 _DEVICE="$(awk '/\/live\/image / { print $1 }' /proc/mounts)"
106 if [ -d /live/image ]
109 rmdir --ignore-fail-on-non-empty /live/image || true
112 # Ejecting live media if it is not an optical device
113 if [ "$(expr substr ${_DEVICE} 1 2)" != "sd" ] && \
114 ! readlink /sys/block/$(expr substr ${_DEVICE} 6 3) | grep -q usb
116 if [ ! -x "$(which rsync 2>/dev/null)" ]
118 eject -p -m ${_DEVICE} >/dev/null 2>&1