Версія 1 (rc1)

Створення власного LiveCD/DVD/Flash

За мотивами:

Вступ

В цій статті детально описується самий вірний шлях створення власного LiveCD/DVD на базі дистрибутиву Gentoo GNU/Linux (хоча без особливих проблем підійде будь-який інший дистрибутив). Переваги цього способу полягають в наступному:

  • Зібрані програми залишаються цілими, а не видаляються між циклами створення LiveCD. Це дає можливість виконувати синхронізацію, поновлення, встановлення та зміни середовища так само, як це робиться в справжній системі.
  • Компакт-диск завантажуватиметься з допомогою GRUB, а не ISOLINUX (ISOLINUX все ще можливий). Таким чином Ви дістаєте гнучкість справжньої системи (зміна параметрів ядра, знаходження пристроїв ітд...).
  • Ще одна особливість збереження матеріалу під час збирання - величезна економія часу збирання.
  • Якщо диск зроблено вірно, то він зможе завантажуватись з 32 Мб ОЗП, мій LiveCD займає 700 МБ та містить все, що тільки можна собі уявити (на диску це еквівалент ~2.2Gb плюс розмір каталогів: /home, /usr/doc, /usr/portage, /var).
  • Є в наявності збірка всіх скриптів для автоматизованого збирання з мінімально необхідними налаштуваннями: DYSTRYK. Всі скрипти, які є в тексті статті застарілі!

Вимоги

Вам буде потрібно наявність деякого місця на жорсткому диску. В залежності від того які пакети Ви збираєтесь включати в свій LiveCD/DVD, ця кількість може бути дуже різною (чим більше пакетів тим більше потрібно місця). Для недуже великих систем в середньому 5 Гб дискового простору вистачає.

Потрібно вміти встановлювати Gentoo хоча б з stage2, тому, що саме це треба буде зробити. Ну в будь-якому разі можна звернутись до Gentoo Handbook.

Також потрібні загальні поняття про роботу Linux в цілому та Gentoo зокрема. Особливо тому, що деякі речі у скриптах можуть бути небезпечні при невірному їх використанні.

Основні моменти встановлення Gentoo

Хоча тут розглядається створення системи саме на базі дистрибутиву Gentoo GNU/Linux, але можна використати для цього й інший дистрибутив, звичайно, враховуючи відповідні йому особливості. Можна спробувати перейти до пункту ?Автоматизація встановлення Gentoo|, хоча варто перечитати ці розділи, щоб мати уявлення про те що кілька діб буде відбуватись на вашому комп'ютері.

Створення середовища збірки

Наше середовище для збірки це всього на всього каталог з примонтованим чистим розділом, в котрий ми змінимо корінь і встановимо Gentoo (зовсім так само, як при звичному встановленні Gentoo Linux). Вміст цього розділу потім і перейде на LiveCD. Отож створюєте каталог livecd/source де монтуємо розділ з достатньою кількістю місця.

mkdir -p .../livecd/source
mount /dev/sda10 .../livecd/source

Для початку потрібно скачати stage1/2 котрий собі вибрали з одного із дзеркал Gentoo в домашній каталог, та розпакуйте його в каталог .../livecd/source.

cd .../livecd/source
tar jxvpf ~/stage1-x86-hardened-2.6-2006.0.tar.bz2

Тепер створіть каталог newroot, який буде потрібний при початковому завантаженні.

mkdir newroot

Зараз скачуємо останній зріз дерева portage (або при небажанні тягнути з Інтернету файли копіюємо встановлений на поточній системі) та розпаковуємо його в нову директорію для збірки.

cd .../livecd/source/usr/
tar jxvf ~/portage-whatever.tar.bz2

Якщо при встановленні буде потрібно скачувати файли то створіть у livecd/source/etc, все що необхідно для з'єднання з Інтернетом. Наприклад не зайвим виявиться resolv.conf.

cd .../livecd/source
cp /etc/resolv.conf etc/resolv.conf

Перед переміщенням в каталог для збірки та початком встановлення під'єднуємо необхідні точки монтування. Можна крім звичних proc та dev монтувати також: usr/portage/distfiles, коли використовуєте ту ж архітектуру var/tmp/ccache, коли використовуєте ті ж USE usr/portage/packages - для економії часу та трафіку.

