главная пошаговое создание 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 файловой системы.
Так же не помешают следующие пакеты:
app-cdr/cdrtools
sys-fs/e2fsprogs
sys-fs/squashfs-tools

Установка окружения для сборки

Наше окружение для сборки - это всего лишь каталог, в который мы будем chroot'иться и устанавливать Gentoo (совсем как при инсталляции с обычного CD). Его содержимое впоследствии и перейдет на LiveCD. Я буду использовать для каталога имя 'source' и создам его в директории по имени livecd своего домашнего каталога.
cd
mkdir -p livecd/source

Я в своем руководстве предполагаю, что вы создали каталог livecd в /root (ну, или каком-то другом домашнем каталоге), процесс сборки пройдет неудачно, если вы будете использовать другой каталог. Я обновляю сборочный скрипт время от времени, так что лучше всего будет следовать этому соглашению для безболезненного получения LiveCD.

Для начала скачайте stage2 с одного из зеркал Gentoo в домашний каталог. Я использую stage2 для i686, так как это скорее всего будет работать на большинстве современных компьютеров. Скачав, распакуйте его в каталог source. Затем создайте каталог newroot, который понадобится нам в процессе начальной загрузки. Примечание: Для распаковки архива нужны права администратора иначе будут проблемы с созданием например «dev» каталога.

wget <<ваше любимое зеркало>>/releases/x86/current/stages/stage2-i686-2007.0.tar.bz2
cd livecd/source
tar jxvpf ~/stage2-i686-2007.0.tar.bz2

mkdir newroot

Если вам понадобится скачивать пакеты во время установки, создайте в livecd/source/etc, файлы, необходимые для соединения с Интернетом. Например, не будет лишним resolv.conf.
cp -L /etc/resolv.conf etc/resolv.conf

Если ваша рабочая система имеет актуальный срез дерева portage, что в большинстве случаев так и есть, то можно его использовать и для наших целей. В этом случае можно пропустить следующий пункт перейдя к Установка Gentoo

В исключительных случаях: скачивание среза дерева portage

Теперь скачиваем последний срез дерева portage в домашний каталог и распаковываем его в новую директорию для сборки.
cd usr/
wget <<ваше любимое зеркало>>/snapshots/portage-latest.tar.bz2
tar jxvf portage-latest.tar.bz2
rm portage-latest.tar.bz2

Установка Gentoo

Последующие шаги очень напоминают инсталляцию новой Gentoo-системы описанной в официальном руководстве.

Вот наши шаги установки:
Переход в новую среду (chroot)
Настройка Portage
Актуализация системы
Сборка ядра
Инсталляция желаемых пакетов

Переход в новую среду (chroot)

Предлагаю автоматизировать этот процесс создав два скрипта. Первый будет лежать в ~/livecd и называться doChroot.
cd ~/livecd/
touch doChroot
chmod +x doChroot

Впишите туда следующее:
#!/bin/sh
# Монтируем необходимое
mount -o bind /proc source/proc
mount -o bind /dev source/dev
# Для тех кто использует системный portage
mount -o bind /usr/portage source/usr/portage
# Chroot
chroot source/ /root/chroot_inside
# Восстанавливаем исходное состояние
umount source/proc
umount source/dev
umount source/usr/portage

Как вы наверно уже догодались, второй скрипт будет называтся ~/livecd/source/root/chroot_inside. По аналогии с первым создаём второй:
cd source/root/
touch chroot_inside
chmod +x chroot_inside

И вписываем туда:
env-update

source /etc/profile
/bin/bash

Для перехода в новую среду нам теперь достаточно зайти в ~/livecd/ и выполнить наш первый скпипт.
cd ~/livecd/
./doChroot

Настройка Portage

Поздравляю! Теперь вы в своей новой LiveCD-среде и мы можем начинать настройку Portage.

Для начала выполните emerge --metadata обновив тем самым кеш Portage. Затем подправте /etc/make.conf. Вот некоторые особенности, касающиеся его изменения:

Сознательно используйте переменные USE. Чем больше вы используете, тем более толстую систему вы получите. Система может оказаться такой большой, что просто не войдет на CD. Я использую только KDE, и меня не интересует ни документация, ни java, поэтому я спокойно добавляю: -gnome -gtk -java -doc
Не забудьте использовать livecd в USE. Этот параметр передается ядру вместе с 'cdroot' во время загрузки, заставляя init-скрипты учитывать факт загрузки с CDROM, и пропускать такие неуместные вещи, как проверка корневой системы.
Так же полезным является флаг minimal

Для уменьшения размера системной библиотеки не забудьте отредактировать etc/locale.gen. Стоит так же проверить привильность выбранного профиля ls -FGg /etc/make.profile.

Актуализация системы

