Загрузка дистрибутива из не-корневой папки
#1
Отправлено 03 Май 2009 - 18:39
Многие live-дистрибутивы Linux умеют это делать. Обычно это осуществляется путем передачи в загрузчике соответствующего параметра, который потом используется в скрипте инициализации (параметр directory в Parted Magic, параметр from в Slax, параметр psubdir в Puppy).
Я сделал изменения в скрипте инициализации DrWeb LiveCD (linuxrc), добавив соответствующий параметр. Все что требуется от разработчиков - просмотреть мой код и добавить его в свой дистрибутив. Как уважаемые разработчики на это смотрят?
#2
Отправлено 04 Май 2009 - 09:50
Идея интересная.
Dmitry [TestLab]
#3
Отправлено 07 Май 2009 - 20:52
#4
Отправлено 08 Май 2009 - 10:06
Для начала я перенес все файлы (модули, конфиг, версию) в одну папку, чтобы содержимое дистрибутива не было разбросано по всему диску. Ядро (vmlinuz/initrd) в принципе можно держать где угодно (т.к. в скипте они не используются), но я его тоже положил в папку с модулями.
Добавил функцию парсинга командной строки. Т.к. cat не включена в дистрибутив, пришлось воспользоваться grep:
parse_cmdline() { for arg in $(grep . < /proc/cmdline); do case $arg in path=*) BOOT_PATH="${arg#path=}" ;; esac done }Потом непосредственно перед циклом монтирования дисков и проверкой пути вызываю вышеуказанную функцию. Если параметр не задан, используем стандартный путь. И далее при поиске нужной папки на устройстве используем параметр, а не жестко заданную строковую константу:
parse_cmdline if [ -z "${BOOT_PATH}" ] then BOOT_PATH="boot/module" fi for i in /dev/[hs]d[a-z]* /dev/[hs][rg][0-9]* do mount -t auto -r ${i} ${DIR} >/dev/null 2>&1 if [ "${?}" -eq "0" ] then echo "Probing ${i} for ${BOOT_PATH} directory" if [ -d ${DIR}/${BOOT_PATH} ] then echo "Modules found at ${i}/${BOOT_PATH}" MODULES=${DIR}/${BOOT_PATH} CDDIR=${DIR} CDDEV=${i} break; else umount -f ${DIR} fi fi doneТо же самое делаем при выводе на экран версии:
DIR=${DIR}/${BOOT_PATH} /bin/sh -c 'echo -e `cat ${DIR}/DrWebLiveCD*`'и при вызове конфига
. /mnt/module/basedev/${BOOT_PATH}/config
Вот собственно и все. Теперь если при запуске указать параметр path, то дистрибутив будет грузиться из указанной папки.
И вот подправленный файл целиком: linuxrc.txt 8,22К 214 Скачано раз
Сообщение было изменено Toxic: 08 Май 2009 - 10:07
#5
Отправлено 11 Май 2009 - 08:39
у меня внешний диск, на котором при помощи grub4dos создал загрузочный диск - а там у меня Windows recovery console, Windows Live Cd, Hiren's Boot cd, Vista Rescue Disk.
вот только я не знаю какие параметры вписать в menu.lst чтоб можно выло DrWeb загрузить, чтоб не выдавал ошибку "Can't Find CD"
пробвал загрузку из *.iso и из папки..
Вижу в загружике доктора syslinux - а как его связать с Груб-ом
прошу помощи кто знает http://forum.drweb.com/public/style_emoticons/default/unsure.png
#6
Отправлено 13 Май 2009 - 02:03
menuentry "Dr.Web LiveUSB (Default)" { linux (hd0,1)/boot/drweb/vmlinuz "root=/dev/ram0 init=/linuxrc init_opts=4 dokeymap path=boot/drweb looptype=squashfs loop=/boot/drweb/white.mo usbroot slowusb vga=791 CONSOLE=/dev/tty1" initrd (hd0,1)/boot/drweb/initrd }Если не править initrd, то тогда нужно модули (*.mo файлы) положить в /boot/module/, конфиг файл (config) и файл версии (DrWebLiveCD-5.*.*.******) положить в /boot/, vmlinuz/initrd можно ложить куда угодно (например вместе с модулями), остальные файлы можно не копировать (это обвеска от isolinux). Тогда конфиг будет такой:
menuentry "Dr.Web LiveUSB (Default)" { linux (hd0,1)/boot/module/vmlinuz "root=/dev/ram0 init=/linuxrc init_opts=4 dokeymap looptype=squashfs loop=/boot/module/white.mo usbroot slowusb vga=791 CONSOLE=/dev/tty1" initrd (hd0,1)/boot/module/initrd }Для grub4dos в конфиге вместо linux пишешь kernel и в путях не указываешь имя девайса, типа такого:
title Dr.Web LiveUSB (Full Mode) kernel /boot/module/vmlinuz бла-бла-бла initrd /boot/module/initrd boot
#7
Отправлено 09 Октябрь 2009 - 09:26
разработчик не считает это критичным. я тоже. если оно вам действительно очень нужно это можно сделать.http://bugs.drweb.com/bug_view_advanced_pa...?bug_id=0027697
Status resolved
Resolution not a bug
сделать можно только, придется при запуске каждый раз править /boot/isolinux/isolinux.cfg. Оно надо?
Dmitry [TestLab]
#8
Отправлено 10 Октябрь 2009 - 00:02
да и вообще, лишняя фича не помешает, тем более что она уже сделана - разработчику достаточно просмотреть ее и скопипастить в trunk если нет претензий к коду.
#9
Отправлено 19 Январь 2010 - 00:13
Только искал, как попроще загрузить DrWebLiveCD с помощью Grub2.
Читают тему: 0
0 пользователей, 0 гостей, 0 скрытых