Создание Linux: создаём загрузочный Linux LiveCD

Несмотря на то, что загрузочных Linux дистрибутивов развелось огромное количество, так или иначе хочется создать Linux для личных нужд и конкретных целей. Способов для создания загрузочных дистрибутивов Linux имеется много, от LFS до Knoppix Customisation Kit. Но "мы пойдём другим путём"и будем создавать загрузочный Linux на основе собственного дистрибутива и с минимальными трудозатратами. Ниже описываются шаги на примере Debian GNU/Linux и live-scripts.


Необходимые приготовления для создания загрузочного Linux
Для начала нужно скачать скрипты для создания загрузочного диска Linux отсюда. Желательно так же скачать и ядро, которое уже подготовлено для работы - и если вы не гонитесь за какими-то рекордами. Можно собрать и собственное ядро, но его придётся не раз пропатчить...

Далее нужна уже установленная система. Можно создать загрузочный Linux диск на основе той системы, которая есть, но я поставил отдельно Дебиан в эмуляторе QEMU и установил там только те приложения, которые нужны.


Настраиваем систему
Для этого монтируем файл-образ с установленной и настроенной системой на петлевое устройство и затаскиваем туда необходимые скрипты и ядро (от рута):

mount -t ext3 debianEtch40Xorg71Xwm.img /cdrom -o loop,offset=32256
cp linux-2.6.21.5-i486-1.tgz /cdrom/root
umount /cdrom

Распаковываем архив с ядром, перемещаем получившиеся файлы в соответствующие директории (загрузочный образ в /boot, модули - в /lib/modules, утилиты squashfs в /usr/bin). Всё это делается от рута. Далее генерируем образ initrd:
mkinitramfs -o /boot/initrd.img-2.6.21.5 2.6.21.5
Версия ядра может измениться, так что команду нужно будет поправить. Заменяем дистрибутивное ядро новым, изменяем grub.list, обновляем загрузчик update-grub - это сэкономит нам ещё около 60 Мб.
Загружаем эмулятор вместе с файлом-образом получившейся системы, тестируем, пробуем.
qemu -kernel-kqemu -hda debianEtch40Xorg71Xwm.img
Настраиваем виртуальный дистрибутив под наши задачи, устанавливая нужные пакеты и удаляя лишние. Лично у меня есть некий базовый дистрибутив в сжатом виде, как образ QEMU, и в зависимости от задач я меняю состав его программ.

Обязательно проверьте, установлен ли mkisofs - иначе создать живой CD не удастся и вы (забегая вперёд) получите сообщение:

# /tmp/live_data_2865/virenslinux/make_iso.sh
Target ISO file name [ Hit enter for /linux-live-6.1.4.iso ]: virenslive.iso
/tmp/live_data_2865/virenslinux/make_iso.sh: line 25: mkisofs: command not found


Если mkisofs есть, переходим дальше.


Создание загрузочного диска Linux
Снова монтируем файл-образ настроенной системы на петлю:
mount -t ext3 debianEtch40Xorg71Xwm.img /cdrom -o loop,offset=32256
Теперь согласно руководству, копируем в /cdrom/temp (куда прикручена система для liveCD) скрипты для создания диска. Скрипты будут работать только от рута, так что можно немножко покрасноглазить :-)

Настраиваем скрипты, для чего заходим в каталог /linux-live-версия на прикрученной системе и редактируем файл .config
В нём можно изменить название LIVECDNAME на то, которое больше нравится, и главное - изменить KERNEL на то, которое установлено в той системе (здесь это 2.6.21.5). Таким образом, строка будет выглядеть:
KERNEL=2.6.21.5
Сделайте это, иначе на следующем шаге скрипт ядро не найдёт.


Генерация файлов живого диска
Теперь переходим к точке монтирования нашей новой системы
cd /cdrom
и входим в неё:
chroot /cdrom
Теперь все действия будут выполняться рутом относительно той системы, а не в которой вы работаете. Переходим в каталог со скриптами:
cd /tmp/linux-live-6.1.4/
и даём команду собрать образ:
./build
Для того, чтобы всё прошло успешно, в ядре обязательно должна быть включена поддержка ext2, иначе при сборке всё закончится ошибкой.