mount -o bind /proc proc
mount -o bind /dev dev
mkdir -p usr/portage/distfiles
mount -o bind /usr/portage/distfiles usr/portage/distfiles
mkdir -p /var/tmp/ccache
mount -o bind /var/tmp/ccache var/tmp/ccache
mkdir -p usr/portage/packages
mount -o bind /usr/portage/packages usr/portage/packages

Налаштування Portage

Почнемо з etc/make.conf

CHOST="i686-pc-linux-gnu"

Не використовуйте для LiveCD/DVD опцію компіляції march, а змініть її на mtune, так значно розшириться клас обладнання на якому працюватиме диск, а швидкість роботи помітно не зменшиться.

#CFLAGS="-O3 -pipe -march=athlon-xp -mmmx -msse -m3dnow -m3dnowext -mfpmath=sse,387 -fomit-frame-pointer"
#CFLAGS="-O3 -pipe -march=pentium4 -mmmx -msse -msse2 -mfpmath=sse,387 -fomit-frame-pointer"
CFLAGS="-Os -pipe -march=i686 -mtune=pentium4 -fomit-frame-pointer"
#CFLAGS="-Os -finline-functions -frename-registers -pipe -march=i686 -mmmx -mtune=pentium4 -fomit-frame-pointer"
#CFLAGS="-Os -pipe -march=pentium-mmx -fomit-frame-pointer"

Продумано користуйтесь змінними USE. Чим більше їх використовуєте - тим більш товсту систему отримаєте. Система може вийти такою великою, що просто не вміститься на CD. Наприклад, коли використовуєте тільки KDE, і не цікавитесь ні документацією, ні java, то можете спокійно додати '-gnome -gtk -java -doc'. Обов'язково використовуйте 'livecd' в USE. Цей параметр передаватиметься ядру разом з 'cdroot' під час завантаження, що заставить скрипти враховувати факт завантаження з CDROM, та пропускати такі непотрібні речі, як перевірка кореневої системи.

Крім того доречно буде переглянути каталог /etc/portage/

ls /etc/portage/
profile
packages
virtuals
sets
bashrc
categories
mirrors
package.keywords
package.mask
package.provided
package.unmask
package.use
rsync_excludes
use.mask

Ну і якщо це дозволить вибраний вами stage то можна змінити і сам системний профіль, наприклад, так:

rm etc/make.profile
ln -s usr/portage/profiles/selinux/2005.1/x86/hardened etc/make.profile

Збірка системи

Все готове для виконання chroot в source і початку збірки.

Ось приблизні кроки встановлення:

cd livecd/source
chroot . /bin/bash --login
env-update && source /etc/profile

cd /usr/portage
scripts/bootstrap.sh

emerge -e system
ln -sf /usr/share/zoneinfo/<path to time zone file> /etc/localtime

scripts/bootstrap.sh виконується пару годин на доброму залізі, а emerge -e system ще довше, так, що знайдіть собі чим зайнятись на цей час..

Ядро GNU/Linux для LiveCD/DVD

Настав час зібрати спеціальне ядро Лінукса для завантаження з LiveCD. ?У цьому посиланню наведена детальна документація про компіляцію ядра GNU/Linux. Ми збираємось використовувати squashfs, як кореневу файлову систему, тому необхідно накласти відповідну латку на ядро.

Налаштування ядра

Додатково при конфігурації ядра потрібно додати:

Device Drivers  --->
  ......
  Block devices  --->
  ......
      <*> Loopback device support
      <*>   Cryptoloop Support
      .......
      <*> RAM disk support
      (4)  Default number of RAM disks
      (8192) Default RAM disk size (kbytes)
      [*]   Initial RAM disk (initrd) support
  .......
  ATA/ATAPI/MFM/RLL support  --->
     <*> ATA/ATAPI/MFM/RLL support
     <*>   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
     ---     Please see Documentation/ide.txt for help/info on IDE drives
     .....
     <*>     Include IDE/ATA-2 DISK support
     [*]     Use multi-mode by default
     <M>     PCMCIA IDE support
     <*>     Include IDE/ATAPI CDROM support
     плюс IDE драйвери свого диску.