Для перехода со stage2 на stage3 необходимо выполнить emerge system или как советует автор английской версии этого HOWTO emerge -e system. В качестве более быстрого варианта можно использовать emerge -uDN system.

А теперь перед сборкой ядра и загрузчика давайте изменим некоторые важные файлы в /etc. В первую очередь /etc/fstab. Файл: /etc/fstab
/dev/loop0 / squashfs ro,defaults 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
none /dev/pts devpts defaults 0 0

Не забудьте добавить пустую строку в конец или начало файла, иначе LiveCD будет ругаться!

Заметим, что мы монтируем корень на loopback-устройство с файловой системой типа squashfs, но об этом позже. Теперь можете изменить те файлы в /etc, которые считаете нужным (напр. hostname, rc.conf, conf.d/* и т.п.).

Сборка ядра

Пришло время собрать ядро. Я использую gentoo-sources(2.6). Мы также должны использовать squashfs в качестве корневой файловой системы. Так что наложите патч на ядро, если таковой еще не наложен (в настоящее время этот патч уже присутствует в gentoo-sources, так что накладывать его, скорее всего, не потребуется).

Первым делом ставим исходники кернела и genkernel для упрощения настройки и компиляции.
emerge gentoo-sources genkernel
cd /usr/src/linux

Если у Вас есть готовый конфиг, скопируйте его в /usr/src/linux и выполните
make oldconfig

Теперь перейдём к компиляции genkernel_ом
genkernel --menuconfig --no-clean --no-mrproper --no-splash --install --no-mountboot all

При конфигурировании ядра не забудьте включить следующие опции:
ФС squashfs (File Systems > Misc Filesystems)
ФС iso9660 для cdrom
Поддержку initrd, установите размер в 8 Мб (Devices > Block Devices > Ram Disk, Initrd)
Поддержку loopback block device (там же)
Поддержку IDE/ATAPI cdrom device
Поддержку ФС ext2 (которую мы будем использовать для образа initrd), (включение поддержки большинства систем может оказаться хорошей идеей, если вы делаете вроде спасательного диска - так они всегда будут под рукой).
Поддержку ФС tmpfs (File Systems > Pseudo Filesystems > Virtual memory file system support)

Завершающий шаг состоит в установке и настройке загрузчика. Мы будем использовать GRUB, он поддерживает загрузку с диска.
emerge grub

Сразу же привожу /boot/grub/menu.lst, а более подробно мы его рассмотрим сразу после скрипта. Файл: /boot/grub/menu.lst
default 0
timeout 30
splashimage=(cd)/boot/grub/robin.xpm.gz

title=GeeZ-LiveCD
root (cd)
kernel (cd)/boot/gee vga=788 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot dodmraid
initrd (cd)/boot/initrd

title=GeeZ-LiveCD NO-FB
root (cd)
kernel (cd)/boot/gee root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot dodmraid
initrd (cd)/boot/initrd

title=Memtest86
root (cd)
kernel (cd)/boot/memtest86/memtest.bin

title=Memtest86+
root (cd)
kernel (cd)/boot/memtest86plus/memtest.bin

Предупреждение: Так как iso9660 не умеет обрабатывать символические ссылки, то убедитесь в том, что файл /boot/grub/menu.lst таковой не является. В случае необходимости удалите эту ссылку и, создав обычный файл, скопируйте в него содержимое grub.conf. В противном случае вы не получите меню, а GRUB просто вывалится в командную строку! (Осознание этого факта стоило мне нескольких часов, вы дожны использовать menu.lst в качестве конфигруационного файла).

Ограничение можно обойти, если создавать образ с помощью mkisofs добавить ключик -f

При желании вы можете отказаться от параметра 'video', однако остальные параметры обязательны.

Чтобы 'cdroot'-параметер правильно обрабатывался Gentoo-Init-скриптами надо проинсталировать livecd-tools
USE="-opengl" emerge livecd-tools

Инсталляция желаемых пакетов emerge <пакеты, которые вам нужны, например logger hotplug udev>
rc-update add <требуемые сервисы, например hotplug, net.eth0, sysklogd> default <или boot, если нужно>
emerge <Рекомендуемые необязательные пакеты sys-fs/dmraid и slocate, они будут использоваться в последующих скриптах. Возможно, вам понадобится добавить их в /etc/portage/package.keywords>
emerge <Любые необязательные пакеты на ваш вкус, например kde, mc>

Сборка LiveCD

Сборка LiveCD включает в себя следующие шаги:
Очистка ненужных каталогов в исходном дереве(таких как /tmp и /var/tmp)

Создание целевого каталога, который будет использоваться для создания iso образа

Сохранение каталогов, предназначенных для чтения и записи (таких как /etc и /var) в целевой каталог (?) (Save the read-write directories (like /etc and /var) using tar to target).

Преобразование исходного дерева каталогов в сжатый образ с использованием squashfs tools.

Создание iso-образа.

Для того, чтобы проще было автоматизировать эти шаги, создайте простой скрипт сборки внутри ~/livecd
cd livecd
touch build
chmod +x build

Вот этот скрипт Файл: Создание LiveCD в каталоге ~/livecd/
#!/bin/bash
LIVECD=~/livecd
TARGET=${LIVECD}/target
TARGET_SOURCE=${TARGET}/files/source/
SOURCE=${LIVECD}/source

rm -rf ${TARGET}
mkdir ${TARGET}
cp -a ${SOURCE}/boot ${TARGET}/
mkdir -p ${TARGET}/files/source
cp -p -R -P -d ${SOURCE}/ ${TARGET}/files

cd ${TARGET}/files
mount -o bind /sys ${TARGET_SOURCE}/sys
mount -o bind /dev ${TARGET_SOURCE}/dev
mount -o bind /proc ${TARGET_SOURCE}/proc
mount -o bind /usr/portage ${TARGET_SOURCE}/usr/portage
echo "Сейчас выполните ./before-build, но сначала УБЕДИТЕСЬ, что вы правильно выполнили команду chroot на livecd ${TARGET_SOURCE} каталог"
chroot ${TARGET_SOURCE}/ /bin/bash --login
umount ${TARGET_SOURCE}/sys
umount ${TARGET_SOURCE}/dev
umount ${TARGET_SOURCE}/proc
umount ${TARGET_SOURCE}/usr/portage
env-update
source /etc/profile

cd ${TARGET_SOURCE}
rm -rf var/tmp/*
rm -rf var/run/*
rm -rf var/lock/*
rm -rf var/cache/*
rm -rf var/db
rm -rf tmp/*
rm -f etc/mtab
touch etc/mtab
rm -rf usr/portage
rm -rf etc/portage
rm -rf usr/share/doc
rm root/.bash_history
rm root/.zcompdump
rm -rf var/log
mkdir var/log
rm etc/make.profile
rm before-build
rm -rf usr/src/
rm -rf boot
rm info

cd ${TARGET}/files
mksquashfs source/ ${TARGET}/livecd.squashfs
cd ${TARGET}
touch livecd
rm -rf ${TARGET}/files/
cd ${LIVECD}
mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 4 -hide boot.catalog -o ${LIVECD}.iso ${TARGET}/

Также создайте файл before-build в вашем каталоге source:
cd livecd/source
touch before-build
chmod +x before-buildФайл: ~/livecd/source/before-build
env-update
/sbin/depscan.sh
modules-update
localepurge
emerge sys-fs/fuse dmraid
emerge unmerge localepurge genkernel

slocate -u
slocate .keep > info

for x in $(cat info);
do
rm ${x}
done

С помощью команд emerge fuse и dmraid убеждаемся, что не забыли собрать эти модули при обновлении ядра.

Для обоих файлов выставьте флаг "исполняемый", и читайте предупреждение. Если вы не проверите успешность перехода в chroot-окружение каталога ~/target/files/source и запустите скрипт, то он может РАЗРУШИТЬ всю систему!

Сжимание большого каталога source займет некоторые время, так что проявите терпение. Как только все будет готово, просто запишите получившийся iso-образ, загрузитесь с него и наслаждайтесь :)

Советы

Я использую простой скрипт для выполнения chroot в каталог сборки, когда я мне требуется синхронизировать дерево портежей, установить новые пакеты, что-нибудь настроить. Я назвал его work.
cd livecd
touch work
chmod +x work

Вот этот скрипт: Файл: Скрипт, автоматизирующий монтирование и переход в каталог
#!/bin/bash
mount -o bind /proc source/proc
mount -o bind /sys source/sys
mount -o bind /dev source/dev
mount -o bind /dev/pts source/dev/pts
mount -o bind /usr/portage source/usr/portage
chroot source/ /bin/bash --login
umount source/proc
umount source/sys
umount source/dev/pts
umount source/dev
umount source/usr/portage

Не забудьте после выполнения этого скрипта выполнить вручную в новом окружении
env-update
source /etc/profile

Так как простой 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.

Автоматическое монтирование существующих разделов

Я написал скрипт автомонтирования, который проверяет, какие разделы доступны, а затем пытается их подмонтировать. И он представляет собой нечто большее, чем тупой цикл.
Находит все доступные разделы пропускает те из них, которые невозможно примонтировать
Использует раздел подкачки по назначению, а не монтирует его
Монтирует ntfs с использованием captive-ntfs
Если ничего из вышеперечисленого не подходит, просто пытается смонтировать
Я выполняю это путем фильтрации вывода fdisk -l, и использую второй цикл в цикле (по причине звездочек (*), которыми fdisk помечает загружаемые разделы).
Попытка заставить работать captive-ntfs на LiveCD обычно представляет собой небольшую проблему. Он требует программу screen и модуль ядра fuse (мы уже включаем его в ядро в скрипте before-build, так что он на месте). Также требуется ntfs.sys, который вы можете внести предустановленным в LiveCD, но я не знаю, законно ли это. Но лучше сделать так, чтобы он автоматически скачивался при необходимости и только при старте этого скрипта по требованию пользователя, благодаря чему у вас не будет проблем с легальностью.
Я поместил свой скрипт в сети здесь, не редактируйте его с помощью Блокнота или Wordpad, потому что они добавляют ^M в конец каждой строки, нарушая целостность вашего LiveCD!
Я использовал помощь, полученную от вывода 2>/dev/null. Она до сих пор отображается при выполнении некоторых команд.

Я (MooSE) для своего LiveCD использовал свой скрипт автоматического монтирования разделов: Файл: /etc/init.d/automounter
#!/bin/sh
# Copyright 2006 Vadim Kalinnikov
# Distributed under the terms of the GNU General Public License v2

case "$1" in
    start|restart)

        for x in $(fdisk -l | awk {'print $1'} | grep dev | cut -c6-99);
        do
         # Determinating partition type
         TYPE1=$(fdisk -l | grep ${x} | awk {'print $5'});
         TYPE2=$(fdisk -l | grep ${x} | awk {'print $6'});
         TYPE3=$(fdisk -l | grep ${x} | awk {'print $7'});

         # If Extended partition
         if [[ ${TYPE2} != "Extended" ]] ; then

            # If swap partition
            if [[ ${TYPE2} == "swap" || ${TYPE3} == "swap" ]] ; then
             echo Using /dev/${x} as swap space;
             swapon /dev/${x};

            else
             echo Mounting /dev/${x} as /mnt/${x};
             mkdir -p /mnt/${x};

                # If partition type is NTFS
                if [[ ${TYPE1} == "7" || ${TYPE2} == "7" ]] ; then
                 mount /dev/${x} /mnt/${x} -o ro;

                else
                 mount /dev/${x} /mnt/${x};

                fi

            fi

         fi

        done
esac

Он не использует captive-ntfs и поэтому монтирует NTFS разделы в режиме read-only. Однако мне этого было вполне достаточно. К тому же он оказался заметно проще приведённого выше.

Автоматический вход в систему

Сначала установите mingetty. Затем подправьте /etc/inittab на компакт-диске (не забудьте сделать резервную копию). Найдите следующее: Файл: /etc/inittab
c1:12345:respawn:/sbin/agetty 38400 tty1 linux

замените на
c1:12345:respawn:/sbin/mingetty --autologin root --noclear tty1

чтобы в любой консоли автоматически входить под root'ом.

Если вы получаете "Session opened for ....." при загрузке компакт-диска, установите демон логов и добавьте его в запуск при загрузке.

Оптимизация процесса загрузки

Исправьте /etc/init.d/modules так, чтобы он не пытался обновлять зависимости модулей при каждой загрузке.

Измените: Файл: /etc/init.d/modules
ebegin "Calculating module dependencies"
/sbin/modules-update &>/dev/null
eend $? "Failed to calculate dependencies"
на:
if [ /etc/modules.d -nt /etc/modules.conf ]
then
ebegin "Calculating module dependencies"
/sbin/modules-update &>/dev/null
eend $? "Failed to calculate dependencies"
else
einfo "Module dependencies are up-to-date"
fi

Теперь команда 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

или
s=$(gzip -l $cur | ...) ; dd if=$cur bs=1 skip=$s of=$next ; cur=$next ; next=$next+1
-- Thanx to robbat2

Initrd:
gzip -cd initrd > unzipped
mount -o loop -t ext2 unzipped /mnt/cdrom

=== USB Stick drive === (evildick 2005-08-09)
В большей части все должно работать. Проблемы могут возникнуть в результате ограничений БИОС. Проблемы могут случиться, но обычно все заканчивается коротким подвисанием при инициализации ядра (при загрузке или инициализации initramfs). Такое обычно случается на Supermicro P4SCi (скорее всего так же и на P4SC8 - похожая платформа, однако я не тестировал). Скрипт написан для использования с описанными выше скриптами(этот скрипт используется последним или вместо команды mkiso). Скрипт, ниже отформатирует ваше USB устройство в файловую систему ext2 и запишет на него squash образ вместе с файлами загрузчика GRUB. После копирования меню загрузчика, скрипт изменит его для работы с USB флешкой как загрузочного устройства. Измените настройки устройства в начале скрипта, чтобы указать желаемый каталог монтирования и файл-устройство USB флешки. Так же нужно собрать ядро с поддержкой USB устройств не модульно, а монолитно. Code: ~livecd/usb-build.sh

#!/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, откуда я бессовестно стащил некоторые уловки.