merged grml-quickconfig nonblocking branch
[grml-scripts.git] / usr_sbin / grml2ram
1 #!/bin/sh
2 # Filename:      grml2ram
3 # Purpose:       copy compressed GRML image to RAM
4 # Authors:       (c) Michael Schierl <schierlm-public@gmx.de>, (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 # Latest change: Son Sep 30 16:04:17 CEST 2007 [mika]
8 ################################################################################
9
10 set -e
11
12 . /etc/grml/lsb-functions
13 . /etc/grml/script-functions
14
15 check4root || exit 1
16 check4progs rsync gawk || exit 2
17
18 if ! isgrmlcd ; then
19    eerror "Not running grml in live-cd mode. Nothing to be done, exiting." ; eend 1
20    exit 1
21 fi
22
23 IMAGE=$(ls /live/image/live/*.squashfs 2>/dev/null | head -1)
24 if ! [ -r "$IMAGE" ] ; then
25    if [ -r /cdrom/GRML/GRML ] ; then
26       IMAGE='/cdrom/GRML/GRML'
27    else
28       eerror "Can not access grml squashfs file."
29       eerror "Looks like you did run grml2ram already?" ; eend 1
30       exit 1
31    fi
32 fi
33
34 GRMLSIZE="$(du $IMAGE | awk '{print $1}')"
35 RAM=$(/usr/bin/gawk '/MemFree/{print $2}' /proc/meminfo)
36
37 case "$*" in -f|--force)
38   ewarn "Forcing copy process for grml-image (${GRMLSIZE}kB) as requested via force option." ; eend 0
39    ;;
40   *)
41    if test $RAM -lt $GRMLSIZE ; then
42       eerror "Sorry, not enough free RAM (${RAM}kB) available for grml-image (${GRMLSIZE}kB)." ; eend 1
43       exit 1
44    fi
45    ;;
46 esac
47
48 einfo "Copying $IMAGE to RAM, this might take a while."
49 rsync -a --progress $IMAGE /tmp/GRML
50 LANGUAGE=C LANG=C LC_ALL=C perl << EOF
51 open LOOP, '</dev/loop0' or die $!;
52 open DEST, '</tmp/GRML' or die $!;
53 ioctl(LOOP, 0x4C06, fileno(DEST)) or die $!
54 close LOOP;
55 close DEST;
56 EOF
57
58 # identify cd-rom:
59 GRMLDEV=$(awk '{if ($2 ~ /^\/live\/image$/ ) print $1}' /etc/mtab)
60 if [ -z "$GRMLDEV" ]; then
61    GRMLDEV=$(awk '{if ($2 ~ /^\/cdrom$/ ) print $1}' /etc/mtab)
62 fi     
63 [ -n "$GRMLDEV" ] || GRMLDEV='/dev/cdrom'
64
65 einfo "Unmounting cdrom"
66 [ -d /live/image ] && umount /live/image || umount /cdrom
67 eend $?
68 einfo "Now you can eject your grml-cd (e.g. run 'eject $GRMLDEV')." ; eend 0
69
70 ## END OF FILE #################################################################