X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=bin%2Flive-toram;fp=bin%2Flive-toram;h=b7740a2c0042916d734dbdf71d0798cf99a0c66e;hb=519ebd66721deac6f6c0ebba3bcb798f5bf6c482;hp=0000000000000000000000000000000000000000;hpb=1745eb3e9c7b078df115837f0acee6397b57dcb5;p=live-boot-grml.git diff --git a/bin/live-toram b/bin/live-toram new file mode 100755 index 0000000..b7740a2 --- /dev/null +++ b/bin/live-toram @@ -0,0 +1,120 @@ +#!/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/null)" ] + then + eject -p -m ${_DEVICE} >/dev/null 2>&1 + fi +fi