Изменения в init для подключения slackosave.sfs :
1. В блоке FND_PUPSAVES= , строки 445- 485 , везде, где стоит
${DISTRO_FILE_PREFIX}save*.[234]fs
заменяем на
${DISTRO_FILE_PREFIX}save*.[234s]fs
скрипт определяет и slackosave.sfs как стандартную сохраненку
2. В строках 879-881 проверяется, если сохраненка .sfs то назначается режим 14
PUPSAVEFILE="`echo -n "$PUPSAVE" | cut -f 3 -d ','`" #проверяем тип со-
SFFS2="`echo -n "$PUPSAVEFILE" | rev | cut -c 3`" # храненки .sfs
[ "$SFFS2" = "s" ] && PUPMODE=14 #изменение режима с 12 на 14 при сейве.sfs
3. Строка 930 - назначаются параметры монтирования для режима PUPMODE=14
14) CREATETMPFS="/pup_rw";CREATEPUPSAVE2FS="/pup_ro1";CREATEPUPXXXSFS="/pup_ro2"
OLDFILESMNTPT="/pup_ro1";NEWFILESMNTPT="/pup_ro2";UMNTMAIN="/pup_rw=rw:/pup_ro1=ro:/pup_ro2=ro";; #режим для сейв.sfs
4. Строки 1091 - 1098 добавляются параметры для монтирования .sfs сохраненки
SFFS2=`echo -n "$PUPSAVEFILE" | rev | cut -c 3` # доп. переменые
SFFS3=""
if [ "$SFFS2" != "s" ];then # проверка типа сохраненки *.sfs или *.[234]fs и выбор опций монтирования
SFFS3="$SFFS"
else
SFFS3=squashfs
fi
mount -t $SFFS3 -o noatime /dev/loop1 $CREATEPUPSAVE2FS # монтирование сохраненки
Теперь самый "проблемный" блок - обработка /etc/ BOOTCONFIG
Строка 1517 проверяет его наличие, а если не находит - пытается создать
[ ! -f $OLDFILESMNTPT/etc/rc.d/BOOTCONFIG ] && touch $OLDFILESMNTPT/etc/rc.d/BOOTCONFIG
Возможно это и объясняет кернел - паник если такого файла нет в sleckosave.sfs - в сфску не допишеш
В Слако/Прицессе при стандартном ручном подключении *.sfs их имена записываются в /etc/ BOOTCONFIG в переменную EXTRASFSLIST= и при следующей загрузке они монтируются автоматически
Так-же при загрузке сравнивается содержимое переменных NEWUNIONRECORD и LASTUNIONRECORD в которых записаны имена модулей, подключаемых при последней и предпоследней загрузке. Если переменные не совпадают, система пытается обновиться. Поэтому я постарался оставить для стандартных режимов стандартный вариант, а изменил только для 14
строки 1616 - 1628
if [ "$PUPMODE" != "14" ];then
xBOOTCONFIG="`grep -v '^PREVUNIONRECORD' $OLDFILESMNTPT/etc/rc.d/BOOTCONFIG | sed -e 's/^LASTUNIONRECORD/PREVUNIONRECORD/'`"
echo "$xBOOTCONFIG" > /pup_rw/etc/rc.d/BOOTCONFIG
#sync
echo "LASTUNIONRECORD='$NEWUNIONRECORD'" >> /pup_rw/etc/rc.d/BOOTCONFIG
[ "$LASTUNIONRECORD" = "$NEWUNIONRECORD" ] && NEWUNIONRECORD="" #used below.
#...if layers changed since last boot, code further down will do whiteout files purge.
#.../etc/rc.d/rc.update reads BOOTCONFIG, updates menu (etc) if layers changed.
else
echo "LASTUNIONRECORD='slackosave.sfs'" >> /pup_rw/etc/rc.d/BOOTCONFIG
echo "NEWUNIONRECORD='slackosave.sfs'" >> /pup_rw/etc/rc.d/BOOTCONFIG
echo "EXTRASFSLIST='$EXTRASFSLIST'" >> /pup_rw/etc/rc.d/BOOTCONFIG
fi
Так- же для небольшого ускорения загрузки с винта я всегда в исходных от Precise ставлю
строки 751-755
if [ "$PMEDIA" != "atahd" ];then
while [ ! -e /tmp/flag-usb-ready ];do #110710 wait for usb process to complete.
usleep 250000 #microseconds
done
fi
вместо
while [ ! -e /tmp/flag-usb-ready ];do #110710 wait for usb process to complete.
usleep 250000 #microseconds
done
- не ждет проверки usb