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 меговый образ )

Friday 26 October 2007

D-Link G-520 OpenSUSe, вайфаизация

После появления в моём арсенале ноутбука с встроенным Wi-Fi меня с завидной регулярностью стала посещать идея перевода всего домашнего парка ПК (а это не много, не мало целых два компьютера) на исключительно беспроводную сеть.

И вот, после приобретения сетевого адаптера D-Link G520 моя задумка наконец-то осуществилась, чему я сам безмерно рад. Вы, наверное, помните те сложности, с которыми я столкнулся при установке драйверов на встроенный в ноутбук WiFi адаптер, в случае с G520 все было намного проще и решилось в буквально десятком кликов мышкой и парой команд с терминала.

Ну давайте по порядку. После установки сетевой карты Суся обнаружила сетевое устройство, но ругнулась, что нету на него драйвера. Шерстим инет на факт поддержки чипсета карточки (он смотрелся по lspci) каким-либо свободным пакетов драйверов и находим проект madwifi.org, который довольно успешно занимается данными моделями. Совершенно логично переходим на страницу загрузки, и видим там сие чудо:

Repository URLs are:
openSUSE 10.1: http://madwifi.org/suse/10.1
openSUSE 10.2: http://madwifi.org/suse/10.2
openSUSE 10.3: http://madwifi.org/suse/10.3
Что же это такое? Это рмп репозитории со скомпилированными (да, да, да! наконец-то никаких лишних телодвижений и извращений в консоли) под конкретное ядро модулями (точнее драйверами) !
Поехали:

rpm -ihv madwifi-0.9.3.3-0.1.i586.rpm
rpm -ihv madwifi-kmp-default-0.9.3.3_2.6.22.9_0.4-0.1.i586.rpm
# нижний пакет устанавливать лишь в том случае, если Вы используете виртуализацию на основе XEN.
rpm -ihv madwifi-kmp-xen-0.9.3.3_2.6.22.9_0.4-0.1.i586.rpm


Если у Вас стояло самое новое ядро на данный момент (madwifi достаточно оперативно обновляется), то все должно быть гладко, в противном случае вы получите сообщение о неудовлетворённой зависимости, а точнее о неподходящей версии ядра; эта проблема решается обновлением до нового ядра через встроенное в Yast обновление, также сделал и Ваш покорный слуга.

Ну вот, впрочем, и все, после установки перезагружаемся (хотя вполне возможно, что оно заработает сразу) и видим в сетевых устройствах наш опознанный вайфай. Далее конфигурируем через Kinternet и выкидываем на помойку все мешающиеся провода.

В итоге после т.н. вайфаизации у меня освободилось: два куска витой пары по 5 метров и 20 сантиметров соответственно, а также 8ми портовый свитч DES1008D. Кабель от интернет провайдера был подключён непосредственно в точку доступа.

Закончим на бодрой ноте слоганом "Долой провода! Даешь свободу передвижения по квартире!" %)

Wednesday 17 October 2007

OpenSuSe 10.3, тест драйв

Вот сегодня - через две недели после официального релиза - я все же обновил тестовую машину на i386 на ОпенСусе 10.3, впечатления на твёрдую пятёрку, глюков пока не замечено.
Сразу заметил:

* Абсолютно гладкое обновление с 10.2
* Намного быстрее загружается и выключается, чем 10.2
* Новый ОпенОфис 2.3
* Поддержка мп3 включается парой очевидных кликов.
* Красивая зеленая тема smile.gif
* Намного быстрее работает система управления репозиториями
* Новое 22е ядро (а-то что-то надоело сидеть на 18ом)
* Дрова (и сразу с поддержкой 3Д !!!) на мой радеон 9600XT встали сходу
* Поправлено очень много багов и шероховатостей в софте
* Новый Yast
* Куски КДЕ4 просто потрясающие!
* Не слетела раскладка, хотя народ жаловался на это
* Полный мануал по ОпенСусе на русском (вбиваем в Yast2 opensuse-manual_ru) !! После установки ищите его вот тут: /usr/share/doc/manual/opensuse-manual_ru
* Компиз сразу работать не захотел, будем мучать дальше

Tuesday 9 October 2007

Немного рутины на...Perl !

Встала довольно банальная задача - скачать список файлов, прямые ссылки на которые указаны на некоторой веб странице. Задача банальная, но какая реализация!)

Сразу пробуем wget -r http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/, но получаем только два файла, которые не являются требуемыми (robots.txt и index.html, вместо полутора десятков rpm-ок), при нормальном стечении обстоятельств подкоманда -r wget`а скачивает все файлы, но тут что-то она заработать не захотела. Видимо из-за того, что указаны не абсолютные ссылки, а относительные (ffmpeg-debuginfo-0.4.9.8723-2.1.x86_64.rpm).

Но лень на выдумки хитра, поехали:
wget http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/ -Olist.txt
cat list.txt|perl -e 'map{print join"\n",($_="@$_")=~m/href=\"(.+?)\"/sg}[<>]' > list1.txt
cat list1.txt|perl -e 'print "http://download.videolan.org/pub/videolan/vlc/SuSE/10.2/x86_64/", $_ for<>' > links.txt
rm list*
wget -i links.txt

Мало, не спорю, но время большего не позволяет. Если кто-то подскажет более простой способ, буду благодарен.