.....
File systems  --->
   <*> Second extended fs support
   [*]   Ext2 extended attributes
   [*]     Ext2 POSIX Access Control Lists
   [*]     Ext2 Security Labels
   [*]   Ext2 execute in place support          
   .......
         CD-ROM/DVD Filesystems  --->
              <*> ISO 9660 CDROM file system support
              [*]   Microsoft Joliet CDROM extensions
              [*]   Transparent decompression extension
              <*> UDF file system support
         ......
         Pseudo filesystems  --->
              [*] /proc file system support
              [*]   /proc/kcore support
              [*] sysfs file system support
              [*] Virtual memory file system support (former shm fs)
         Miscellaneous filesystems  --->
              .....
              <*> SquashFS 3.2 - [Squashed file system support](http://squashfs.sourceforge.net/)
              [*]   Additional options for memory-constrained systems
              (3)     Number of fragments cached
              [*]     Use Vmalloc rather than Kmalloc
              .....

Можна використати готовий універсальний ?.config спеціально розроблений для x86 LiveCD/DVD, який підтримує і завантажує genkernel (який, в свою чергу, в змозі завантажити всі необхідні модулі). Він все ще розробляється, однак доволі терпимо працює.

Компіляція та встановлення ядра і образу INITRD

Спочатку встановимо genkernel:

emerge genkernel

Зовсім не складно, чи не так? А тепер виконуємо приблизно таку команду:

genkernel --dmraid all --gensplash --bootsplash --no-clean --install --menuconfig

Можна і без ключа menuconfig, якщо у вас є робочий .config. Мені підійшла слідуюча:

genkernel --gensplash=livecd-2006.0 --kerneldir=/usr/src/linux/ --kernel-config=/usr/src/.config --kernname=DYSTRYK --luks --lvm2 --dmraid all

Коли dmraid не зберається - виконайте таку команду для економії часу повторного збирання:

genkernel --oldconfig --gensplash=livecd-2006.0 --kerneldir=/usr/src/linux/ --kernname=DYSTRYK --luks --lvm2 all

Налаштування системи

Нище наведені /etc/fstab та /boot/grub/menu.lst є для завантаження з CD/DVD і не підходять для завантаження з розділу диску!!!

Щоб завантажитись з диску використовуйте класичні налаштування /etc/fstab, а в /boot/grub/grub.conf, /boot/grub/menu.lst замініть в опціях ядра "looptype=squashfs loop=/livecd.squashfs real_root=/dev/loop0", наприклад на: "real_root=/dev/sda10", просто вказавши в real_root розділ диску де встановлюєте систему. Також root (hd0.9), а перед шляхом до ядра та завантажувального образу не траба писати (cd).

fstab

Підчас збиранням ядра давайте поправимо деякі важливі файли в /etc. В першу чергу /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
none                    /proc/bus/usb   usbfs           defaults                                     0 0
/dev/fd0                /mnt/floppy     auto            noauto,owner,kudzu,user,rw                   0 0
/dev/cdroms/cdrom0      /mnt/cdrom      udf,iso9660     noauto,owner,kudzu,user,rw                   0 0
# for SELinux suport
none                    /selinux        selinuxfs       defaults                                     0 0
# for openMosix
none                    /mnt/mfs        mfs             defaults                                     0 0

Обов'язково додайте пусту стрічку вкінці чи спочатку файла, інакше LiveCD буде сваритись!

Зауважте, що коренева файлова система монтується на loopback-пристрій з файловою системою типу squashfs, але про це пізніше. Тепер міняємо за бажанням решту файлів у /etc (гляньте у hostname, rc.conf, conf.d/* ітд...).

GRUB

В останню чергу встановлюємо GRUB котрий підтримує завантаження з CD.

emerge grub

Вигляд /boot/grub/menu.lst

#
# Boot menu configuration file
#
#password --md5 ......................

splashimage /boot/grub/splash.xpm.gz

# Boot automatically after 10 secs.
timeout 10

# By default, boot the first entry.
default 1

# Fallback to the second entry.
fallback 2

# For booting GNU/Linux
# kernel        - checkreqprot=0
# program       - checkreqprot=1
#
# disabl SEL    - disabled
# audited       - permissive
# denials       - enforcing

title=Linux-2.6.18 High Security DYSTRYK (Not work at all!)
    root (cd)
        kernel (cd)/boot/kernel-DYSTRYK-x86-2.6.18-hardened-r4 vga=791 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs real_root=/dev/loop0 udev cdroot dolvm2 pci=nomsi selinux=1 checkreqprot=1 permissive=1 enforcing=1 splash=silent,fadein,theme:livecd-2006.0 INPUT_EVDEV=y CONSOLE=/dev/tty1 fbcon=scrollback:128K quiet kdgraphics
        initrd (cd)/boot/initramfs-DYSTRYK-x86-2.6.18-hardened-r4

title=Linux-2.6.18 Security DYSTRYK (Not all programs may work!)
    root (cd)
        kernel (cd)/boot/kernel-DYSTRYK-x86-2.6.18-hardened-r4 vga=791 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs real_root=/dev/loop0 udev cdroot dolvm2 pci=nomsi selinux=1 checkreqprot=1 permissive=1 splash=silent,fadein,theme:livecd-2006.0 INPUT_EVDEV=y CONSOLE=/dev/tty1 fbcon=scrollback:128K quiet kdgraphics
        initrd (cd)/boot/initramfs-DYSTRYK-x86-2.6.18-hardened-r4

title=Linux-2.6.18 DYSTRYK
    root (cd)
        kernel (cd)/boot/kernel-DYSTRYK-x86-2.6.18-hardened-r4 vga=791 root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs real_root=/dev/loop0 udev cdroot dolvm2 pci=nomsi selinux=0 pax_softmode=1 splash=silent,fadein,theme:livecd-2006.0 INPUT_EVDEV=y CONSOLE=/dev/tty1 fbcon=scrollback:128K quiet kdgraphics selinux_compat_net=1
        initrd (cd)/boot/initramfs-DYSTRYK-x86-2.6.18-hardened-r4

title Booting from local hard disk
    root (hd0)
        chainloader +1

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

title Change the colors
    color green/black blink-green/blue

ВАЖЛИВО!

Оскільки iso9660 не вміє обробляти символічні посилання (хоча в допомозі при конфігурації ядра написано, що з символічними посиланнями у iso9660 все впорядку???), впевніться що файл /boot/grub/menu.lst не є ним. Якщо необхідно, видаліть це посилання і, після створення звичайного файлу, скопіюйте до нього зміст grub.conf. У протилежному випадку, Ви не отримаєте меню, а GRUB просто видасть командний рядок! Ви повинні використати menu.lst як конфігураційний файл!

При бажанні можна відмовитись від параметра 'vga=791', але інші параметри обов'язкові.

Встановлення програм

Приблизні кроки встановлення програм:

 emerge <пакети, які вам необхідні, наприклад syslog-ng, hotplug, udev>
 rc-update add <необхідні сервіси>, наприклад, ті ж: hotplug, net.eth0, syslog-ng> default <чи в boot, як треба>
 emerge <Рекомендовані обов'язкові пакети sys-fs/dmraid і slocate, вони використовуватимуться далі в скриптах. Краще їх додати прямо в /etc/portage/profile/packages>
 emerge <Любі необов'язкові пакети на ваш смак, наприклад kde, kdevelop, lyx, geda-suite, electric, qcad, labplot, koctave, yacas, ghemical, embassy, stellarium, celestia ну і openoffice, amarok, mplayer, tvtime, sim та mozilla-firefox...>

Автоматизація встановлення Gentoo

Скрипти для автоматизації всіх завдань описаних в попередніх пунктах викладаю тут: DYSTRYK. Даний архів потрібно розпакувати в каталозі /home

В каталозі DYSTRYK налаштування системи зберігаються в каталогах:

cfg : на період bootstrap (stage1)

cfg1 : для подальшої збірки system (stage2) та world (stage3)

Скрипт /home/DYSTRYK/bin/install_gentoo.sh автоматично виконує /home/DYSTRYK/bin/install_system.sh встановить Gentoo аж до stage2, який дозволить завантажитись вже в новій системі де і продовжити встановлення та налаштування. Фактично послідовно виконається все описане в пунктах ?Створення середовища збірки|, ?Налаштування Portage|, ?Збірка системи|. Ці скрипти виконується добу на доброму залізі, так, що знайдіть собі чим зайнятись на цей час.....

Скрипт /home/DYSTRYK/bin/install_world.sh завершує процес встановлення Gentoo аж до stage3 включно. Цей скрипт визначає групи програм котрі потрібно встановити в файлі DYSTRYK/etc/pkgconfig перелік програм котрі входять до конкретної групи можна визначити у одноіменних файлах в корені директорії DYSTRYK/ Фактично він автоматизує виконання пункту ?Встановлення програм|. Робота скрипта в залежності від налаштувань може зайняти тиждень на доброму залізі, так, що знайдіть собі чим зайнятись на цей час, але періодично заглядайте що робиться..... В /var/log/install.log пишиться дуже скупий журнал:

Ндл Лют  4 02:57:54 UTC 2007            World OK
Ндл Лют  4 03:28:47 UTC 2007            System newuse OK
Ндл Лют  4 10:52:28 UTC 2007            World newuse OK
Срд Лют  7 12:38:55 UTC 2007            All rebuild OK!!!

Також журнал встановлених пакетів веде портадж: /var/log/emerge.log та /var/log/portage/*

УВАГА!!!

Скрипти перед виконанням перечитувати та підправляти до своїх потреб!!! /home/DYSTRYK/bin/install_system.sh в кінці виконує /home/DYSTRYK/bin/install_grub.sh котрий встановлює завантажувальник в MBR першого диску для завантаження з першого його розділу!!!

Поради

В цьому розділі описуються різноманітні хороші поради які можна виконати перед пунктом ?Створення ISO образу LiveCD|, або перейти одразу до нього.

Скрипт для chroot

Використання простого скрипта для виконання chroot в каталог збірки, коли потрібно синхронізувати дерево портеджу, встановити нові пакети, що-небудь налаштувати. Називається він work.

cd livecd
touch work
chmod +x work

Скрипт автоматизації переходу в каталог

#!/bin/bash

mount -o bind /proc $LIVECD/source/proc
mount -o bind /sys $LIVECD/source/sys
mount -o bind /dev $LIVECD/source/dev
mount -o bind /usr/portage $LIVECD/source/usr/portage
mount -o bind /var/tmp/ccache $LIVECD/source/var/tmp/ccache
chroot $LIVECD/source/ /bin/bash
umount $LIVECD/source/proc
umount $LIVECD/source/sys
umount $LIVECD/source/dev
umount $LIVECD/source/usr/portage
umount $LIVECD/source/var/tmp/ccache

Не забувайте після виконання цього скрипта виконувати вручну в новому середовищі

env-update & source /etc/profile

Так як простий bash скрипт не може виконувати команди в новому оточені, але виконує розмонтування, запустіть

env-update & source /etc/profile

після того як покинули середовище з іншим коренем.

Монтувати /dev важливо для того, щоб, наприклад, ікси могли працювати в новому оточенні.

Автомонтування існуючих розділів

Наводиться скрипт автомонтування automounter, та його підкоректована версія: automounter, який перевіряє, які розділи доступні, а потім старається їх примонтувати. І він є трохи більше тупого циклу:

  1. Знаходить всі доступні розділи.
  2. Пропускає ті з них котрі неможливо примонтувати.
  3. Використовує розділ підкачки по призначенню, а не монтує його.
  4. Монтує ntfs з використанням captive-ntfs.
  5. Якщо нічого з вище переліченого не підходить, просто старається його примонтувати.

Це досягається шляхом фільтрування виводу fdisk -l, та використання другого циклу в циклі (по причині (*), якими fdisk помічає завантажувальні розділи.

Спроба заставити працювати captive-ntfs на LiveCD звично є проблемною. Він вимагає програму screen та модуль ядра fuse (ми вже включаємо його в ядро у скрипті before-build, так що він на місці). Також потрібно ntfs.sys, який Ви можете внести на LiveCD, але тоді створений CD порушуватиме авторські права, ітд... Краще радять зробити так, щоб він автоматично скачувався за необхідності, та тільки при старті цього скрипта, за вимогою користувача, завдяки чому у вас не буде проблем з легальністю.

Поточна версія цього скрипта з пакету DYSTRYK використовує чистий GPL-ний модуль ntfs3g і встановлюється за замовчуванням, що дає змогу уникнути всіх вищеперерахованих проблем.

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

Спочатку встановіть mingetty

emerge mingetty

потім поправте /etc/inittab на диску-LiveCD (не забудьте зробити резервну копію). Найдіть наступний рядок:

c1:12345:respawn:/sbin/agetty 38400 tty1 linux

та замініть його на

c1:12345:respawn:/sbin/mingetty --nohangup --noclear --long-hostname --loginprog /bin/login --autologin root 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"

Це дає шанс, що в майбутньому всі сервіси на системі будуть стартувати паралельно, а не послідовно.

Детальну інформацію про оптимізацію процесу завантаження Gentoo можна знайти по цьому посиланню.

Перевірка/Зміни 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 -t ext2 -o loop unzipped /mnt/cdrom

Пристрої USB

  • У більшості випадків це працюватиме. Проблеми можуть виникати через обмеження зумовлені BIOS. Проблеми можуть бути різнопланові але в основному це тільки короткі затримки при ініціалізації ядра (протягом чи на initramfs). Це трапляється тільки з Supermicro P4SCi (і можливо на платах подібних до P4SC8 - але все не тестувалось...)

  • Скрипт був створений для використання в поєднанні з вище наведеними livecd (цей скрипт використовуватиметься після чи замість команди mkiso). Нище приведений скрипт буде форматувати пристрій usb файловою системою ext2 та запише на нього аналог squash образу разом з файлами завантажувальника grub. Після копіювання меню завантажувальника grub, він включить роботу usb як завантажувального пристрою. Переконайтесь в зміні установок пристроїв після скрипта для відповідності бажаним точкам монтування, так як звичайних usb пристроїв. Також потрібно включити підтримку USB пристроїв (UHCI та OHCI) в ядро не як модулі.

Приклад ~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" та додайте під ним власне повідомлення.

Gensplash, fbsplash, splashutils

Компіляція ядра з патчем fbsplash входить в патчі Gentoo наприклад в [hardened-om-sources].

Додатково потрібно вказати:

Device Drivers
...
  Block devices:
    ...
    <*> RAM disk support
    (4096) Default RAM disk size (kbytes) (NEW)
    [*]   Initial RAM disk (initrd) support
    ...
...
  Input Device Support
    ...
    [*]Event Interface        Клавіша F2 переклучатиме між режимами verbose та silent.
    ...
...
  Graphics support:
    [*] Support for frame buffer devices
    [ ] Enable Tile Blitting Support   Невідмічайте бо інакше не появляться інші необхідні опції.
    ...
    <*>   VESA VGA graphics support
        VESA driver type (vesafb-tng)  --->
          (HRESxVRES@FREQ) VESA default mode 
               # Pick your resolution@freq
               # Ex: (1024x768@75)
    (vesafb-tng має більше можливостей, але з деякими картами може не працювати
    тому для LiveCD краще взяти vesafb, коли збираєте для себе то виберіть свою відеокарту)
    ...
    Console display driver support:
       [*] Video mode selection support
       <*> Framebuffer Console support
    ...
    [*] Support for the framebuffer splash

Після компіляції ядра встановлюємо необхідні програми:

# emerge splashutils splash-themes-livecd

Можна додати splash-themes-gentoo. Initrd образ з малюнками можна створити з допомогою команди:

# splash_geninitramfs -g /boot/fbsplash-livecd-2006.0-1024x768 -v -r 1024x768 livecd-2006.0

Тепер основна проблема initrd для LivaCD має бути тільки один отже сам splash потрібно вкомпілити всередину в ядро чи ініціалізаційний образ. Це можна зробити наступними командами:

# splash_geninitramfs -g /usr/src/linux/usr/initramfs_data.cpio.gz -v -r 1024x768 livecd-2006.0

після цього зібрати ядро (вкомпілиться в саме ядро), або

# genkernel --oldconfig --no-mrproper --gensplash=livecd-2006.0 --kerneldir=/usr/src/linux-2.6.15.6-om/  --kernname=LiveCD --lvm2 all

додасться в ініціалізаційний образ. Чи вказати архів cpio зі сплешем в параметрі конфігурації ядра:

General setup  ---> 
   ()  Initramfs source file(s)

На кінець потрібно вказати опції завантаження ядра, коли використовуєте фрейм буфер vesafb-tng чи інший наворочений (radeonfb,..) то замість vga=791, додайте до параметрів ядра щось типу:

video=vesafb:ywrap,mtrr:2,1024x768-16@70
(video=radeonfb:ywrap,mtrr:2,1024x768-32@85)

коли вибрали простий vesafb то залиште

vga=791

Для фреймбуфер сплеш необхідними є опції:

splash=silent,theme:livecd-2006.0 quiet CONSOLE=/dev/tty1

Доатково варто додати:

kdgraphics INPUT_EVDEV=y fbcon=scrollback:128K

Основний сайт: http://dev.gentoo.org/~spock/projects/gensplash/

Детальна інструкція: http://gentoo-wiki.com/HOWTO_fbsplash

Створення власних тем для Framebuffer: http://gentoo-wiki.com/TIP_Design_your_own_Framebuffer_Splash Може хтось намалює щось на український мотив?

Встановлення з LiveCD/DVD на локальний жорсткий диск

Зручно мати скрипти котрі за бажанням можна використати для встановлення Лінукса з LiveCD/DVD на локальний жорсткий диск комп'ютера. Наводжу скрипт: LiveCD2HDD.sh - котрий повністю автоматизує процес встановлення Лінукса, після встановлення Ви зможете одразу перевантажитись вже з локального диску в повністю робочу систему. Якщо Ви бажаєте зберегти дані на локальних дисках то потрібно: самостійно вказати місце де і як має встановлюватись Лінукс, Вам потрібно розбити диски на розділи відповідним чином, відформатувати розділи, та примонтувати створене з них дерево каталогів Лінукс до точки монтування /mnt/gentoo і тільки після цього запускати скрипт: LiveCD2HDD.sh для автоматичного встановлення; у цьому випадку Вам, потім, також самостійно треба встановити та налаштувати GRUB і /etc/fstab.

Скрипт для автоматичного встановлення Лінукс LiveCD2HDD.sh

Допоміжний скриптик: LiveCDchrootHDD.sh

Створення ISO образу LiveCD

Створення завантажувального образу проходить в кілька етапів:

  1. очистки непотрібного сміття;
  2. створення спеціального каталогу (/newroot інакше обзивають його /fake/needwrite) який міститиме назви каталогів, що потребують запису (каталоги: /etc /home /root /tmp /var) під час роботи LiveCD.
  3. генерація стисненого образу з дерева каталогів з допомогою інструментів squashfs.
  4. створення самого iso-образу з встановленням завантажувальника grub.

Нище описуються скрипти котрі автоматизують весь процес створення iso-образу, для їх роботи потрібно багато місця в каталозі livecd та вільну оперативку і своп!!!

Встановимо змінну LIVECD в LiveCDbuild.sh, необхідну для роботи скриптів, котра вказуватиме директорію в котрій збиратиметься наш LiveCD:

LIVECD=/mnt/livecd

Прийшов час обговорити розмір дерева системи для збірки LiveCD. Легко помітити, що деякі речі займають багато місця однак зовсім непотрібні на LiveCD. Якщо немає бажання включати їх у LiveCD, не видаляйте їх, а краще використайте опції в mksquashfs, для того, щоб виключити каталоги із стисненого образу, або вкажіть їх у скрипті build LiveCDbefore-build.sh наприклад з нього можна запускати LiveCDclean.sh взагалі останній скрипт не повинен ламати робочу систему на жорсткому диску. Таким чином система з котрої проводиться збірка залишиться цілісною.

Вкажемо каталоги котрі повинні бути доступні в режимі читання/запис при роботі LiveCD/DVD

mkdir -p newroot/etc
mkdir -p newroot/home
mkdir -p newroot/root
mkdir -p newroot/var

Тепер для простоти, автоматизуємо ці кроки з допомогою скрипта build попередне посилання вказує на оригінал, а наступне дещо змінену версію під наші потреби: LiveCDbuild.sh

Також створіть скрипт before-build я використовую його дещо змінену версію: LiveCDbefore-build.sh та розміщую у каталозі: /home/DYSTRYK/bin

З допомогою команди emerge sys-fs/fuse sys-fs/dmraid переконуємось, що не забули зібрати ці модулі при обновлені ядра. Перед запуском цього скрипта не зайвим буде глянути в /etc/locale.nopurge.

УВАГА

виконання цих скриптів поза середовищем chroot може знищити всю робочу систему!

Копіювання файлів, стиснення великого каталогу source займає трохи часу, так що проявіть терпіння. Як тільки все буде готове просто запишіть створений iso-образ на CD/DVD та насолоджуйтесь:)

Якщо завантаження CD/DVD пройшло невдало на певному етапі під час виконання скрипту linuxrc, завжди можна змінити параметр завантаження ядра у grub на init=/bin/sh замість linuxrc. Тоді при завантажені отримаєте звичний shell всередині initrd образу. Звідти можна руками набирати команди з linuxrc і таким чином постаратись з'ясувати що саме глючить.

Література

Форуми:

Статті:

--Svyat 23:47, 16 грудень 2005 (EET)