итак - второй подход к вопросу загрузки dreambian c usb Flash drive
идея следущая - так как передать собственно кернелу команду на загрузку
initrd в дриме невозможно - использовать рут дерево создаваемое этой
командой как первичное рут-дерево с последущей передачей на полное
рут-дерево дебиан на усб диске - от этого промежуточного рут-дерева
требуется то в общем только загрузить драйвер усб-диска - так как
кернел напрямую не хочет загрузить рут-дерево с усб - диска sda1
к моменту когда кернел хочет подключить рут-дерево еще не существует ...
или он не инициализирован - это точно не понятно .... но и не важно ...
кернел загрузит минимальноое рут-дерево - загрузит и инициализирует
usb Flash drive как sda1 и далее в простейшем варианте мы этот sda1
подмонтируем и сделаем в него chroot ... или более правильно pivot_root
приведу описание команды - это важно будет - в самом конце правда
pivot_root
NAME
pivot_root - change the root file system
SYNOPSIS
pivot_root new_root put_old
DESCRIPTION
pivot_root moves the root file system of the current process to the
directory put_old and makes new_root the new root file system. Since
pivot_root(8) simply calls pivot_root(2), we refer to the man page of
the latter for further details.
Note that, depending on the implementation of pivot_root, root and cwd
of the caller may or may not change. The following is a sequence for
invoking pivot_root that works in either case, assuming that pivot_root
and chroot are in the current PATH:
cd new_root
pivot_root . put_old
exec chroot . command
Note that chroot must be available under the old root and under the new
root, because pivot_root may or may not have implicitly changed the
root directory of the shell.
Note that exec chroot changes the running executable, which is neces-
sary if the old root directory should be unmounted afterwards. Also
note that standard input, output, and error may still point to a device
on the old root file system, keeping it busy. They can easily be
changed when invoking chroot (see below; note the absence of leading
slashes to make it work whether pivot_root has changed the shell's root
or not).
EXAMPLES
Change the root file system to /dev/hda1 from an interactive shell:
mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root
Показать весь код
чтож - pivot_root - это наш выбор )))
правда не знаю какой скрипт будет запущен после такого варианта - вернее какой
должен быть запущен ))))
но начнем с создание такого минимального промежуточного рут-дерева -
можно наверно его сделать ручками самому но будем пользовать стандартные средства
команда mkinitrd нам в этом поможет ...
root@dreambox:/hdd/initrd# /usr/sbin/mkinitrd -k -o /hdd/initrd/initrd23
/usr/sbin/mkinitrd: The working directory /tmp/mkinitrd.C6doqd will be kept.
-k - оставить временное рут-дерево
-o в какой файл собирается упакованный initrd
команда создает образ ram диска упакованный в cramfs - но этот собственно
файл нас не очень интересует - он всегда может быть собран из развернутого
в директории рут-дерева командой mkcramfs
можно конечно попробовать еще один вариант создания этого загрузочного
рут-дерева командой debootstrap но размер такого дерева намного больше
создаваемого mkinitrd и может не влезть в флэш память дрима ... хотя попробовать
можно - может обрезание такого рут дерева - более правильный вариант
чем наращивание рут-дерева созданного mkinitrd но к сожалению в моем
мини дистре debootstrap не входит - и
доставить его пока не могу ... буду пробывать пока с mkinitrd
теперь надо как то продумать
1) что же надо добавить в это рут-деревце чтобы проинициализировался
и смонтировался usb диск
нечто подобное этому
mount -n -t usbfs usbfs /proc/bus/usb
mount /dev/scsi/host0/bus0/target0/lun0/disc /mnt/usb || mount /dev/scsi
/host0/bus0/target0/lun0/part1 /mnt/usb
2) содержимое стартового скрипта linuxrc и запустит ли его кернел - ведь
в нашем варианте это будет не совсем ram-disk
3) процедуру проверки такого варианта загрузки - неплохо бы без сборки и заливки
имиджа для дримбокса
4) желательно чтобы в этом стартовом рут-деревце стартовал хотя бы ssh сервер
чтобы можно было подключится и посмотеть что и как и отладить если что не так...
и присвоить сетевой адрес не забыть - иначе нам удачи не видать
нечто типа
с конфигом /etc/ssh/sshd_config
и наверно и ключи оттуда же и ...
хм - а также эти библиотеки :
libwrap.so.0
libpam.so.0
libdl.so.2
libresolv.so.2
libcrypto.so.0.9.7 /// хм - 1.2 мегабайт (((
libutil.so.1
libz.so.1
libnsl.so.1
libcrypt.so.1
libpthread.so.0
и после всего этого
что сие значит - непонятно - надо попробывать тогда простой телнет демон
- может с ним больше повезет .... по крайней мере не понадобится вероятно
libcrypto.so.0.9.7
много текста - но пока результат всех измышлений
и то что размер получившегося файла составляет всего 1.2 мегабайта и свободно влезет
в внутреннюю флэш дрима --- пока влезает ))) без довесков