#!/bin/bash # Filename: grml2ram # Purpose: copy compressed GRML image to RAM # Authors: (c) Michael Schierl , (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ set -e # shellcheck disable=SC1091 . /etc/grml/lsb-functions # shellcheck disable=SC1091 . /etc/grml/script-functions check4root || exit 1 check4progs rsync gawk || exit 2 if ! isgrmlcd ; then eerror "Not running grml in live-cd mode. Nothing to be done, exiting." ; eend 1 exit 1 fi # initramfs layout since December 2012, backwards compatibility: [ -d /lib/live/mount/medium ] && export LIVECD_PATH='/lib/live/mount/medium' # initramfs layout since December 2018: [ -d /run/live/medium ] && export LIVECD_PATH='/run/live/medium' if [ -z "$CMDLINE" ]; then # if CMDLINE was set from the outside, we're debugging. # otherwise, take CMDLINE from Kernel and config files. CMDLINE="$(cat /proc/cmdline)" [ -d ${LIVECD_PATH}/bootparams/ ] && CMDLINE="$CMDLINE $(cat ${LIVECD_PATH}/bootparams/* | tr '\n' ' ')" fi getbootparam(){ local line local ws ws=' ' line=" $CMDLINE " case "$line" in *[${ws}]"$1="*) result="${line##*[$ws]$1=}" result="${result%%[$ws]*}" echo "$result" return 0 ;; *) # no match? return 1 ;; esac } MEDIA_PATH="$(getbootparam live-media-path)" MEDIA_PATH="${MEDIA_PATH:-.}" IMAGE=$(find "${LIVECD_PATH}/${MEDIA_PATH}/" -name "*.squashfs" 2>/dev/null | head -1) if ! [ -r "$IMAGE" ] ; then if [ -r /cdrom/GRML/GRML ] ; then IMAGE='/cdrom/GRML/GRML' else eerror "Can not access grml squashfs file." eerror "Looks like you did run grml2ram already?" ; eend 1 exit 1 fi fi GRMLSIZE="$(du $IMAGE | awk '{print $1}')" RAM=$(/usr/bin/gawk '/MemFree/{print $2}' /proc/meminfo) LOOPDEV=$(/sbin/losetup -j "${IMAGE}" -n -O NAME) case "$*" in -f|--force) ewarn "Forcing copy process for grml-image (${GRMLSIZE}kB) as requested via force option." ; eend 0 ;; *) if test "$RAM" -lt "$GRMLSIZE" ; then eerror "Sorry, not enough free RAM (${RAM}kB) available for grml-image (${GRMLSIZE}kB)." ; eend 1 exit 1 fi ;; esac einfo "Copying $IMAGE to RAM, this might take a while." rsync -a --progress $IMAGE /tmp/GRML LANGUAGE=C LANG=C LC_ALL=C perl << EOF open LOOP, '<${LOOPDEV}' or die $!; open DEST, '