Changing current directory to /tmp/linux-live-6.1.4
Name of your live distro [hit enter for virensLinux]:
Linux Live scripts were installed successfuly in /
Enter path for the kernel you'd like to use [hit enter for /boot/vmlinuz]:
Creating LiveCD from your Linux
some debug information can be found in /tmp/linux-live-debug.log
copying cd-root to /tmp/live_data_9345, using kernel from /boot/vmlinuz
creating initrd image...
Using kernel modules from /lib/modules/2.6.21.5
mount: /dev/loop6 has wrong device number or fs type ext2 not supported
Error mounting initrd! Not enough free loop devices?

Если всё на месте, отвечаем на несколько вопросов, и видим процесс генерации:

notebeast:/tmp/linux-live-6.1.4# ./build
Changing current directory to /tmp/linux-live-6.1.4
Name of your live distro [hit enter for virenslinux]:
Linux Live scripts were installed successfuly in /
Enter path for the kernel you'd like to use [hit enter for /boot/vmlinuz]:
Creating LiveCD from your Linux
some debug information can be found in /tmp/linux-live-debug.log
copying cd-root to /tmp/live_data_2865, using kernel from /boot/vmlinuz
creating initrd image...
Using kernel modules from /lib/modules/2.6.21.5
creating compressed images...
base/bin.lzm ...
[========================================================= ] 100/112 89%
base/etc.lzm ...
[================================================================] 709/709 100%
base/home.lzm ...
[==================================================================] 37/37 100%
base/lib.lzm ...
[==============================================================] 2161/2161 100%
base/opt.lzm ...

base/root.lzm ...
[====================================================================] 7/7 100%
base/usr.lzm ...
[========================================================== ] 21934/22313 98%
base/sbin.lzm ...
[========================================================= ] 95/106 89%
base/srv.lzm ...

base/var.lzm ...
[==============================================================] 2100/2100 100%
--------done----------

* run /tmp/live_data_2865/virenslinux/make_iso.bat to create ISO image
* or copy content of /tmp/live_data_2865 to your USB device
and run ./boot/bootinst.sh (from the device!) to setup boot sector

Now press Enter...


За это время можно выпить чашечку кофе, или принять ванну (в зависимости от мощи процессора). У меня это отнимает около 10 минут. После этого нужно создать ISO-образ нашего загрузочного живого пингвина.


Создание загрузочного Linux LiveCD
Осталось последнее - создать ISO образ живого диска и пропалить его на болванку. Для этого переходим в каталог, куда скрипты утоптали пингвина и выполняем:
notebeast:/tmp/live_data_16804/virensLinux# ./make_iso.sh
После этого поползут диагностические строчки, и пойдёт процесс компоновки диска:
Target ISO file name [ Hit enter for /tmp/virensLinux.iso ]:
genisoimage 1.1.2 (Linux)
Scanning ../.
Scanning .././virensLinux
Scanning .././virensLinux/rootcopy
Scanning .././virensLinux/tools
Scanning .././virensLinux/tools/WIN
Scanning .././virensLinux/modules
Scanning .././virensLinux/optional
Scanning .././virensLinux/base
Scanning .././boot
Scanning .././boot/dos
Scanning .././boot/isolinux
Scanning .././boot/syslinux
Writing: Initial Padblock Start Block 0
Done with: Initial Padblock Block(s) 16
Writing: Primary Volume Descriptor Start Block 16
Done with: Primary Volume Descriptor Block(s) 1
Writing: Eltorito Volume Descriptor Start Block 17
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor Block(s) 1
Writing: Joliet Volume Descriptor Start Block 18
Done with: Joliet Volume Descriptor Block(s) 1
Writing: End Volume Descriptor Start Block 19
Done with: End Volume Descriptor Block(s) 1
Writing: Version block Start Block 20
Done with: Version block Block(s) 1
Writing: Path table Start Block 21
Done with: Path table Block(s) 4
Writing: Joliet path table Start Block 25
Done with: Joliet path table Block(s) 4
Writing: Directory tree Start Block 29
Done with: Directory tree Block(s) 12
Writing: Joliet directory tree Start Block 41
Done with: Joliet directory tree Block(s) 12
Writing: Directory tree cleanup Start Block 53
Done with: Directory tree cleanup Block(s) 0
Writing: Extension record Start Block 53
Done with: Extension record Block(s) 1
Writing: The File(s) Start Block 54
6.43% done, estimate finish Sat Aug 11 10:00:37 2007
12.85% done, estimate finish Sat Aug 11 10:00:37 2007
19.27% done, estimate finish Sat Aug 11 10:00:32 2007
25.70% done, estimate finish Sat Aug 11 10:00:41 2007
32.11% done, estimate finish Sat Aug 11 10:00:43 2007
38.54% done, estimate finish Sat Aug 11 10:00:45 2007
44.95% done, estimate finish Sat Aug 11 10:00:46 2007
51.39% done, estimate finish Sat Aug 11 10:00:47 2007
57.80% done, estimate finish Sat Aug 11 10:00:47 2007
64.23% done, estimate finish Sat Aug 11 10:00:48 2007
70.64% done, estimate finish Sat Aug 11 10:00:48 2007
77.07% done, estimate finish Sat Aug 11 10:00:47 2007
83.49% done, estimate finish Sat Aug 11 10:00:48 2007
89.92% done, estimate finish Sat Aug 11 10:00:48 2007
96.34% done, estimate finish Sat Aug 11 10:00:48 2007
Total translation table size: 2048
Total rockridge attributes bytes: 6393
Total directory bytes: 22528
Path table size(bytes): 168
Done with: The File(s) Block(s) 77653
Writing: Ending Padblock Start Block 77707
Done with: Ending Padblock Block(s) 150
Max brk space used 0
77857 extents written (152 MB)


