Ну так вот, встала такая необходимость - до понедельника собрать загружаемый Livecd с Линуксом и некоторым набором своего софта.
Давно на примете было статейка: http://mydebianblog.blogspot.com/2007/09/1-livecd.html , по которой мы и будем собирать наш LiveCd, только я буду поподробнее описывать сам процесс установки линукс-системы в эмулятор qemu.
Собирать дистрибутив мы будем на основе OpenSUSE Linux 2007.0, а не на основе Дебияна, что объяснить довольно просто - Сусю я знаю немного получше (т.к. это моя рабочая ОС). Собираться все это будет под 32 разрядной SuSe Linux 10.3 (в итоге первая часть была собрана на 32 разрядной машине под 10.3, а сам дистрибутив уже под 64 разрядной 10.2, вот так вота), но лайвсиди будет 32 разрядный %)
Для начала небольшой ликбез по qemu: http://phpsuxx.blogspot.com/2007/09/opensu...c-qemu-kvm.html и http://phpsuxx.blogspot.com/2007/09/opensu...emu-kvm_04.html.
При сборке дистрибутива будем придерживаться т.н. Linux-way, то есть не будем изобретать велосипед и соберём все на основе уже готовых и достаточно хорошо отлаженных компонентов.
Для начала сольём весь необходимый софт:
- http://www.linuxdevcenter.com/linux/2007/07/05/examples/hello_printk.tar.gz  - пример модуля ядра.
 
- ftp://ftp.slax.org/source/slax/kernel/2.6.21.5/src-core/config - конфиг для Лайв ядра.
 
- ftp://ftp.slax.org/Linux-Live/linux-live-6.1.5.tar.gz  Linux Live scripts, т.е. скрипты для создания Live дистрибутива 
 сайт: http://www.linux-live.org
 
- Качаем Linux Live Scripts и Linux Kernel  c сайта: http://www.linux-live.org
 
- Весь софт (а он весьма увесистый) немного позже выложу на наш локальный  ФТП (справедливо только для абонентов провайдера ЭрТелеком  в г. Самара).
 
 Набор софта:- Не будет графической оболочки в принципе, т.к. задача написать свой аналог Кноппикса и прочих не стоит.
 
- GCC
 
- VIM
 
- MC (Файловый менеджер)
 
- Консольные браузеры
 
- Исходники патченного ядра, т.к. будет необходима сборка модулей
 
- Perl, не, а Вы что хотели лишить меня любимого языка программирования ? И не стыдно, а ?
 
- Пакеты поддержки PPPoE, дабы сборку  можно было использовать как Rescue CD.
 
- Ну это... я ещу думаю
 
 
- Не будет графической оболочки в принципе, т.к. задача написать свой аналог Кноппикса и прочих не стоит.
- Создаём виртуальный диск:
 #qemu-img create vdisk.img 5G
 
- Запускаем инсталляцию
 modprobe kqemu # грузим модули поддержки
 qemu -hda vdisk.img -cdrom путь_к_исо_образу_суси.iso -boot d -m 128
 либо непосредственно с DVD диска, вставленного в привод хостовой машины:
 qemu -hda vdisk.img -cdrom /dev/sr0 -boot d -m 128, где /dev/sr0 - имя вашего DVD привода.
 При использовании OpenSuSe 10.2 грузим модули kvm вот в данном случаеж
 Запускаем установку от имени рута:
 qemu-kvm -hda vdisk.img -cdrom install-x86-minimal-2007.0-r1.iso -boot d -m 128
 Если в ответ получаем следующее:
 QUOTE
 open /dev/kvm: No such file or directory
 Could not initialize KVM, will disable KVM support
 
 То делаем modprobe kvm и modprobe kvm_amd (или kvm_intel в зависимости от процессора) и повторяем операцию, все должно заработать и Вы увидите окошко запуска инсталляции.
 Чтобы загружать модули kvm автоматически при старте openSUSE отредактируйте /etc/sysconfig/kernel и добавьте модули kvm в строку MODULES_LOADED_ON_BOOT=”…” . Или настройке их загрузку с помощью yast2 sysconfig.
 
 А также в данном случае везде используейте qemu-kvm, вместо qemu.
 
- Ставим Сусе, убирая все лишее.В моём случае список необходимых пакетов имеет примерной такой вид- tar
 
- bzip2
 
- mkisofs
 
- GCC
 
- nano
 
- kernel-sources (хотя можно их и не ставить)
 
- mc
 
- G++
 
- Perl
 
