Сборка собственного live cd Ubuntu
Создано: 04-06-2009 19:36:14 изменено: 26-03-2010 17:26:08  Метки: linux livecd
Иногда надо "живой" диск с системой, например для восстановления системы, разделов жесткого диска, фотографий, архивов. Лайв CD Убунты достаточно универсальная вещь, однако необходимость настраивать интернет для установки пакетов, а также завышеные системные требования заставили меня задуматься о сборке собственного диска.

Итак что мы имеем:

Слегка видоизменяя данные руководства, я написал пару скриптов для облегчения рутинной работы:
live# cat makedebootstrapchroot

#! /bin/bash
cd $HOME
mkdir -p live$$/chroot
cd live$$
# ставим базовую систему в папку chroot с узла http://localhost/ubuntu
debootstrap --arch=i386 hardy chroot http://localhost/ubuntu
# делаем доступ в интернет и настраиваем источник пакетов
echo "nameserver xx.xx.xx.xx" > chroot/etc/resolv.conf
cat > chroot/etc/apt/sources.list <<EOF1
deb http://gq.net.ru/ubuntu hardy xneur
deb http://ppa.launchpad.net/smakc/ubuntu hardy main
deb http://localhost/ubuntu/ hardy main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-security main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-updates main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-backports main restricted multiverse universe
EOF1
# настраиваем chroot оболочку
chroot chroot <<EOFHERE
mount /proc
mount /sys
mount -t devpts none /dev/pts
apt-get update
locale-gen ru_RU.UTF-8
EOFHERE
# переходим в chroot
chroot chroot

Этим скриптом создается базовая система без ядра в папке $HOME/livePROC/chroot, также в чрут монтируются служебные файловые системы, генерируется русская локаль и обновляется кэш пакетов.
После его работы вы ОСТАЕТЕСЬ в чруте!!!
Т.о. можно продолжать работу над образом, ну к примеру так:

# ставим midnight commander
apt-get install mc
# ставим привычное окружение командной строки и набор хуков для liveCD
apt-get install ubuntu-standard casper
# автодополнение строки для удобства
. /etc/bash_completion
apt-get install discover1 os-prober
# ставим ядро и кириллицу
apt-get install linux-generic console-cyrillic
# обновляем initrd для автозагрузки кириллицы
update-initramfs -u
# обновляем систему
aptitude safe-upgrade
exit
# переход в папку с чрутом
cd $HOME/live[0-9]*

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

cat ../live/go_chroot 
#! /bin/bash
echo "nameserver xx.xx.xx.xx" > chroot/etc/resolv.conf
cat > chroot/etc/apt/sources.list <<EOF1
deb http://gq.net.ru/ubuntu hardy xneur
deb http://ppa.launchpad.net/smakc/ubuntu hardy main
deb http://localhost/ubuntu/ hardy main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-security main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-updates main restricted multiverse universe
deb http://localhost/ubuntu/ hardy-backports main restricted multiverse universe
EOF1
chroot chroot <<EOFHERE
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
apt-get update
. /etc/bash_completion
#locale-gen ru_RU.UTF-8
EOFHERE
chroot chroot

Далее нам нужен isolinux. Можно в самом простом случае его установить и действовать в соответствии с вышеуказанным [2].
Но мы не ищем легких путей :) Поэтому возьмем загрузчик от оригинального диска и слегка его подправим. Исправленый загрузчик - в приложении к статье(пока нет - позже приложу).
Для исправления заставки можно воспользоваться гимпом, файл splash.pcx.
Сохраняем его в bmp, и делаем следующее:

apt-get install netpbm
bmptoppm splash.bmp < splash.ppm
ppmtolss16 '#ffffff=7' < splash.ppm > splash.rle

Файлы splash.pcx и splash.rle должны лежать в $HOME/live/isolinux1/
далее запустим скрипт такого содержания:
cat clean_chroot1

