Перейти к содержимому


Фото
- - - - -

Загрузка дистрибутива из не-корневой папки


  • Please log in to reply
8 ответов в этой теме

#1 Toxic

Toxic

    Newbie

  • Posters
  • 16 Сообщений:

Отправлено 03 Май 2009 - 18:39

Хотелось бы иметь возможность загружать Live CD/USB из любой папки, а не только из /boot/module. Это может быть нужно, если у вас на одном диске много разных дистрибутивов, или вы хотите организовать свою логическую структуру каталогов.

Многие live-дистрибутивы Linux умеют это делать. Обычно это осуществляется путем передачи в загрузчике соответствующего параметра, который потом используется в скрипте инициализации (параметр directory в Parted Magic, параметр from в Slax, параметр psubdir в Puppy).

Я сделал изменения в скрипте инициализации DrWeb LiveCD (linuxrc), добавив соответствующий параметр. Все что требуется от разработчиков - просмотреть мой код и добавить его в свой дистрибутив. Как уважаемые разработчики на это смотрят?

#2 DP

DP

    Member

  • Posters
  • 253 Сообщений:

Отправлено 04 Май 2009 - 09:50

#0027697
Идея интересная.
_______________
Dmitry [TestLab]

#3 Extra

Extra

    Newbie

  • Members
  • 2 Сообщений:

Отправлено 07 Май 2009 - 20:52

http://forum.drweb.com/public/style_emoticons/default/rolleyes.gif Поддерживаю! Ну-у-у прям очень нужно!

#4 Toxic

Toxic

    Newbie

  • Posters
  • 16 Сообщений:

Отправлено 08 Май 2009 - 10:06

ок, тогда я приведу здесь изменения с комментариями.

Для начала я перенес все файлы (модули, конфиг, версию) в одну папку, чтобы содержимое дистрибутива не было разбросано по всему диску. Ядро (vmlinuz/initrd) в принципе можно держать где угодно (т.к. в скипте они не используются), но я его тоже положил в папку с модулями.

Добавил функцию парсинга командной строки. Т.к. cat не включена в дистрибутив, пришлось воспользоваться grep:
parse_cmdline() {
					for arg in $&#40;grep . < /proc/cmdline&#41;; do
						case $arg in
							path=*&#41;
								BOOT_PATH=&#34;${arg#path=}&#34;
							  &#59;;
						esac
					done
				}
Потом непосредственно перед циклом монтирования дисков и проверкой пути вызываю вышеуказанную функцию. Если параметр не задан, используем стандартный путь. И далее при поиске нужной папки на устройстве используем параметр, а не жестко заданную строковую константу:
parse_cmdline
				if &#91; -z &#34;${BOOT_PATH}&#34; &#93;
				  then
					  BOOT_PATH=&#34;boot/module&#34;
				  fi
		  
		  for i in /dev/&#91;hs&#93;d&#91;a-z&#93;* /dev/&#91;hs&#93;&#91;rg&#93;&#91;0-9&#93;*
		  do
			mount -t auto -r ${i} ${DIR} >/dev/null 2>&1 
			if &#91; &#34;${?}&#34; -eq &#34;0&#34; &#93;
			then
			  echo &#34;Probing ${i} for ${BOOT_PATH} directory&#34;
			  if &#91; -d ${DIR}/${BOOT_PATH} &#93; 
			   then
				echo &#34;Modules found at ${i}/${BOOT_PATH}&#34;
				MODULES=${DIR}/${BOOT_PATH}
				CDDIR=${DIR}
				CDDEV=${i}
				break;
			  else
			   umount -f ${DIR}
			  fi
			fi
		  done
То же самое делаем при выводе на экран версии:
DIR=${DIR}/${BOOT_PATH} /bin/sh -c &#39;echo -e &#96;cat ${DIR}/DrWebLiveCD*&#96;&#39;
и при вызове конфига
. /mnt/module/basedev/${BOOT_PATH}/config

Вот собственно и все. Теперь если при запуске указать параметр path, то дистрибутив будет грузиться из указанной папки.
И вот подправленный файл целиком: Прикрепленный файл  linuxrc.txt   8,22К   214 Скачано раз

Сообщение было изменено Toxic: 08 Май 2009 - 10:07


#5 Extra

Extra

    Newbie

  • Members
  • 2 Сообщений:

Отправлено 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 Toxic

Toxic

    Newbie

  • Posters
  • 16 Сообщений:

Отправлено 13 Май 2009 - 02:03

Как я уже писал, vmlinuz и initrd могут лежать где угодно, главное путь загрузчику указать. У меня на флешке grub2, для него я использую следующее. Это с учетом того, что скрипт внутри initrd уже подправлен, и все файлы лежат в /boot/drweb на флешке.
menuentry &#34;Dr.Web LiveUSB &#40;Default&#41;&#34; {
	   linux &#40;hd0,1&#41;/boot/drweb/vmlinuz &#34;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&#34;
	   initrd &#40;hd0,1&#41;/boot/drweb/initrd
   }
Если не править initrd, то тогда нужно модули (*.mo файлы) положить в /boot/module/, конфиг файл (config) и файл версии (DrWebLiveCD-5.*.*.******) положить в /boot/, vmlinuz/initrd можно ложить куда угодно (например вместе с модулями), остальные файлы можно не копировать (это обвеска от isolinux). Тогда конфиг будет такой:
menuentry &#34;Dr.Web LiveUSB &#40;Default&#41;&#34; {
	   linux  &#40;hd0,1&#41;/boot/module/vmlinuz &#34;root=/dev/ram0 init=/linuxrc init_opts=4  dokeymap looptype=squashfs loop=/boot/module/white.mo  usbroot slowusb vga=791 CONSOLE=/dev/tty1&#34;
	   initrd &#40;hd0,1&#41;/boot/module/initrd
   }
Для grub4dos в конфиге вместо linux пишешь kernel и в путях не указываешь имя девайса, типа такого:
title Dr.Web LiveUSB &#40;Full Mode&#41;
kernel /boot/module/vmlinuz бла-бла-бла
initrd /boot/module/initrd
boot


#7 DP

DP

    Member

  • Posters
  • 253 Сообщений:

Отправлено 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 Toxic

Toxic

    Newbie

  • Posters
  • 16 Сообщений:

Отправлено 10 Октябрь 2009 - 00:02

лично мне это очень нужно, т.к. иметь свежую версию просто необходимо, а править скрипт инициализации при каждом обновлении очень напрягает.
да и вообще, лишняя фича не помешает, тем более что она уже сделана - разработчику достаточно просмотреть ее и скопипастить в trunk если нет претензий к коду.

#9 Strange_V

Strange_V

    Newbie

  • Posters
  • 6 Сообщений:

Отправлено 19 Январь 2010 - 00:13

Как я понимаю, изменения так и не внесли, а зря.
Только искал, как попроще загрузить DrWebLiveCD с помощью Grub2.


Читают тему: 0

0 пользователей, 0 гостей, 0 скрытых