Создание своего дистрибутива Ubuntu

Создание своего дистрибутива Ubuntu

Иногда хочется собрать установочный iso образ Ubuntu со своими программами и настройками, темами оформления и.т.д Существует большое множество готовых программ для его создания Большой список и гуглится достаточно легко). Но так или иначе они иногда не подходят по разным причинам…

Предлагаю простой и быстрый способ “сварить” свой дистрибутив .

Итак поехали! Ман без лирики и нудных комментариев. Четко быстро и просто.

1.Подготовка

Во время сборки часто придется выполнять команды с правами рута, поэтому сразу выполним:

sudo -s

Создадим директорию, в которой и будем проводить все работы

mkdir MyUbuntu && cd MyUbuntu

Создадим директорию, в которую скопируем все файлы с образа компакт-диска Ubuntu

mkdir myubuntu_iso
mount -o loop /путь/до/образа.iso /mnt
rsync -a /mnt/ myubuntu_iso
umount /mnt

Распаковываем squashfs-образ livecd

unsquashfs myubuntu_iso/casper/filesystem.squashfs
mv squashfs-root myubuntu_root

Теперь можно приступить к изменениям. Для этого надо использовать chroot.

2.Вход в chroot-окружение

cp /etc/hosts myubuntu_root/etc/
cp /etc/resolv.conf myubuntu_root/etc/
chroot myubuntu_root

Следующие команды необходимы для нормальной работы некоторых утилит в chroot-окружении, в частности — для самого apt-get, aptitude или synaptic

mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

Теперь есть возможность пользоваться консольными утилитами, как и в обычной убунте (nano, vi, apt-get, aptitude, gconftool-2, mv, cp и так далее)

3.Работа в chroot-окружении (установка пакетов, настройка и т. п.)

Если же хочется воспользоваться графическими утилитами (такими как synaptic, наприме), то в другом терминале запустите эту команду:

Xnest -ac :2

или

Xephyr :2 -screen 1024x768

Этот пакет в системе не установлен, нужно установить заранее

sudo apt-get install xnest xephyr

И у вас появится окошко, в котором и будут работать гуишные проги. В самом-же chroot-окружении нужно указать монитор (то самое окошко xnest’а):

export DISPLAY=localhost:2

И дальше уже можно спокойно запускать synaptic и т. п. Чтобы были рамки окон, тогда еще надо:

gnome-session & 

Или в зависимости от DM свое название сессии. Тут уже можно проделывать любые операции как в обычной убунте — будь то установка пакетов, изменение конфигов и т. п. Что мы и делаем…

4.Настройки тем шрифтов если это необходимо.(Необязательный а иногда и вредный шаг)

Скопировать настройки из домашней папки пользователя chroot (исключая мусор типа папки cache, bash_history) в папку по пути

/etc/skel 

Этим вы сохраните тот внешний вид который настроили Внимание если вы вводили какие либо пароли (например skype или месенджеры и.т.д) они тоже сохранятся ! И каждая учетная запись на уже установленной системе будет с введенными паролями и Вашими настройками

5.Выход из chroot-окружения

После проделанных изменений, нужно удалить временные файлы, отмонтировать фс и т. п.:

aptitude clean
rm -rf /tmp/* ~/.bash_history
rm /etc/hosts
rm /etc/resolv.conf
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
umount /proc
umount /sys
umount /dev/pts
exit

6.Подготовка ISO-образа

Если мы изменили состав ПО в сборке, то надо выполнить следующие команды, которые сделают новые списки пакетов:

chmod +w myubuntu_iso/casper/filesystem.manifest
chroot myubuntu_root dpkg-query -W --showformat='${Package} ${Version}\n' > myubuntu_iso/casper/filesystem.manifest
cp myubuntu_iso/casper/filesystem.manifest myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/ubiquity/d' myubuntu_iso/casper/filesystem.manifest-desktop
sed -i '/casper/d' myubuntu_iso/casper/filesystem.manifest-desktop

Собственно, файлы *.manifest — это список пакетов в системе и файл filesystem.manifest-desktop — это файл только тех пакетов, которые буду устанавливаться на комп. То есть, если вы хотите оставить пакет на livecd, но сделать так, чтобы он не ставился на компьютер во время установки, то просто удалите его упоминание в этом файле.

Если вы поменяли или обновили ядро в chroot-окружении, то это же ядро надо скопировать на сам диск, чтобы могли грузиться модули. Например:

cp myubuntu_root/boot/vmlinuz-2.6.32-22-generic myubuntu_iso/casper/vmlinuz
cp myubuntu_root/boot/initrd.img-2.6.32-22-generic myubuntu_iso/casper/initrd.gz
gzip -dc myubuntu_iso/casper/initrd.gz | sudo lzma -7 > myubuntu_iso/casper/initrd.lz

7.Теперь необходимо запаковать корневую файловую систему обратно в squashfs-образ:

rm myubuntu_iso/casper/filesystem.squashfs
mksquashfs myubuntu_root myubuntu_iso/casper/filesystem.squashfs

8.Так как в составе диска убунты поменяли файлы, нужно пересоздать файл md5sum.txt

cd myubuntu_iso
rm -v md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

И можно уже приступить к созданию самого iso-образа: (однострочник)

genisoimage -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o \
/home/user/My_Ubuntu.iso /home/user/MyUbuntu/myubuntu_iso
 
comments powered by Disqus