testing new enchants

This commit is contained in:
Danieliskot
2023-10-13 01:41:27 +02:00
parent 80e2783fcd
commit 107cd03263
8 changed files with 154 additions and 112 deletions
+2 -2
View File
@@ -5,7 +5,7 @@ cd "$(dirname $(readlink -f ${0}))"||exit 1
. ../.config
INITRAMFS="/tmp/MlbInitRd"
INITRAMFS="/tmp/LifInitRd"
trap "rm -rf ${INITRAMFS}&&exit 1" 2 3 6 15
# copy file to initramfs tree, including
@@ -99,7 +99,7 @@ cp static/fsck $INITRAMFS/bin
[[ ${static} ]]&&cp static/mdadm $INITRAMFS/bin||copy_including_deps /sbin/mdadm
[[ ${static} ]]&&cp static/mount.ntfs-3g $INITRAMFS/bin||copy_including_deps /sbin/mount.ntfs-3g
#[[ ${static} ]]&&cp static/blkid $INITRAMFS/bin||copy_including_deps /sbin/blkid
#copy_including_deps /usr/bin/eject || cp static/eject $INITRAMFS/bin
#[[ ${static} ]]&&copy_including_deps /usr/bin/eject || cp static/eject $INITRAMFS/bin
# trim modules.order file. Perhaps we could remove it entirely
MODULEORDER="$(cd "$INITRAMFS/$LMK/"; find -name "*.ko" | sed -r "s:^./::g" | tr "\n" "|" | sed -r "s:[.]:.:g")"
+68 -53
View File
@@ -13,21 +13,21 @@ export SHELL_IS_ENABLED="_SHELL_ENABLED_"
progress()
{
local pid
sh -c "${1}" >/dev/null 2>&1&
local pid="${!}"
pid="${!}"
while :; do
if [ -d /proc/${pid} ]; then
echo -n "."
sleep 0.25
else
echo -en " DONE!\n"
break
fi
done
}
grepCmdLine()
{
for i in `</proc/cmdline`; do egrep "^${1}|^${1}=.*" <<<${i}|cut -f2 -d=; done
for i in $(</proc/cmdline); do egrep "^${1}|^${1}=.*" <<<${i}|cut -f2 -d=; done
return ${?}
}
d()
@@ -35,63 +35,78 @@ d()
grepCmdLine debug >/dev/null 2>&1
return ${?}
}
m()
{
case "${1}" in
q) printf '%s' "[Question]: ${2}";;
a) printf '%s' "[Answer]: ${2}";;
A) printf '%s' "[Action]: ${2}";;
i) printf '%s' "[Info]: ${2}";;
w) printf '%s' "[Warning]: ${2}";;
e) printf '%s' "[Error]: ${2}";;
f) printf '%s' "[Fatal]: ${2}";;
*) printf '%s' "${1}";;
esac
}
isShellEnabled()
{
d&&echo -n "Is 'shell' bootloader variable set? "
d&&m q "Is 'shell' bootloader variable set "
if grepCmdLine shell; then
d&&echo -en "Yes\n"
d&&m a "Yes\n"
sed -i "s/_SHELL_ENABLED_/true/g" /lib/functions >/dev/null 2>&1
echo "[!] Reloading /lib/functions"
m A "Reloading /lib/functions "
if . /lib/functions; then
echo -en "Done\n"
m i "Done\n"
else
echo -en "Failed\n"
m f "Failed\n"
emergencyShell
fi
else
d&&echo -en "No\n"
d&&m a "No\n"
fi
}
isZramEnabled()
{
d&&echo -n "Is zram supported? "
d&&m q "Is zram supported? "
if [ -e /sys/block/zram0/disksize ]; then
d&&echo -en "Yes\n"
d&&m a "Yes\n"
m A "Enabling zram "
echo 536870912 >/sys/block/zram0/disksize
mkswap /dev/zram0 >/dev/null 2>&1
swapon /dev/zram0 >/dev/null 2>&1
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"
echo 100 >/proc/sys/vm/swappiness
else
d&&echo -en "No\n"
d&&m i "No\n"
fi
}
findData()
{
d&&echo -n "Searching ${DISTRO} in /dev -> "
#local from="$(grepCmdLine from)"
d&&m A "Searching ${DISTRO} in /dev -> "
local from a
from="$(grepCmdLine from)"
for i in ${root:-/dev/[hmnsv][dmrv][0-9a-z]*}; do
d&&echo -n "${i#/dev/} "
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}/${DISTRO}/system.sfs ]; then
d&&echo -e "\nFound ${DISTRO} in ${i}"
[[ ${from} ]]&&mount ${DATAMNT}/${from} ${DATAMNT} >/dev/null 2>&1
if [ -e ${DATAMNT}/.LlfMeta ]; then
d&&m i "\nFound ${DISTRO} in ${i}\n"
grepCmdLine fsck&&fsck ${i} >/dev/null 2>&1||true
d&&echo -n "Is 'toram' bootloader variable set and enought RAM space? "
if grepCmdLine toram; local 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&&echo -en "Yes\n"
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&&echo -n "Copying to RAM "
d&&progress "tar -c -C ${DATAMNT} --exclude ./changes -f - . | tar -xf - -C /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
[[ ${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&&if [[ "${a}" != "0" ]]; then echo -ne "Not requested by bootloader or low RAM space!\n"; else echo -ne "Internal error? Trying tmpfs, so data after power-off will be erased permanently!\n"; fi
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
mount ${DATAMNT}/${DISTRO}/system.sfs ${SYSTEM} >/dev/null 2>&1
mount ${DATAMNT}/os/system.sfs ${SYSTEM} >/dev/null 2>&1
sleep 0.5
break
else
@@ -99,22 +114,22 @@ findData()
fi
done
if ! grep -q ${SYSTEM} /proc/mounts; then
d&&echo "Can not find compatible distro!"
d&&m f "Can not find compatible distro!\n"
emergencyShell
fi
}
findModules()
{
d&&echo -n "Trying to mount modules from ${DATAMNT}/${DISTRO}/modules -> "
d&&m A "Trying to mount modules from ${DATAMNT}/${DISTRO}/modules -> "
if ls ${DATAMNT}/${DISTRO}/modules/*.sfs >/dev/null 2>&1; then
for i in $(find ${DATAMNT}/${DISTRO}/modules -maxdepth 1 -type f -name "*.sfs"|sort); do
mkdir -p ${MODULES}/$(basename ${i} .sfs)
d&&echo -n "$(basename ${i}) "
d&&m "$(basename ${i}) "
mount ${i} ${MODULES}/$(basename ${i} .sfs) >/dev/null 2>&1
done
d&&echo -en "Done\n"
d&&m i "Done\n"
else
d&&echo -en "Failed, modules not found! Continuing...\n"
d&&m w "Modules not found! Continuing...\n"
fi
}
mountOverlay()
@@ -128,37 +143,33 @@ mountOverlay()
persistentChanges()
{
if ! grepCmdLine perch&&grepCmdLine toram; then
return
return ${?}
fi
local CHANGES T1 T2 EXISTS
CHANGES=$DATAMNT/changes
T1="$CHANGES/.empty"
T2="$T1"2
d&&m A "Testing for RW access to persistent changes...\n"
mkdir -p "$2"
touch "$T1" 2>/dev/null && rm -f "$T1" 2>/dev/null
if [ $? -ne 0 ]; then
return
fi
d&&echo "Testing persistent changes for posix compatibility"
touch "$T1" && ln -sf "$T1" "$T2" 2>/dev/null && \
chmod +x "$T1" 2>/dev/null && test -x "$T1" && \
chmod -x "$T1" 2>/dev/null && test ! -x "$T1" && \
rm "$T1" "$T2" 2>/dev/null
touch "$T1" 2>/dev/null&&rm -f "$T1" 2>/dev/null||d&&m w "Failed\n"
d&&m A "Testing persistent changes for posix compatibility...\n"
touch "$T1"&&ln -sf "$T1" "$T2" 2>/dev/null&&chmod +x "$T1" 2>/dev/null&&test -x "$T1"&&chmod -x "$T1" 2>/dev/null&&test ! -x "$T1"&&rm "$T1" "$T2" 2>/dev/null
if [ $? -eq 0 ]; then
d&&echo "Activating native persistent changes"
d&&m A "Activating native persistent changes\n"
mount --bind "$CHANGES" "$2" >/dev/null 2>&1
return
return ${?}
else
d&&m w "Failed\n"
fi
if [ -e "$CHANGES/changes.dat.0" ]; then
d&&echo "Restoring persistent changes"
d&&m A "Restoring persistent changes\n"
EXISTS="true"
else
d&&echo "Creating new persistent changes"
EXISTS=""
d&&m A "Creating new persistent changes\n"
fi
mount.dynfilefs -f "$CHANGES/changes.dat" -s 16000 -m "$2" -p 4000 >/dev/null 2>&1
[ ! "$EXISTS" ] && mke2fs -F -L "DATA" "$2/virtual.dat" >/dev/null 2>&1
grepCmdLine fsck && fsck ${2}/virtual.dat >/dev/null 2>&1
mount.dynfilefs -f "$CHANGES/changes.dat" -s 16000 -m "$2" -p 4000 >/dev/null 2>&1||d&&m e "Failed\n"
[ "$EXISTS" ]||mke2fs -F -L "DATA" "$2/virtual.dat" >/dev/null 2>&1
grepCmdLine fsck&&fsck ${2}/virtual.dat >/dev/null 2>&1
mount "$2/virtual.dat" "$2" >/dev/null 2>&1
rm "$T1" "$T2" >/dev/null 2>&1
rmdir "$2/lost+found" >/dev/null 2>&1
@@ -170,6 +181,11 @@ debugShell()
setsid cttyhack sh
fi
}
pivotRoot()
{
pivot_root ${1} run/initramfs
exec chroot ${1} init
}
changeRoot()
{
cd "$1"
@@ -185,8 +201,7 @@ eot
mount -t tmpfs tmpfs run
mkdir -p run/initramfs
mount -o remount,ro overlay .
pivot_root . run/initramfs
exec chroot . init
pivotRoot .
}
emergencyShell()
{
+2 -2
View File
@@ -18,13 +18,13 @@ if [ ! -e /lib/.escaped ]; then
fi
mount -t devtmpfs devtmpfs /dev >/dev/null 2>&1
ln -sf /proc/self/fd /dev/fd
exec > >(tee -i /tmp/mlb.log) 2>&1
exec > >(tee -i /tmp/lif.log) 2>&1
d&&echo "'debug' bootloader variable is set!"&&set -x
mount -t sysfs sysfs /sys >/dev/null 2>&1
mkdir -p ${UNION} ${DATAMNT} ${SYSTEM}
isShellEnabled
ln -sf /proc/mounts /etc/mtab
find /lib/modules/`uname -r` -name "*.ko" -type f | sed -r "s:^.*/|[.]ko\$::g" | xargs -n 1 modprobe >/dev/null 2>&1
find /lib/modules/$(uname -r) -name "*.ko" -type f | sed -r "s:^.*/|[.]ko\$::g" | xargs -n 1 modprobe >/dev/null 2>&1
sleep 3
mdev -s
debugShell
+2 -1
View File
@@ -19,8 +19,9 @@ umount_all()
exec </dev/console >>/dev/console 2>>/dev/console
[ "${DEBUG_IS_ENABLED}" = "true" ]&&set -x
read -sr -N 1 -t 5 -p "[Info]: If poweroff by accident, press any key to restore your work. Waiting 5 seconds for input..."&&pivotRoot /oldroot
debugShell
echo "Minimal Linux Booter - Shutdown Magic!"
echo "Linux Live Framework - Shutdown Magic!"
echo "Entering to clean-up things before final step."
(
mdev -s