Готово, будет создан (в моём случае) файл virensLinux.iso, который является загрузочным диском. Проверяю в QEMU:
qemu -cdrom virensLinux.iso
Работает! Вот, например, что в итоге получилось у меня:



Простой и строгий IceWM с одной из тем по умолчанию (Infadel2). Простенько, но со вкусом. Правда, при загрузке оно пишет Slax, но это уже другая история.
Теперь ISO-образ пропаливаем на болванку любимой программой прожига, и радуемся.


Ссылки
Собственно, это есть расширенное руководство к скриптам отсюда, на которых, в частности, создаётся Slax. Документация в комплекте к скриптам страдает отчаянным лаконизмом, и я решил это исправить.
Море ссылок на аналогичные ресурсы можно найти там, сям и тут. Так же опытом в живом дистростроительстве делится мой коллега здесь. Некоторые говорят, что нечто подобное (live-package) есть в Debian, но я пока не пробовал.
Мысли, трюки и собственные впечатления в комментариях приветствуются.

17 комментариев: |высказаться!| RSS-лента дискуссии.|
Tigro комментирует...

А для Ubuntu есть какой-то пакет, забыл какой, для создания подобных вещей. В Fedora есть Revisor, который создает кастомные дистрибутивы для оптических дисков, USB брелоков и просто установочные образа.

Aleksandr комментирует...

когда задался такой задачей перепробовал множество всяких путей, остановился на вот таком: http://livebackup.sourceforge.net/
у меня просто была необходимость использовать родное убунтовское ядро - а пересобирать ой как не хотелось

AKbara комментирует...

>Некоторые говорят, что нечто подобное (live-package) есть в Дебиане, но я пока не пробовал.

True-линуксоид: зачем использовать стандартные утилиты из репозиториев, если можно поизвращаться самому.

virens комментирует...

2 Tigro пишет...
А для Ubuntu есть какой-то пакет, забыл какой, для создания подобных вещей.
Приведённый здесь способ сладок тем, что ему плевать на дистрибутив. Дебиан, Убунта, Слака, Гента... что угодно.

2 Aleksandr пишет...
когда задался такой задачей перепробовал множество всяких путей, остановился на вот таком: http://livebackup.sourceforge.net/
Тоже вариант, просто этот бэкапами не ограничивается.

2 AKbara пишет...
True-линуксоид: зачем использовать стандартные утилиты из репозиториев, если можно поизвращаться самому.
Не так: зачем использовать кривые недоделанные и недо-документированные поделия из дистрибутива, когда есть хороший и простой проект, позволяющий сделать тоже, но быстрее.

Aleksandr комментирует...

