В начале скрипта функция check_status, которая выводит сообщение "готово" зелёного цвета при отсутствии ошибки и "ошибка" красного плюс поледние 4 строки bootinit.log и dmesg с выходом в первичную консоль при ошибке. Эта секция сохранена из стандартного init Puppy.
Далее задаются переменные как в Puppy, с небольшими изменениями. Следующий шаг - минимально необходимое монтирование. Секция tuxonice от Pro, которая на последних ядрах не работает, отсутствует каталог /sys/power/tuxonice. Далее моё творчество
blkid > /tmp/uuid.lst
if [ $PDEV ]; then
if [ "$(grep $PDEV /tmp/uuid.lst)" = "" ]; then
sleep 5
blkid > /tmp/uuid.lst
fi
PDEV1=$(grep $PDEV /tmp/uuid.lst | cut -b6-9) #
else
PDEV1=$(egrep -v 'loop|swap' /tmp/uuid.lst | cut -b6-9)
fi
Это даёт возможность задавать dev= по uuid, что немаловажно для флешек. Если dev не указано, то берутся все обнаруженные и отправляются в цикл
for DEV in $PDEV1
do
grep $DEV /tmp/uuid.lst | grep ntfs && MNT=ntfs-3g || MNT=mount
mkdir /mnt/$DEV
N=0
until $MNT /dev/$DEV /mnt/$DEV $RO 2>/dev/null
do
sleep 1
echo -n . >/dev/console
N=$(expr $N + 1)
[ $N = 10 ] && check_status 1
done
DIR=$(ls /mnt/$DEV/$PDIR/base/kernel-${KERNELVER}.xzm 2>/dev/null | cut -d'/' -f4- | sed 's|/base/kernel.*||')
if [ ! $DIR ]; then
umount /mnt/$DEV
rmdir /mnt/$DEV
continue
elif [ "$(echo $DIR | wc -w)" -gt 1 ]; then
echo "Выберите загрузочный каталог и напечатайте его имя:" > /dev/console
echo $DIR > /dev/console
read DIR
fi
PDEV=$DEV
PDIR=$DIR
check_status 0
break
done
Из этого следует, что dev= и dir= параметры не обязательные, но желательные для ускорения загрузки.