test enchants 2

This commit is contained in:
Danieliskot
2023-10-13 11:32:19 +02:00
parent 107cd03263
commit 6fb6379b4c
11 changed files with 176 additions and 191 deletions
+54 -49
View File
@@ -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
}