You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.7 KiB
94 lines
2.7 KiB
3 years ago
|
{% calculate chmod='755' %}
|
||
|
#!/bin/sh
|
||
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
||
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
||
|
|
||
|
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
|
||
|
|
||
|
PATH=/usr/sbin:/usr/bin:/sbin:/bin
|
||
|
|
||
|
live_dir=$(getarg rd.live.dir -d live_dir )
|
||
|
squash_image=$(getarg rd.live.squashimg -d loop)
|
||
|
[ -z "$squash_image" ] && squash_image="livecd.squashfs"
|
||
|
|
||
|
getargbool 0 rd.live.ram -d -y live_ram -d -y docache && live_ram="yes"
|
||
|
|
||
|
# we might have an embedded fs image on squashfs (compressed live)
|
||
|
if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then
|
||
|
SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}"
|
||
|
fi
|
||
|
|
||
|
do_cache() {
|
||
|
allmemory=0
|
||
|
for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \
|
||
|
cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ;
|
||
|
do
|
||
|
allmemory=$((${allmemory} + $i))
|
||
|
done
|
||
|
|
||
|
# getting size tmpfs of default
|
||
|
let curtfs=${allmemory}/2
|
||
|
|
||
|
# getting size of image
|
||
|
let imagesize=`ls -la ${SQUASHED} | sed -r -n 's/(\S*\s*){4}(\S*).*/\2/p'`/20000*21
|
||
|
let addon=${imagesize}/7
|
||
|
if [[ ${curtfs} -gt $(( ${imagesize} + ${addon} )) ]];
|
||
|
then
|
||
|
newsize=${curtfs}
|
||
|
else
|
||
|
newsize=$(( ${addon} + ${imagesize} ))
|
||
|
fi
|
||
|
|
||
|
if [[ ${newsize} -lt ${allmemory} ]];
|
||
|
then
|
||
|
LIVECACHE=/run/initramfs/livecache
|
||
|
mkdir -m 0755 -p $LIVECACHE
|
||
|
mount -o remount,size=${newsize}k -t tmpfs tmpfs /run
|
||
|
echo "Copying live image to RAM..."
|
||
|
echo "(this may take a few minutes)"
|
||
|
dd if=$SQUASHED of=${LIVECACHE}/livecd.squashfs bs=512 2> /dev/null
|
||
|
if [ $? -ne 0 ]
|
||
|
then
|
||
|
bad_msg "Failed to cache the loop file! Lack of space?"
|
||
|
umount ${LIVECACHE}
|
||
|
else
|
||
|
SQUASHED="${LIVECACHE}/livecd.squashfs"
|
||
|
echo "Unmounting media from /var/initramfs/live"
|
||
|
umount -nd /run/initramfs/live
|
||
|
[[ -d /run/initramfs/isoscan ]] && umount -nd /run/initramfs/isoscan
|
||
|
fi
|
||
|
else
|
||
|
echo "Too low memory for cache the loop file." 1>&2
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
if [ -e "$SQUASHED" ] ; then
|
||
|
if [ -n "$live_ram" ] ; then
|
||
|
do_cache
|
||
|
fi
|
||
|
|
||
|
SQUASHED_LOOPDEV=$( losetup -f )
|
||
|
losetup -r $SQUASHED_LOOPDEV $SQUASHED
|
||
|
mkdir -m 0755 -p /run/initramfs/squashfs
|
||
|
mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs
|
||
|
fi
|
||
|
|
||
|
ROOTFLAGS="$(getarg rootflags)"
|
||
|
if [ -n "$ROOTFLAGS" ]; then
|
||
|
ROOTFLAGS="-o $ROOTFLAGS"
|
||
|
else
|
||
|
ROOTFLAGS="-o udba=reval,br:/overlay=rw,/run/initramfs/squashfs=ro"
|
||
|
fi
|
||
|
|
||
|
ln -s ${SQUASHED_LOOPDEV} /dev/mapper/live-rw
|
||
|
{% if pkg() >= '045' %}
|
||
|
ln -s ${SQUASHED_LOOPDEV} /run/rootfsbase
|
||
|
{% endif %}
|
||
|
{% if pkg() >= '049' %}
|
||
|
ln -s ${SQUASHED_LOOPDEV} /dev/root
|
||
|
{% endif %}
|
||
|
|
||
|
need_shutdown
|
||
|
|
||
|
exit 0
|