FastNetMon

Monday, 29 October 2007

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Сборка Live CD на основе OpenSUSE Linux 10.3 и ядра с linux-live.org

Ну так вот, встала такая необходимость - до понедельника собрать загружаемый 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, то есть не будем изобретать велосипед и соберём все на основе уже готовых и достаточно хорошо отлаженных компонентов.

Для начала сольём весь необходимый софт:
  1. http://www.linuxdevcenter.com/linux/2007/07/05/examples/hello_printk.tar.gz - пример модуля ядра.
  2. ftp://ftp.slax.org/source/slax/kernel/2.6.21.5/src-core/config - конфиг для Лайв ядра.
  3. ftp://ftp.slax.org/Linux-Live/linux-live-6.1.5.tar.gz Linux Live scripts, т.е. скрипты для создания Live дистрибутива
    сайт: http://www.linux-live.org
  4. Качаем Linux Live Scripts и Linux Kernel c сайта: http://www.linux-live.org
  5. Весь софт (а он весьма увесистый) немного позже выложу на наш локальный ФТП (справедливо только для абонентов провайдера ЭрТелеком в г. Самара).

    Набор софта:
    • Не будет графической оболочки в принципе, т.к. задача написать свой аналог Кноппикса и прочих не стоит.
    • GCC
    • VIM
    • MC (Файловый менеджер)
    • Консольные браузеры
    • Исходники патченного ядра, т.к. будет необходима сборка модулей
    • Perl, не, а Вы что хотели лишить меня любимого языка программирования ? И не стыдно, а ?
    • Пакеты поддержки PPPoE, дабы сборку можно было использовать как Rescue CD.
    • Ну это... я ещу думаю
    Energy Live! v2 В связи с тупиковостью предыдущей попытки создать Live CD, пойдем немного другим путем и уже с OpenSUSE 10.3, на которой qemu чувствует себя намного лучше, т.к. kqemu (модуль ядра для поддержки виртуализации) ставится из пакетов. Теперь нам понадобится инсталляционный dvd диск OpenSuSe 10.3 под платформу i386 1штука. Ядро, сорцы ядра и скрипты с linux-live.org
  6. Создаём виртуальный диск:
    #qemu-img create vdisk.img 5G
  7. Запускаем инсталляцию
    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.

  8. Ставим Сусе, убирая все лишее.В моём случае список необходимых пакетов имеет примерной такой вид
    • tar
    • bzip2
    • mkisofs
    • GCC
    • nano
    • kernel-sources (хотя можно их и не ставить)
    • mc
    • G++
    • Perl
    • vim
    Ещё небольшая тонкость - я советую всю систему ставить на один раздел (и форматировать его в файловой системе ext3)!
  9. Ждём окончания установки системы...
  10. Загружаем установленную систему: qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  11. Кофигурируем параметры системы, задаём пользователю root пароль SSAU, а пользователю student пароль 1.
  12. Ставим имя узла energy-live.
  13. Настройку сети пропускаем.
  14. Потом, после окончания всех установочных процедур отключаем сусе командой shutdown -h now
  15. Создаём папку 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

    Тем самым мы скопировали требуемые файлы в наш виртуальный образ.
  16. Грузим систему: # qemu -hda vdisk.img -cdrom /dev/sr0 -boot c -m 128
  17. Открываем файл /etc/fstab любым текстовым редактором и там видим в первой строчке запись вида вида: "/dev/disk/by-id/....part1", так вот меняем это безобразие на /dev/hda1.
  18. Так, насчет этого пункта у меня большие сомнения, лучше этого не делайте. Открываем файл /boot/grub/menu.lst ищем там подобную штуку и меняем её везде на /dev/sda1.
  19. Перезагружаемся командой reboot (о ура, новый qemu научился-такие подхватывать рестарты системы и адекватно их обрабатывать), чтобы проверить работоспособность системы.
  20. Распаковываем наше бинарное ядро в систему (находясь в корневой папке /) tar -xvzf linux-2.6.21.5-i486-1.tgz
  21. Ядро будет распаковано в папку /boot под именем vmlinuz, переименуем его до адекватного имени: mv vmlinuz vmlinuz-2.6.21.5
  22. Открываем /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 и перезагружаемся с новым ядром.
  23. Вылезет пачка ошибок по поводу модулей и куча ругани на modules.dep , это решаем командой #depmod и последующей перезагрузкой для проверки.
  24. Проверка сборки модулей. берём файл hello_printk.tar.gz и переносим его в папку /root, распаковываем командой tar -xzf hello_printk.tar.gz, переходим в его папку и выполняем make, но получаем ошибку, т.к. исходников данного ядра у нас нету!
  25. Берем файл linux-2.6.21.5.tar.bz и переносим в папку /usr/src/, потом распаковываем его там командой tar -xjvvf linux-2.6.21.5.tar.bz
  26. переносим файл config в папку /usr/src/linux-2.6.21.5 под именем .config (#mv /config /usr/src/linux-2.6.21.5/.config)
  27. Переходим в папку с ядром: /usr/src/linux-2.6.21.5 и выполняем команды make oldconfig && make prepare && make modules_prepare Эти команды генерирую платформозависимые участки кода ядра, которые и будут использоваться при сборку модулей.
  28. Возвращаемся в нашу папку с модулем и повторяем процедуру сборки, посредством вызова команды make
  29. Модуль должен собраться успешно, после этого подгружаем его в ядро вызовом команды: insmod hello_printk.ko
  30. Если в самом низу вывода команды dmesg появилис строки Hello, World! то можно очень сильно радоваться , т.к. модули функционируют успешно !
  31. Переносим скрипты для лайвсиди в папку /tmp уомандой mv /linux-live-6.1.5.tar.gz и распаковываем их там. После этого переходим во вновь созданную папку и открываем файл .config , ищем в нём пункт "KERNEL=$(uname -r)" и заменяем его на "KERNEL=2.6.21.5"
  32. Запускаем скрипт сборки ./build сначала вводим "Energy Live!", потом /boot/vmlinuz-2.6.21.5, а потом ждем сжатия основных папок, что довольно не быстро... каково же ваше "двольно небыстро?" я хз, но у меня на настольнике (П4-1600\1Гиг оперы это потребовало бы около 5 часов, почему "бы", а потому, что я прерывал на 4м часу). А на ноуте с процессором Турион (у которого виртуализация на железном уровне) управился за где-то полтора часа.
  33. Следуя информационным надписям, можете либо создать загрузочную флешку, либо iso образ.
  34. Потом монтируем виртуальную ФС к хостовой машине и вытаскиываем оттуда образ исо, а также радуемся ;)
У меня получился 400 меговый образ )

2 comments :

  1. Классная статья, очень подробная. Только про модуль insmod hello_printk.ko
    я что-то не понял, зачем оно.

    Но вообще класс! Снимаю шляпу :-)

    ReplyDelete
  2. Спасибо за положительный отзыв :)

    А insmod это вот для чего - изначально ЛайвСД задумывался для сборки и демонстрации работы модулей ядра, поэтому функция динамической загрузки модулей тестировалась в первую очередь, ну а когда редактировал черновик просто решил не удалять, вдруг кому пригодится для аналогичных целей.

    ReplyDelete

Note: only a member of this blog may post a comment.