мой вариант не ограничен бэкапами - я как раз создавал live-cd для восстановления данных с поддержкой шифрованных разделов - благодаря поддержке юнионфс можно настроить инет соединение и поставить необходимые пакеты как-бы в этот лайфсд ;)

Vyazovoi комментирует...

Думаю уместно будет дать такой линк:

http://iportnov.blogspot.com/2007/05/livecd.html

virens комментирует...

2 Aleksandr пишет...
мой вариант не ограничен бэкапами - я как раз создавал live-cd для восстановления данных с поддержкой шифрованных разделов
Занятно. Обязательно посмотрю на этот проект.

2 Vyazovoi пишет...
Думаю уместно будет дать такой линк:
Определённо - как же я мог забыть!?. Поправил. Спасибо.

энерджи комментирует...

Потрясающе! Вот разберусь с делами и буду экспериментировать) А-то сейчас даже на блог времени нету *(

Анонимный комментирует...

Пипл - кто нибудь может ткнуть или написать доступным языком как поставить Юбунту на флешку чтоб грузилось ?
Был бы несказанно рад.

Анонимный комментирует...

Если говорить о лив дисках в контексте Debian, то можно посмотреть вот сюда

denvist комментирует...

кто-то спрашивал про про установку на USB
Гугль рулит непадецки =)
http://pendrivelinux.com/

virens комментирует...

2 энерджи пишет...
Потрясающе! Вот разберусь с делами и буду экспериментировать)
Мне тут кстати подсобил мой созданный LiveCD - помог восстановить и отчистить от червей и вирусни чахлую виндовую машину на работе. Думаю её перетащить в лабораторию под роутер :-)

2 Анонимный пишет...
Пипл - кто нибудь может ткнуть или написать доступным языком как поставить Юбунту на флешку чтоб грузилось?
В тех же ливскриптах это есть. Просто пост ещё не готов про это.

2 Анонимный пишет...
Если говорить о лив дисках в контексте Debian, то можно посмотреть вот сюда
О! Большое спасибо! Кстати, эта заметка в вики так и не вылезла мне при гуглеже по теме.

2 denvist пишет...
кто-то спрашивал про про установку на USB
Гугль рулит непадецки =)

Несомненно, но там предлагают скачать уже готовый образ, а тут можно залудить свой.

Belen комментирует...

Вот и я озадачился живым Debian'ом... использовал live-helper из Lenny ( http://linuz.pp.ru/readarticle.php?article_id=22 )

magerlab комментирует...

если не останавливаться только на дебиане, можно скачать puppy linux ( 95 мб в последней версии), добавить по вкусу программ, локализовать(или дождаться выхода локализованной версии puppyRUS) и просто запустить программу установки на usb или cd

virens комментирует...

2 Belen пишет...

Вот и я озадачился живым Debian'ом... использовал live-helper из Lenny
Тоже мысль. У меня просто Этч, поэтому я его не использую. И вообще, эти скрипты мне понравились своей простотой - накидал в эмуляторе нужных программ, и вперёд.

2 magerlab пишет...
если не останавливаться только на дебиане
Да никто и не останавливается. Читайте пост внимательнее - там говорится о том, что этими скриптами сгенерировать можно что угодно. Пример с дебианом объясняется тем, что я им пользуюсь.

можно скачать puppy linux ( 95 мб в последней версии), добавить по вкусу программ, локализовать
Ээээ.. батенька... проблемы с локализацией - это прошлый век. Их быть не должно в принципе. В установленном Дебиане русский из коробки всюду и без косяков.

и просто запустить программу установки на usb или cd
Способ, конечно, неплох, но на любителя. Здесь смак в том, что изваять можно дистр хоть из дебиана, хоть из слаки или генты - да из чего угодно.

Scyphius комментирует...

Возможно, вопрос немного не по теме, но все же - возможно с помощью qemu эмулировать работу процессоров иного производителя, нежели имеющееся в наличии, если конкретнее - есть потребность в создании LiveCD для компьютера на базе AMD, а в наличии только компьтер на базе Intel.

kakawkin комментирует...

Не понял, а нельзя создать с минимальным набором пакетов ?
Если можно то нету списка какие пакеты можно удалить из образа этого ?

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

Подписаться на RSS-ленту комментариев к этому посту.