test enchants 2
This commit is contained in:
+54
-49
@@ -9,25 +9,12 @@ export WORK="${CHANGES_MNT}/work"
|
||||
export UNION="${MEMORY}/union"
|
||||
export DATAMNT="${MEMORY}/data"
|
||||
export SYSTEM="${MEMORY}/system"
|
||||
export SHELL_IS_ENABLED="_SHELL_ENABLED_"
|
||||
export SHELL_IS_ENABLED=false
|
||||
|
||||
progress()
|
||||
{
|
||||
local pid
|
||||
sh -c "${1}" >/dev/null 2>&1&
|
||||
pid="${!}"
|
||||
while :; do
|
||||
if [ -d /proc/${pid} ]; then
|
||||
echo -n "."
|
||||
sleep 0.25
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
grepCmdLine()
|
||||
{
|
||||
for i in $(</proc/cmdline); do egrep "^${1}|^${1}=.*" <<<${i}|cut -f2 -d=; done
|
||||
egrep -o "(^|[[:space:]])${1}=[^[:space:]]+" /proc/cmdline | tr -d " " | cut -d "=" -f 2- | tail -n 1
|
||||
#for i in $(</proc/cmdline); do egrep "^${1}|^${1}=.*" <<<${i}|cut -f2 -d=; done
|
||||
return ${?}
|
||||
}
|
||||
d()
|
||||
@@ -48,12 +35,30 @@ m()
|
||||
*) printf '%s' "${1}";;
|
||||
esac
|
||||
}
|
||||
rp()
|
||||
{
|
||||
local pid force
|
||||
[[ ${1} = f ]]&&force=true
|
||||
shift
|
||||
sh -c "${1}" >/dev/null 2>&1&
|
||||
pid="${!}"
|
||||
while :; do
|
||||
if [ -d /proc/${pid} ]; then
|
||||
[ ${force} ]&&echo -n "."
|
||||
d&&echo -n "."
|
||||
sleep 0.25
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
return ${?}
|
||||
}
|
||||
isShellEnabled()
|
||||
{
|
||||
d&&m q "Is 'shell' bootloader variable set "
|
||||
if grepCmdLine shell; then
|
||||
d&&m a "Yes\n"
|
||||
sed -i "s/_SHELL_ENABLED_/true/g" /lib/functions >/dev/null 2>&1
|
||||
sed -i "s/SHELL_IS_ENABLED=false/SHELL_IS_ENABLED=true/" /lib/functions
|
||||
m A "Reloading /lib/functions "
|
||||
if . /lib/functions; then
|
||||
m i "Done\n"
|
||||
@@ -72,40 +77,44 @@ isZramEnabled()
|
||||
d&&m a "Yes\n"
|
||||
m A "Enabling zram "
|
||||
echo 536870912 >/sys/block/zram0/disksize
|
||||
mkswap /dev/zram0 >/dev/null 2>&1&&m i "Done\n"||m w "Failed\n"
|
||||
swapon /dev/zram0 >/dev/null 2>&1&&m i "Done\n"||m w "Failed\n"
|
||||
if mkswap /dev/zram0 >/dev/null 2>&1;then m i "Done\n";else m w "Failed\n";fi
|
||||
if swapon /dev/zram0 >/dev/null 2>&1;then m i "Done\n";else m w "Failed\n";fi
|
||||
echo 100 >/proc/sys/vm/swappiness
|
||||
else
|
||||
d&&m i "No\n"
|
||||
fi
|
||||
}
|
||||
toRam()
|
||||
{
|
||||
d&&m q "Is 'toram' bootloader variable set and enought RAM space? "
|
||||
if grepCmdLine toram; a=${?}&&[[ "$(grep MemFree /proc/meminfo|awk '{print $2}')" -gt $(("$(du ${DATAMNT}|tail -n1|awk '{print $1}')"-"$(du ${DATAMNT}/changes|tail -n1|awk '{print $1}')")) ]]; then
|
||||
d&&m a "Yes\n"
|
||||
mkdir -p /tmp/data
|
||||
d&&m A "Copying to RAM "
|
||||
if progress f "tar -c -C ${DATAMNT} --exclude ./changes -f - . | tar -xf - -C /tmp/data";then dm i "Done\n";else m w "Failed\n";fi
|
||||
umount -f ${DATAMNT} >/dev/null 2>&1
|
||||
[[ ${from} ]]&&umount -f ${DATAMNT} >/dev/null 2>&1
|
||||
mv -f /tmp/data/* ${DATAMNT} >/dev/null 2>&1
|
||||
rm -rf /tmp/data >/dev/null 2>&1
|
||||
else
|
||||
d&&[[ "${a}" != "0" ]]&&m e "Not requested by bootloader or low RAM space!\n"||m w "Internal error? Trying tmpfs, so data after power-off will be erased permanently!\n"
|
||||
mount -o remount,rw ${DATAMNT} >/dev/null 2>&1||true
|
||||
fi
|
||||
}
|
||||
findData()
|
||||
{
|
||||
d&&m A "Searching ${DISTRO} in /dev -> "
|
||||
local from a
|
||||
from="$(grepCmdLine from)"
|
||||
for i in ${root:-/dev/[hmnsv][dmrv][0-9a-z]*}; do
|
||||
local data a
|
||||
data="$(grepCmdLine from)"
|
||||
for i in ${root:-$(blkid|cut -d: -f1||echo /dev/[hmnsv][dmrv][0-9a-z]*)}; do
|
||||
d&&m "${i#/dev/} "
|
||||
mount -o ro ${i} ${DATAMNT} >/dev/null 2>&1
|
||||
sleep 0.5
|
||||
[[ ${from} ]]&&mount ${DATAMNT}/${from} ${DATAMNT} >/dev/null 2>&1
|
||||
if [ -e ${DATAMNT}/.LlfMeta ]; then
|
||||
[[ ${data} ]]&&mount ${DATAMNT}/${data} ${DATAMNT} >/dev/null 2>&1
|
||||
if [[ -e ${DATAMNT}/.LlfMeta && -e ${DATAMNT}/os/system.sfs ]]; then
|
||||
d&&m i "\nFound ${DISTRO} in ${i}\n"
|
||||
grepCmdLine fsck&&fsck ${i} >/dev/null 2>&1||true
|
||||
d&&m q "Is 'toram' bootloader variable set and enought RAM space? "
|
||||
if grepCmdLine toram; a=${?}&&[[ "$(grep MemFree /proc/meminfo|awk '{print $2}')" -gt $(("$(du ${DATAMNT}|tail -n1|awk '{print $1}')"-"$(du ${DATAMNT}/changes|tail -n1|awk '{print $1}')")) ]]; then
|
||||
d&&m a "Yes\n"
|
||||
mkdir -p /tmp/data
|
||||
d&&m A "Copying to RAM "
|
||||
d&&progress "tar -c -C ${DATAMNT} --exclude ./changes -f - . | tar -xf - -C /tmp/data"&&m i "Done\n"||m w "Failed\n"
|
||||
umount -f ${DATAMNT} >/dev/null 2>&1
|
||||
[[ ${from} ]]&&umount -f ${DATAMNT} >/dev/null 2>&1
|
||||
mv -f /tmp/data/* ${DATAMNT} >/dev/null 2>&1
|
||||
rm -rf /tmp/data >/dev/null 2>&1
|
||||
else
|
||||
d&&[[ "${a}" != "0" ]]&&m e "Not requested by bootloader or low RAM space!\n"||m e "Internal error? Trying tmpfs, so data after power-off will be erased permanently!\n"
|
||||
mount -o remount,rw ${DATAMNT} >/dev/null 2>&1||true
|
||||
fi
|
||||
if grepCmdLine fsck;then fsck ${i} >/dev/null 2>&1;else true;fi
|
||||
toRam
|
||||
mount ${DATAMNT}/os/system.sfs ${SYSTEM} >/dev/null 2>&1
|
||||
sleep 0.5
|
||||
break
|
||||
@@ -161,7 +170,7 @@ persistentChanges()
|
||||
else
|
||||
d&&m w "Failed\n"
|
||||
fi
|
||||
if [ -e "$CHANGES/changes.dat.0" ]; then
|
||||
if [ -e "$CHANGES/changes.dat" ]; then
|
||||
d&&m A "Restoring persistent changes\n"
|
||||
EXISTS="true"
|
||||
else
|
||||
@@ -178,14 +187,9 @@ debugShell()
|
||||
{
|
||||
if [ "$SHELL_IS_ENABLED" = "true" ]; then
|
||||
echo -e "Debug shell!\nControl+D or 'exit' to contiunue boot.\n"
|
||||
setsid cttyhack sh
|
||||
setsid cttyhack bash
|
||||
fi
|
||||
}
|
||||
pivotRoot()
|
||||
{
|
||||
pivot_root ${1} run/initramfs
|
||||
exec chroot ${1} init
|
||||
}
|
||||
changeRoot()
|
||||
{
|
||||
cd "$1"
|
||||
@@ -201,15 +205,16 @@ eot
|
||||
mount -t tmpfs tmpfs run
|
||||
mkdir -p run/initramfs
|
||||
mount -o remount,ro overlay .
|
||||
pivotRoot .
|
||||
pivot_root . run/initramfs
|
||||
exec chroot . init
|
||||
}
|
||||
emergencyShell()
|
||||
{
|
||||
exec >/dev/console >&1 2>&1 <&1
|
||||
echo "Error: Please inspect '/tmp/mlb.log' file"
|
||||
echo "Error: Please inspect '/llf.log' file"
|
||||
export PS1="RESCUE # "
|
||||
while :; do
|
||||
echo "Rescue shell!"
|
||||
setsid cttyhack sh
|
||||
setsid cttyhack bash
|
||||
done
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user