#! /bin/bash
# удаляем ресолв и ставим корректные источники пакетов
rm chroot/etc/resolv.conf
cat > chroot/etc/apt/sources.list <<EOF1
deb http://mirror.yandex.ru/ubuntu/ hardy main restricted multiverse universe
deb http://mirror.yandex.ru/ubuntu/ hardy-security main restricted multiverse universe
deb http://mirror.yandex.ru/ubuntu/ hardy-updates main restricted multiverse universe
deb http://mirror.yandex.ru/ubuntu/ hardy-backports main restricted multiverse universe
EOF1
# чистим chroot
rm -rf chroot/tmp/*
chroot chroot <<EOFHERE
apt-get clean
umount -l -f /proc
umount -l -f /proc
umount -l -f /sys
umount -l -f /sys
umount -l -f tmpfs
umount /dev/pts
EOFHERE
# создаем окружение загрузчика
rm -rf image
mkdir image image/casper image/isolinux image/install
cp chroot/boot/vmlinuz-2.6.**-**-generic image/casper/vmlinuz
cp chroot/boot/initrd.img-2.6.**-**-generic image/casper/initrd.gz
cp chroot/boot/vmlinuz-2.6.**-**-server image/casper/vmlinuz
cp chroot/boot/initrd.img-2.6.**-**-server image/casper/initrd.gz
cp /usr/lib/syslinux/isolinux.bin image/isolinux/
cp /boot/memtest86+.bin image/install/memtest
cp %HOME/live/isolinux1/* image/isolinux/
# создаем manifest-файлы
chroot chroot dpkg-query -W --showformat='${Package} ${Version}\n' | tee image/casper/filesystem.manifest
cp -v image/casper/filesystem.manifest{,-desktop}
REMOVE='ubiquity casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4'
for i in $REMOVE 
do
        sudo sed -i "/${i}/d" image/casper/filesystem.manifest-desktop
done
# забиваем нулями место под squashfs (экономия места в образе 5-40 мегабайт)
dd if=/dev/zero of=cleaning bs=2M count=400
rm -f cleaning
# создаем сжатую файловую систему
sudo mksquashfs chroot image/casper/filesystem.squashfs
# создаем описание диска
cat > image/README.diskdefines <<EOFHERE3
#define DISKNAME  Ubuntu 8.04.1 - Release i386 **Sanych edition**
#define TYPE  binary
#define TYPEbinary  1
#define ARCH  i386
#define ARCHi386  1
#define DISKNUM  1
#define DISKNUM1  1
#define TOTALNUM  0
#define TOTALNUM0  1
EOFHERE3
# создаем файл с контрольными суммами
(cd image && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
# создаем iso-образ
cd image
mkisofs -r -V "Ubuntu Sanych edition" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-remix.iso .

Тут есть особенность, на некоторых компьютерах старая версия mksquashfs виснет:
https://bugs.launchpad.net/ubuntu/+source/squashfs/+bug/222700
для того чтоб пофиксить, ставим последнюю версию из дебиановского репозитария:

wget http://ftp.de.debian.org/debian/pool/main/s/squashfs/squashfs-tools_3.3-7_i386.deb
dpkg -i squashfs-tools_3.3-7_i386.deb

ну вот собственно и все, исошник собран и лежит в $HOME/livePROC/ubuntu-remix.iso, можно загружать в виртуал-бокс и тестировать. Если появятся вопросы - спрашивайте.
P.S. скрипты не "причесаны" и возможно где-нибудь потребуются правки...
depmod в chroot:
depmod -ae -F /boot/System.map-2.6.24-19-386 2.6.24-19-386
2844 просмотров комментировать
Создано: Mirenix 04-02-2010 16:21:46 Ответить
Спасибо за статью! А как после сборки прикрутить установщик на жесткий диск?
Создано: sanych 04-02-2010 20:55:38 Ответить
насколько я помню - надо пакет/ы ставить в образ
aptitude search ubiquity