- vim
 
 
- tar
- Ждём окончания установки системы...
 
- Загружаем установленную систему: qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
 
- Кофигурируем параметры системы, задаём пользователю root пароль SSAU, а пользователю student пароль 1.
 
- Ставим имя узла energy-live.
 
- Настройку сети пропускаем.
 
- Потом, после окончания всех установочных процедур отключаем сусе командой shutdown -h now
 
- Создаём папку cdrom и монтируем к ней наш образ:
 # mount vdisk.img cdrom/ -t ext3 -o loop,offset=32256
 cp linux-live-6.1.5.tar.gz linux-2.6.21.5.tar.bz2 linux-2.6.21.5-i486-1.tgz hello_printk.tar.gz config cdrom/
 umount cdrom
 Тем самым мы скопировали требуемые файлы в наш виртуальный образ.
 
- Грузим систему: # qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
 
- Открываем файл /etc/fstab любым текстовым редактором и там видим в первой строчке запись вида вида: "/dev/disk/by-id/....part1", так вот меняем это безобразие на /dev/hda1.
 
- Так, насчет этого пункта у меня большие сомнения, лучше этого не делайте. Открываем файл /boot/grub/menu.lst ищем там подобную штуку и меняем её везде на /dev/sda1.
 
- Перезагружаемся командой reboot (о ура, новый qemu научился-такие подхватывать рестарты системы и адекватно их обрабатывать), чтобы проверить работоспособность системы.
 
- Распаковываем наше бинарное ядро в систему (находясь в корневой папке /) tar -xvzf linux-2.6.21.5-i486-1.tgz
 
- Ядро будет распаковано в папку /boot под именем vmlinuz, переименуем его до адекватного имени: mv vmlinuz vmlinuz-2.6.21.5
 
- Открываем /boot/grub/menu.lst и добавляем внизу следующее:
 title Energy Live!
 root(hd0,0)
 kernel /boot/vmlinuz-2.6.21.5 root=/dev/hda1 #именно hda1 %)
 А в верху default 0 исправляем на default 2 и перезагружаемся с новым ядром.
 
- Вылезет пачка ошибок по поводу модулей и куча ругани на modules.dep , это решаем командой #depmod и последующей перезагрузкой для проверки.
 
- Проверка сборки модулей. берём файл hello_printk.tar.gz и переносим его в папку /root, распаковываем командой tar -xzf hello_printk.tar.gz, переходим в его папку и выполняем make, но получаем ошибку, т.к. исходников данного ядра у нас нету!
 
- Берем файл linux-2.6.21.5.tar.bz и переносим в папку /usr/src/, потом распаковываем его там командой tar -xjvvf  linux-2.6.21.5.tar.bz
 
- переносим файл config в папку /usr/src/linux-2.6.21.5  под именем .config (#mv /config /usr/src/linux-2.6.21.5/.config)
 
- Переходим в папку с ядром:  /usr/src/linux-2.6.21.5  и выполняем команды make oldconfig && make prepare && make modules_prepare Эти команды генерирую платформозависимые участки кода ядра, которые и будут использоваться при сборку модулей.
 
- Возвращаемся в нашу папку с модулем и повторяем процедуру сборки, посредством вызова команды make
 
- Модуль должен собраться успешно, после этого подгружаем его в ядро вызовом команды: insmod hello_printk.ko
 
- Если в самом низу вывода команды dmesg появилис строки Hello, World! то можно очень сильно радоваться , т.к. модули функционируют успешно !
 
- Переносим скрипты для лайвсиди в папку /tmp  уомандой mv /linux-live-6.1.5.tar.gz и распаковываем их там. После этого переходим во вновь созданную папку и открываем файл .config , ищем в нём пункт "KERNEL=$(uname -r)" и заменяем его на "KERNEL=2.6.21.5"
 
- Запускаем скрипт сборки ./build сначала вводим "Energy Live!", потом /boot/vmlinuz-2.6.21.5, а потом ждем сжатия основных папок, что довольно не быстро... каково же ваше "двольно небыстро?" я хз, но у меня на настольнике (П4-1600\1Гиг оперы это потребовало бы около 5 часов, почему "бы", а потому, что я прерывал на 4м часу). А на ноуте с процессором Турион (у которого виртуализация на железном уровне) управился за где-то полтора часа.
 
- Следуя информационным надписям, можете либо создать загрузочную флешку, либо iso образ.
 
- Потом монтируем виртуальную ФС к хостовой машине и вытаскиываем оттуда образ исо, а также радуемся ;)
 

 
