HOWTO Создание LiveCD с нуля
Материал из Gentoo Linux Wiki
- Вернуться в раздел руководства
Содержание |
[править] Введение
Из этого небольшого 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 своего домашнего каталога.
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 <bulvinkl@gmail.com>
# 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, откуда я бессовестно стащил некоторые уловки.
