главная пошаговое создание livecd что такое linux ISO образы |
Операционная система с графическим интерфейсом |
Полезное
|
ДОБРО ПОЖАЛОВАТЬ
HOWTO Создание LiveCD с нуляВведение Из этого небольшого HOWTO вы узнаете как создать свой собственный LiveCD. Также это руководство предоставляет несколько преимуществ, помимо главной задачи: Собранные программы остаются в целостности, а не удаляются между циклами создания LiveCD. Это позволит вам выполнять синхронизацию, обновления, установку и изменять вашу среду точно также, как вы делаете в настоящей системе. Компакт-диск будет загружаться с помощью GRUB, а не ISOLINUX (ISOLINUX все еще возможен). Тем самым вы получите гибкость настоящей системы (изменение параметров ядра, обнаружение устройств и т. д.). Еще одна приятная особенность сохранения материала между сборками - огромная экономия во времени сборки. Если диск сделан правильно, то сможет загружаться с 32 Мб ОЗУ (мой LiveCD занимает 215 МБ и содержит возможность загрузки администативных утилит и загружается на всем, что можно представить). Все, что выделено зеленой рамкой - это скрипты, которые будут использоваться более одного раза (например, скрипты для сборки). Они также вероятно будут обновляться время от времени. Требования Вам потребуется некоторое количество места на винчестере. В зависимости от того, какие пакеты вы собираетесь включать в свой LiveCD, это количество может быть различным (большее количество пакетов увеличивает и размер). Я был сказал, что в среднем 4 Гб дискового пространства должно быть достаточно. Вы должны быть хорошо знакомы с процессом установки Gentoo из stage2, потому что это как раз то, что мы и собираемся делать в этом mini-HOWTO. Если вас терзают сомнения, почитайте Руководство Gentoo. Я также рекомендую иметь некоторые познания о работе Gentoo и Linux. В особенности потому, что кое-что из нового сборочного скрипта может быть опасным, если выполнять его неправильно. Конечно, можно выполнять установку и из stage1, но поскольку это занимает гораздо больше времени, чем установка из stage2, так делать не рекомендуется. Тем более, что большинcтво все равно выполняет что-то вроде emerge -e world.
Кернел оригинальной системы должен иметь поддержку Loopback устройств и ext2 файловой системы.
Установка окружения для сборки
Наше окружение для сборки - это всего лишь каталог, в который мы будем chroot'иться и устанавливать Gentoo (совсем как при инсталляции с обычного CD). Его содержимое впоследствии и перейдет на LiveCD. Я буду использовать для каталога имя 'source' и создам его в директории по имени livecd своего домашнего каталога.
Я в своем руководстве предполагаю, что вы создали каталог livecd в /root (ну, или каком-то другом домашнем каталоге), процесс сборки пройдет неудачно, если вы будете использовать другой каталог. Я обновляю сборочный скрипт время от времени, так что лучше всего будет следовать этому соглашению для безболезненного получения LiveCD. Для начала скачайте stage2 с одного из зеркал Gentoo в домашний каталог. Я использую stage2 для i686, так как это скорее всего будет работать на большинстве современных компьютеров. Скачав, распакуйте его в каталог source. Затем создайте каталог newroot, который понадобится нам в процессе начальной загрузки. Примечание: Для распаковки архива нужны права администратора иначе будут проблемы с созданием например «dev» каталога.
wget <<ваше любимое зеркало>>/releases/x86/current/stages/stage2-i686-2007.0.tar.bz2
mkdir newroot
Если вам понадобится скачивать пакеты во время установки, создайте в livecd/source/etc, файлы, необходимые для соединения с Интернетом. Например, не будет лишним resolv.conf.
Если ваша рабочая система имеет актуальный срез дерева portage, что в большинстве случаев так и есть, то можно его использовать и для наших целей. В этом случае можно пропустить следующий пункт перейдя к Установка Gentoo В исключительных случаях: скачивание среза дерева portage
Теперь скачиваем последний срез дерева portage в домашний каталог и распаковываем его в новую директорию для сборки.
Установка Gentoo Последующие шаги очень напоминают инсталляцию новой Gentoo-системы описанной в официальном руководстве.
Вот наши шаги установки:
Переход в новую среду (chroot)
Предлагаю автоматизировать этот процесс создав два скрипта. Первый будет лежать в ~/livecd и называться doChroot.
Впишите туда следующее:
Как вы наверно уже догодались, второй скрипт будет называтся ~/livecd/source/root/chroot_inside. По аналогии с первым создаём второй:
И вписываем туда:
Для перехода в новую среду нам теперь достаточно зайти в ~/livecd/ и выполнить наш первый скпипт.
Настройка Portage Поздравляю! Теперь вы в своей новой LiveCD-среде и мы можем начинать настройку Portage. Для начала выполните emerge --metadata обновив тем самым кеш Portage. Затем подправте /etc/make.conf. Вот некоторые особенности, касающиеся его изменения: Сознательно используйте переменные USE. Чем больше вы используете, тем более толстую систему вы получите. Система может оказаться такой большой, что просто не войдет на CD. Я использую только KDE, и меня не интересует ни документация, ни java, поэтому я спокойно добавляю: -gnome -gtk -java -doc
Для уменьшения размера системной библиотеки не забудьте отредактировать etc/locale.gen. Стоит так же проверить привильность выбранного профиля ls -FGg /etc/make.profile. Актуализация системы Для перехода со stage2 на stage3 необходимо выполнить emerge system или как советует автор английской версии этого HOWTO emerge -e system. В качестве более быстрого варианта можно использовать emerge -uDN system.
А теперь перед сборкой ядра и загрузчика давайте изменим некоторые важные файлы в /etc. В первую очередь /etc/fstab. Файл: /etc/fstab
Не забудьте добавить пустую строку в конец или начало файла, иначе LiveCD будет ругаться! Заметим, что мы монтируем корень на loopback-устройство с файловой системой типа squashfs, но об этом позже. Теперь можете изменить те файлы в /etc, которые считаете нужным (напр. hostname, rc.conf, conf.d/* и т.п.). Сборка ядра Пришло время собрать ядро. Я использую gentoo-sources(2.6). Мы также должны использовать squashfs в качестве корневой файловой системы. Так что наложите патч на ядро, если таковой еще не наложен (в настоящее время этот патч уже присутствует в gentoo-sources, так что накладывать его, скорее всего, не потребуется).
Первым делом ставим исходники кернела и genkernel для упрощения настройки и компиляции.
Если у Вас есть готовый конфиг, скопируйте его в /usr/src/linux и выполните
Теперь перейдём к компиляции genkernel_ом
При конфигурировании ядра не забудьте включить следующие опции:
Завершающий шаг состоит в установке и настройке загрузчика. Мы будем использовать GRUB, он поддерживает загрузку с диска.
Сразу же привожу /boot/grub/menu.lst, а более подробно мы его рассмотрим сразу после скрипта. Файл: /boot/grub/menu.lst
title=GeeZ-LiveCD
title=GeeZ-LiveCD NO-FB
title=Memtest86
title=Memtest86+
Предупреждение: Так как iso9660 не умеет обрабатывать символические ссылки, то убедитесь в том, что файл /boot/grub/menu.lst таковой не является. В случае необходимости удалите эту ссылку и, создав обычный файл, скопируйте в него содержимое grub.conf. В противном случае вы не получите меню, а GRUB просто вывалится в командную строку! (Осознание этого факта стоило мне нескольких часов, вы дожны использовать menu.lst в качестве конфигруационного файла). Ограничение можно обойти, если создавать образ с помощью mkisofs добавить ключик -f При желании вы можете отказаться от параметра 'video', однако остальные параметры обязательны.
Чтобы 'cdroot'-параметер правильно обрабатывался Gentoo-Init-скриптами надо проинсталировать livecd-tools
Инсталляция желаемых пакетов emerge <пакеты, которые вам нужны, например logger hotplug udev>
Сборка LiveCD
Сборка LiveCD включает в себя следующие шаги:
Создание целевого каталога, который будет использоваться для создания iso образа Сохранение каталогов, предназначенных для чтения и записи (таких как /etc и /var) в целевой каталог (?) (Save the read-write directories (like /etc and /var) using tar to target). Преобразование исходного дерева каталогов в сжатый образ с использованием squashfs tools. Создание iso-образа.
Для того, чтобы проще было автоматизировать эти шаги, создайте простой скрипт сборки внутри ~/livecd
Вот этот скрипт Файл: Создание LiveCD в каталоге ~/livecd/
rm -rf ${TARGET}
cd ${TARGET}/files
cd ${TARGET_SOURCE}
cd ${TARGET}/files
Также создайте файл before-build в вашем каталоге source:
slocate -u
for x in $(cat info);
С помощью команд emerge fuse и dmraid убеждаемся, что не забыли собрать эти модули при обновлении ядра. Для обоих файлов выставьте флаг "исполняемый", и читайте предупреждение. Если вы не проверите успешность перехода в chroot-окружение каталога ~/target/files/source и запустите скрипт, то он может РАЗРУШИТЬ всю систему! Сжимание большого каталога source займет некоторые время, так что проявите терпение. Как только все будет готово, просто запишите получившийся iso-образ, загрузитесь с него и наслаждайтесь :) Советы
Я использую простой скрипт для выполнения chroot в каталог сборки, когда я мне требуется синхронизировать дерево портежей, установить новые пакеты, что-нибудь настроить. Я назвал его work.
Вот этот скрипт: Файл: Скрипт, автоматизирующий монтирование и переход в каталог
Не забудьте после выполнения этого скрипта выполнить вручную в новом окружении
Так как простой bash-скрипт не может выполнять команды в новом окружении, но выполняет размонтирование, запустите env-update и source /etc/profile после того, как вы покинули окружение. Монтирование /dev важно для того, чтобы, например, иксы могли работать в новом окружении. Пришло время обсудить размер вашего исходника для сборки. Нетрудно заметить, что есть кое-что, что занимает много места, однако совсем не нужно на LiveCD. Самые первые кандидаты - это каталоги /usr/src и /usr/portage. Если вы не желаете включать их в LiveCD, не удаляйте их, а лучше используйте опции в mksquashfs, для того, чтобы исключить каталоги из сжатого образа. Так вы оставите свои исходники для сборки нетронутыми. Если загрузка CD завершилась неудачей на каком-либо этапе во время выполнения скрипта linuxrc, вы всегда можете изменить строку загрузки grub на init=/bin/sh вместо linuxrc. Так при загрузке вы получите удобный shell внутри образа initrd. Оттуда вы можете набирать команды linuxrc вручную и таким образом попытаться выяснить, где и по какой причине произошел сбой. Кажется, я ничего не пропустил, и надеюсь, что это HOWTO оказалось для вас полезным. Всегда рад принять вашим исправления и отзывы. Вы можете найти все скрипты на моем сайте: work, before-build и build. Автоматическое монтирование существующих разделов
Я написал скрипт автомонтирования, который проверяет, какие разделы доступны, а затем пытается их подмонтировать. И он представляет собой нечто большее, чем тупой цикл.
Я (MooSE) для своего LiveCD использовал свой скрипт автоматического монтирования разделов: Файл: /etc/init.d/automounter
Он не использует captive-ntfs и поэтому монтирует NTFS разделы в режиме read-only. Однако мне этого было вполне достаточно. К тому же он оказался заметно проще приведённого выше. Автоматический вход в систему
Сначала установите mingetty. Затем подправьте /etc/inittab на компакт-диске (не забудьте сделать резервную копию). Найдите следующее: Файл: /etc/inittab
замените на
чтобы в любой консоли автоматически входить под root'ом. Если вы получаете "Session opened for ....." при загрузке компакт-диска, установите демон логов и добавьте его в запуск при загрузке. Оптимизация процесса загрузки Исправьте /etc/init.d/modules так, чтобы он не пытался обновлять зависимости модулей при каждой загрузке.
Измените: Файл: /etc/init.d/modules
Теперь команда modules-update будет запускаться только, если она действительно необходима (то есть когда вы производите изменения в системе). Вам нужно запускать modules-update в новом (chrooted) окружении всякий раз при обновлении ядра. Также измените /etc/init.d/bootmisc; Замените: Файл: /etc/init.d/bootmisc if [ -x /sbin/env-update.sh ] then ebegin "Updating environment" /sbin/env-update.sh >/dev/null eend 0 fi на: if [ -x /sbin/env-update.sh ] then if [ /etc/env.d -nt /etc/profile.env ] then ebegin "Updating environment" /sbin/env-update.sh >/dev/null eend 0 else einfo "Environment up-to-date" fi fi В результате env-update будет запускаться тоже только в случае, если этот запуск действительно необходим (то есть опять же только в том случае, если вы поизводите изменения в системе). Еще один хитрый трюк: измените /etc/conf.d/rc: Замените RC_PARALLEL_STARTUP="no" на RC_PARALLEL_STARTUP="yes" Это приведет к тому, что все сервисы будут запускаться одновременно, а не последовательно. Некоторые говорят, что это пока не приносит пользы, однако это выглядит круто, и может быть когда-нибудь окажется нужным. Но, когда испльзуется autoconfig из livecd, то это может привести к разрушению загрузочной последовательности. Проверка/Изменение Initramfs Если вы хотите отредактировать или проверить сгенерированный initramfs, то можно проделать что-нибудь подобное. initramfs source /usr/share/genkernel/pkg/${ARCH}/cpio
или
Initrd:
=== USB Stick drive === (evildick 2005-08-09)
#!/bin/bash LIVECD=~/livecd TARGET=${LIVECD}/target TARGET_SOURCE=${TARGET}/files/source/ SOURCE=${LIVECD}/source #USB settings USBDEV=/dev/sda MNTDIR=/mnt/usbstick #USB echo "Warning!!! You are about to reformat your usb device on ${USBDEV}!!!" echo "The following partitions will be overwritten:" sfdisk -l ${USBDEV} echo "Are you certain that this is what you intend?" echo "Press enter to continue or CTRL-C to quit." read user_reply echo "Please wait, preparing usb device . . ." dd if=/dev/zero of=${USBDEV} sfdisk -q ${USBDEV} << EOF 0,,L,* ; ; ; EOF mke2fs -m0 ${USBDEV}1 mkdir ${MNTDIR} mount ${USBDEV}1 ${MNTDIR} echo "Copying files to USB device . . ." cp -p -R -P -d ${TARGET}/* ${MNTDIR} echo "Modifying ${MNTDEV}/boot/grub/menu.lst . . ." sed 's/(cd)/(hd0,0)/g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/menu.lst # This may need to be changed to replace the cdroot with something better, like usbroot? #sed 's/cdroot//g' ${MNTDIR}/boot/grub/menu.lst > ${MNTDIR}/boot/grub/menu.lst-tmp && mv ${MNTDIR}/boot/grub/menu.lst-tmp ${MNTDIR}/boot/grub/menu.lst echo "Installing Grub . . ." grub-install --root-directory=${MNTDIR} ${USBDEV} --recheck echo "Unmounting ${MNTDIR} . . ." umount ${MNTDIR} echo "Your bootable USB drive should be complete." Загрузочное сообщение после init Я хотел добавить свое сообщение под сообщением об авторских правах после init. Пожалуйста, сохраните предупреждение об авторских правах (как это сделал я)! Благодаря этому процесс загрузки будет выглядеть более профессиональным. Чтобы отредактировать это сообщение, просто откройте /sbin/rc вашим любимым редактором. Найдите строку "Copyright 1999-2005 Gentoo Foundation" и добавьте под ним ваше собственное сообщение. Время последнего обновления и остальное --GieltjE 07:25, 7 Aug 2005 (GMT) Я бы хотел поблагодарить veezi за проделанную им большую работу и за начало обсуждения этого вопроса на официальных форумах Gentoo. Также выражаю благодарность создателям документа Flying with gentoo, откуда я бессовестно стащил некоторые уловки. |
LiveCD.SU |