Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.

воскресенье, 23 ноября 2008 г.

Создание LiveCD с помощью LiveCD. Часть вторая.

Итак, попытка №2.

В этот раз я, как и планировал, файл для создания моей фс сделал больше. Почти 9 гигов. Разбить его отдельно на два раздела не вышло. Оказывается, так нельзя, поэтому снова swap подключался отдельным файлом. Единственное различие, что его я тоже увеличил. Сделал гиг(как оказалось потом, не зря).
Копирование базовой системы прошло удачно.
Далее в инструкции предлагается не совсем понятная конструкция
cd /cdrom; find . -size -10000k -type f -exec cp -p --parents '{}' /mnt/hda1/knx/master/ \;

Разумно рассудив, что непонятные скрипты(особенно, если вспомнить пресловутутю строчку на perl, убивающую систему) это не Ъ, я скопировал содержимое исходного CD руками:
# cd /cdrom ; cp -Rp ./* /mnt/mylivecd/knoppix/master/ 

Теперь начинаем формировать свой дистрибутив. Переходим в окружение нашей будущей системы:
# chroot /mnt/mylivecd/knoppix/source/KNOPPIX

Для нормальной работы монтируем proc:
# mount -t proc /proc proc

У меня ругнулось, что не может в mtab прописаться, но примонтировалось, поэтому особо не разбирался. После этого инструкция предлагает настроить сеть. Честно говоря, не знаю, почему так поздно, потому как я её включил ещё с самого начала. Поэтому сразу же перехожу непосредственно к настройке системы.
С помощью команд apt-get update, apt-cache search, dpkg -l, apt-get remove и apt-get install собираем нужный набор пакетов(подробности о командах в соответствующих манах). Я первым делом посмотрел в /etc/apt/sources.list и отключил непонятные источники со странными названиями и unstable ветку Debian, оставив только testing, security-апдейты и non-free-репозитарии. Остальное всё исключительно на вкус и цвет собирающего. Я удалил всё, что связано с kde, почти всё из гнома(gconf, к примеру пришлось оставить, потому как его в зависимостях требует xchat), доустановил несколько нужных мне программ. Особо стоит отметить обновление. В инструкции советуют не использовать apt-get upgrade, предупреждая, что после этого система может не загрузиться. Так как было уже далеко заполночь, а посмотреть на свой LiveCD хотелось сегодня, я не стал экспериментировать. Из-за этого обновлять некоторые пакеты(тот же iceweasel) приходилось, используя опцию apt-get --reinstall.
Когда с выбором пакетов закончено, убираем лишнее, командуя:
# deborphan | xargs apt-get -y remove

и чистим остальное:
# COLUMNS=200 dpkg -l |grep ^rc |awk '{print $2} ' | xargs dpkg -P
# apt-get clean

Всё. Здесь закончили. Отмонтируем proc(может ругнуться на то, что устройство занято; лечится нажатем Tab после umount /proc - тогда система покажет, что там лишнее примонтировано и сначала убиваем его, а потом и сам proc).
Выходим из окружения:
# exit

Теперь небольшая доработка напильником. Я хотел, чтобы система как имнимум по умолчанию подхватывала мой xorg.conf и настройки сети.
Как я уже описывал, флешка у меня отформатирована в ext2 и на ней находится раздел /home.
Я попытался научить систему монтировать её при старте. Вот тут я допустил небольшую ошибку. Толком не разобравшись в скриптах, я дописал несколько строчек в /mnt/mylivecd/knoppix/source/KNOPIIX/etc/init.d/knoppix-autoconfig
Как выяснилось потом, неправильно. :)
Кроме этого я в /mnt/mylivecd/knoppix/source/KNOPPIX/etc/init.d/ создаю скрипт cppmm-config.sh, с простым содержанием:
#!/bin/bash
/home/knoppix/cppmm-start.sh

В /home/knoppix/cppmm-start.sh тоже всё просто:
#!/bin/bash
echo "Hello, World!"

На скрипт в init.d делаю символическую ссылку /etc/rcS.d/S45cppmm-config
По задумке, этот скриптик будет вызван после монтирования дисков и перед стартом иксов.
Решение пришло уже только потом, о чём ниже я и напишу.
Мы на финишной прямой. Создаём сжатую файловую систему KNOPPIX:

# mkisofs -R -U -V "MyLiveCD" -publisher "cppmm" -hide-rr-moved -cache-inodes -no-bak -pad /mnt/mylivecd/knoppix/source/KNOPPIX | nice -5 /usr/bin/create_compressed_fs - 65536 > /mnt/mylivecd/knoppix/master/KNOPPIX/KNOPPIX

Вот здесь и припомнился гиг свопа. Запущенный на второй консоли top, показывал постоянную загрузку проца не меньше 80-ти процентов, а использование свопа за несколько минут с пары десятков килобайт выросло до почти 700-та метров. По времени всё это заняло около полутора часов на моей машине.
Обновляем её md5-хеш:
rm -f /mnt/mylivecd/knoppix/master/KNOPPIX/md5sums; find -type f -not -name md5sums -not -name boot.cat -not -name isolinux.bin -exec md5sum '{}' \; >> /mnt/mylivecd/knoppix/master/KNOPPIX/md5sums

И непосредственно создаём образ диска, ради которого всё и затевалось:
mkisofs -pad -l -r -J -v -V "KNOPPIX" -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o /mnt/mylivecd/knoppix/mylivecd.iso /mnt/mylivecd/knoppix/master

Вот и готов. Там же из-под LiveCD запускаю новоиспечённый образ с помощью, поставляемого с knoppix'ом qemu
# qemu -no-kqemu -boot d -cdrom /mnt/mylivecd/knoppix/mylivecd.iso

Ура! Стартует.
Не в силах больше ждать, записываю болванку, перегружаюсь и пытаюсь загрузиться уже на реальном компе. И тут сраз уже вижу, где просчитался. Всё грузится, как обычно, но вместо ожидаемого Hello, World! получаю ошибку о том, что в /home/knoppix никакого скрипта не найдено...
Поковырявшись и прогнав скрипты knoppix'а через bash -x понимаю, что править один из них и руками вписывать монтирование флешки - было опрометчиво. Но тут же меня осенило, что смонтировать можно с помощью тех же уровней загрузки(rc0, rc1 и т.д.).
Однако времени уже было 9 утра, потому перебирать заново образ почему-то стало лень. :)
Единственное, что сделал, это руками примонтировал флешку и посмотрел, как ведёт себя новоиспечённый LiveCD. Отлично! Кодеки на mp3/avi/и подобное подхватились. Софт, который я себе навыбирал работает отлично. Осталось только допилить внешний вид fluxbox, вписать в настройках пользователя нормальные шрифты и написать вменяемый скрипт для автостарта сети и подбрасывания конфига иксов. А так как этот скрипт находится на флешке, для изменений даже на уровне системы, мне уже не придётся каждый раз пересобирать весь образ LiveCD.

Комментариев нет:

Отправить комментарий