Это старая версия документа.
Содержание
Создание собственного дистрибутива на базе Ubuntu вручную
Конечно очень радостно, что существуют такие инструменты как Reconstructor и Ubuntu Customization Kit, однако они всё выполняют в автоматическом режиме и не очень-то подходят для тонкой настройки под себя. В этой статье я постараюсь рассказать как можно руками сделать всё то, что делают вышеназванные инструменты и как изменить многие недоступные им параметры.
Что нам потребуется
В принципе, все дальнейшие инструкции можно выполнять пошагово, либо тупо взять мои скрипты из конца статьи и использовать их, быть может чуть модифицировав. Однако мы ж хотим собрать свой собственный дистрибутив, ни на что не похожий, поэтому очень полезным окажется хотя бы начальное знание скриптового языка bash или любимого мной perl (на котором, кстати, написаны все скрипты из конца статьи).
Кроме того потребуется установить несколько пакетов для дальнейшей работы:
sudo aptitude install squashfs-tools chroot
Всё, теперь можно приступать к дальнейшей работе.
Эта процедура является рабочей и позволяет создать загружаемый LiveCD Ubuntu (вместе с автоматическими обнаружением и настройкой) с нуля. Вам не нужно использовать существующий LiveCD никоим образом.
Вы можете создать ремикс Ubuntu и распространять его в виде LiveCD. Здесь показан способ создания подобного диска без оригинального образа.
Фронт работ
Для создания Ubuntu Custom Live CD нужно продумать три важных момента: 1) В какой системе мы будем строить наш диск. Надеюсь, все Вы прекрасно понимаете, что мы ведем речь про компьютер под управлением Ubuntu. Если Ubuntu у Вас не установлена, то Вы можете поставить ее на виртуальную машину и там уже строить образ диска. Помимо этого, нам нужно поставить следующие пакеты для создания живого диска: SYSLINUX, Squashfs-tools, genisoimage Первый пакет — загрузчик ядра, второй — файловая система SquashFS, а третий — создатель образа диска.
2) Папка для образа диска. Образ диска — это то, что будет записано на CD/DVD/BluRay/USB (в зависимости от того кому что нравится). Просто создайте отдельную папку для образа диска. Для образа нужно скопировать: - Загрузчик ISOLinux - Ядро с initrd и изолированной системой - Дополнительные файлы для указания времени загрузки и других важных (и не очень) параметров
Папка для образа диска создается отдельно от корня будущей изолированной системы.
3) Изолированная система
Изолированная система — это та система, которая будет загружена в LiveCD. Ей не нужны ни ядро, ни загрузчик, если Вы собираетесь устанавливать ОС с помощью установщика Ubiquity. Для того чтобы провести автоматическое определение и настройку оборудования, потребуется живая система под символичным названием Casper. Ее нужно установить в initrd, а ядро Casper скопировать в папку образа диска.
Изолированная система хранится и выполняется в виде файла, сжатого в файл SquashFS. На данный момент ИС будет сохранена в виде папки в хост-системе.
Таким образом, создание ISO образа сводится к - созданию изолированной системы и установки в ней пакетов с ПО; - сжатию изолированной системы в файл; - созданию и конфигурированию образа диска, состоящего из загрузчика ISOLinux, ядра системы, сжатого файла файловой системы (простите за тавтологию) и многого другого; - записи ISO на диск и проверки его работы.
Создание изолированной системы
Для начала, установим debootstrap в хост-системе с помощью командной строки, после чего создадим папки «work» (для работы) и «image» (для изолированной системы). После установки запускаем debootstrap
Обратите внимание: Версия debootstrap для Ubuntu содержит файлы для загрузки только следующего релиза Ubuntu! Т. е. Вы не сможете скачать базовую систему для raring (Ubuntu 13.04) в precise (Ubuntu 12.04 LTS). На наше счастье, обойти это ограничение легко обойти, скачав debootstrap из репозитория raring или взяв последнюю версию из папки pool и установив его с помощью dpkg. Помимо того, у debootstrap нет зависимостей, а значит его установка вручную не вызовет никаких проблем в Вашей системе
sudo apt-get install debootstrap mkdir -p work/chroot cd work sudo debootstrap —arch = i386 trusty chroot http://mirror.yandex.ru/ubuntu
Обратите внимание: Если Вы хотите собрать следующий релиз Ubuntu, но не можете его загрузить, воспользуйтесь следующей хитростью:
cd /usr/share/debootstrap/scripts/ # переходим в папку со скриптами загрузки sudo ln -s gutsy trusty # Создаем символическую ссылку в trusty на gutsy (т. е. показываем программе: загружать Ubuntu 14.04 надо также, как и 7.10) mkdir -p work/chroot # создаем папку для работы и изолированной системы cd work sudo debootstrap —arch = i386 trusty chroot http://mirror.yandex.ru/ubuntu # скачиваем минимальную базовую систему (Ubuntu 14.04 LTS x86) в папку chroot с зеркала Яндекса
Важно установить приложения вроде MySQL, Virtualbox после того как были скачаны ядро Linux (а оно у нас не скачано!(настолько у нас минимальна система)) и установлены общие настройки, потому что эти приложения требуют установки своих модулей ядра для полной настройки.
Если Вы планируете установить что-либо, использующее метапакеты окружений рабочего стола (например xfce4), Вам также потребуется связать файл в изолированной системе как следует (не только с помощью devpts). Иначе, GRUB при установке выдаст ошибку и Вы не сможете настроить пакеты. Чтобы этого избежать свяжите устройства с помощью команды:
sudo mount —bind /dev путь/до/chroot/dev
Аналогично нужно примонтировать proc, sysfs и devpts Теперь скопируем системные файлы (их можно взять на любой машине с Ubuntu, подключенной к интернету):
sudo cp /etc/hosts путь/до/chroot/etc/hosts sudo cp /etc/resolv.conf путь/до/chroot/etc/resolv.conf sudo cp /etc/apt/sources.list путь/до/chroot/etc/apt/sources.list
sudo sed s /<Версия, которая у Вас установлена>/<Версия, которую Вы скачали> / </etc/apt /sources.list> путь/до/chroot/etс/apt/sources.list Например, у Вас стоит Ubuntu 12.04, а Вы скачали Ubuntu 11.10, то команда будет выглядеть так: sudo sed s /precise /oneiric/ </etс/apt /sources.list> chroot/etc/apt/sources.list
Если Вам нужно, Вы можете подправить sources.list и добавить туда сторонний репозиторий. Если Вы добавляете PPA репозиторий, то Вам помимо самого репозитория нужно добавить еще и OpenPGP ключ для пакетного менеджера в изолированной системе. Его можно найти на странице описания репозитория (он может выглядеть вот так: 1024/12345678). Скопируйте или запишите часть после косой черты (как здесь: 12345678). Этот ключ нужно добавить как можно скорее, как только мы чрутнемся в изолированную систему.
sudo chroot chroot mount none-t proc /proc mount none-t sysfs /sys mount none-t devpts /dev/pts export HOME=/root export LC_ALL=C sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 12345678 # Substitute " 12345678 " with the PPA's OpenPGP ID. apt-get update apt-get install --yes dbus dbus-uuidgen > /var/lib/dbus/machine-id dpkg-divert --local --rename --add /sbin/initctl
Отсутствие этого файла вызывает массу проблем в изолированных системах во всех системах, начиная с Ubuntu 9.10: https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/430224
Решением может стать символическая ссылка на /bin/true:
ln -s /bin/true /sbin/initctl
Обновите пакеты, если хотите :
apt-get --yes upgrade
Установите пакеты, необходимые для живой системы:
apt-get install --yes ubuntu-standard casper lupin-casper apt-get install --yes discover laptop-detect os-prober apt-get install --yes linux-generic
Ранее, до Ubuntu 10.10 пакет discover назывался discover1.
Если Вы загружаете ОС Ubuntu 10.04, то Вам нужно поставить следующие пакеты: grub2 plymouth-x11
apt-get install --yes grub2 plymouth-x11
Для ранних релизов (заканчивая версией 9.04) была характерна следующая проблема: ОС вешала сеть, если был установлен Network Manager. На наше счастье, данная проблема была устранена в релизе 9.10. Команда для установки NM:
apt-get install --no-install-recommends network-manager
Далее, установите те программы какие Вы захотите. На данном этапе Вы создаете свою систему. Заполняйте ее тем, чем хотите. Однако перед этим поставьте программу ubuntu after install для установки тех программ, которые Вы добавить забыли. После наполнения ПО возвращайтесь к данному руководству.
Установка программы установки
Для GTK интерфейса — Unity, GNOME, XFCE и LXDE
Unity — стандартная ОРС для ubuntu, самая красивая ОРС (по моему мнению) GNOME — что-то по-новому от старого доброго Mac OS X XFCE и LXDE — это ОРС, не нагружающие ресурсы. Рекомендованы для установки на старых компьютерах
apt-get install ubiquity-frontend-gtk
Для Qt интерфейса — KDE
KDE — это Windows-подобное окружение рабочего стола и пожалуй, во всем хочет походить на своего старшего собрата (например это ОРС самое большое по объему данных)
apt-get install ubiquity-frontend-kde
Очистка Чрута.
Если Вы установили все программы, то убедитесь что будет работать
rm /var/lib/dbus/machine-id
Ранее в этом руководстве я просил Вас сделать бекап /sbin/initctl. Вы его сделали? Он сейчас может потребоваться. Если эта команда не сработает, восстановите /sbin/initctl из бекапа.
rm /sbin/initctl dpkg-divert --rename --remove /sbin/initctl
Если у Вас более одного ядра Linux, удалите старые ядра:
ls /boot/vmlinuz-3.**-**-generic> list.txt sum = $ (cat list.txt | grep '[^]' | wc-l) if [$ sum-gt 1 ]; then dpkg-l 'linux-*' | sed '/ ^ ii /! d ;/' "$ (uname-r | sed"s/\(.*\)-\([^ 0-9]\+\)/\1/")" '/ d; s / ^ [^] * [^] * \ ([^] * \).*/\ 1 / ;/ [0-9] /! d' | xargs sudo apt-get -y purge fi rm list.txt
После чего проведите очистку:
apt-get clean rm-rf /tmp/* rm /etc/resolv.conf umount -lf /proc umount -lf /sys umount -lf /dev/pts exit
Если у Вас все еще подключен /dev, отключите его:
sudo umount /путь/до/чрута/dev
То есть, Вы вошли в изолированную систему, установили пакеты, провели очистку и вышли.
Создание папки для CD диска и ее заполнение
Необходимо установить на хост-систему 4 пакета: 1. Syslinux — загрузчик, позволяющий сделать ISO образ загружаемым; 2. SquashFS-tools — программа для сжатия образа системы 3. Genisoimage — пакет для работы с файлами образов диска. Нам из этого пакета понадобится утилита mkisofs 4. SBM — загрузчик для LiveCD
следующей командой:
sudo apt-get install syslinux squashfs-tools genisoimage sbm
Создайте папку для cd с тремя подкаталогами:
mkdir -p image/{casper, isolinux, install}
# То же самое можно сделать командой 'mkdir image image/casper image/isolinux image/install' Во-первых, Вам нужно скопировать ядро и initrd, созданное с помощью Casper в изолированной системе. Скопируйте их куда-нибудь вне изолированной системы и проведите следующее:
cp chroot/boot/vmlinuz-3.**-**-generic image/casper/vmlinuz cp chroot/boot/initrd.img-3.**-**-generic image/casper/initrd.gz
Во-вторых, если у Вас возникли проблемы с копированием ядра или инитрд — может быть, у Вас этот файл не один — тогда используйте следующие команды:
for file in chroot/boot/vmlinuz-3.**-**-generic; do cp $file image/casper/vmlinuz; done for file in chroot/boot/initrd.img-3.**-**-generic; do cp $file image/casper/initrd.gz; done
Теперь надо поставить ISOLinux и SBM командами:
cp /usr/lib/syslinux /isolinux.bin image/isolinux/ cp /boot/memtest86+.bin image/install/memtest cp /boot/sbm.img image/install/
Инструкции при загрузке при создании Remix
Для того чтобы дать какие-либо инструкции при загрузке пользователю нужно создать файл image/isolinux/isolinux.txt, например:
# splash.rle ************************************************** ********************** This is an Ubuntu Remix Live CD. For the default live system, enter "live". To run memtest86 +, enter "memtest" ************************************************** **********************
Графика во время загрузки может отсутвовать, но это не главное. Главное состоит в том, что в тексте сверху есть спецсимвол, указывающий на файл splash.rle. Чтобы создать этот хитрый символ нужно:
1. Скопировать текст и потом его изменить. или 2. Использовать следующую команду:
printf "\x18"> emptyfile
и изменить файл emptyfile, используя любой текстовый редактор. Добавьте имя файла после символа и затем со следующей строки напишите то, что Вы хотите вывести на экран в качестве приветствия. Сохраните данный файл как isolinux.txt и дело в шляпе!
или
3. (Способ для Ъ-линуксоидов!) Используйте vi, нажмите Ctrl+v и затем Ctrl+x для того чтобы создать спецсимвол. Это не работает ни в nano, ни в gedit, ни в каком редакторе, похожем на них!
Для того чтобы создать файл splash.rle, создайте изображение 640*480, конвертируйте его в 15 цветов и сохраните файл в формате .bmp. После установите NetPBM и выполните команды:
bmptoppm splash.bmp> splash.ppm ppmtolss16 '#ffffff=7' <splash.ppm> splash.rle
Если Вы хотите использовать анимированные изображения, такие как Usplash, убедитесь в том что Вы добавили «VGA = RRR», где RRR — ширина изображения.
Настройка загрузчика
Создайте файл image/isolinux/isolinux.cfg для настройки загрузчика. Пожалуйста, прочтите инструкцию по созданию конфига в /usr/share/doc/syslinux для того чтобы узнать все возможности конфигурирования. Здесь я выложу образец конфига (если что, сверяйтесь с ним):
DEFAULT live LABEL live menu label ^ Start or install Ubuntu kernel / casper / vmlinuz append file = / cdrom / preseed / ubuntu.seed boot = casper initrd = / casper / initrd.gz quiet splash - LABEL check menu label ^ Check CD for defects kernel / casper / vmlinuz append boot = casper integrity-check initrd = / casper / initrd.gz quiet splash - LABEL memtest menu label ^ Memory test kernel / install / memtest append - LABEL hd menu label ^ Boot from first hard disk localboot 0x80 append - DISPLAY isolinux.txt TIMEOUT 300 PROMPT 1 # prompt flag_val # # If flag_val is 0 , display the "boot:" prompt # Only if the Shift or Alt key is pressed, # Or Caps Lock or Scroll lock is set (this is the default). # If flag_val is 1 , always display the "boot:" prompt. # Http://linux.die.net/man/1/syslinux syslinux manpage
Не забудьте выбрать правильное расширение для initrd (initrd.gz или initrd.lz). Теперь в CD можно войти, по крайней мере после того, как мы создадим образ.
Формальности.
Создание манифеста.
sudo chroot chroot dpkg-query-W - showformat = '$ {Package} $ {Version} \ n' | sudo tee image / casper / filesystem.manifest sudo cp-v image / casper / filesystem.manifest image / casper / filesystem.manifest-desktop REMOVE = 'ubiquity ubiquity-frontend-gtk ubiquity-frontend-kde casper lupin-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
Сжатие изолированной системы.
Для того чтобы сжать систему в один файл, нужно ввести команду:
sudo mksquashfs chroot image/casper/filesystem.squashfs
Эта команда создаст на диске filesystem.squashfs с сжатой ОС. Если Вам нужно установить с LiveCD, оставьте раздел /boot в покое. Если Вы хотите создать LiveCD только для демонстрации, то /boot можно удалить. Тогда команда, указанная выше, будет иметь вид:
sudo mksquashfs chroot image/casper/filesystem.squashfs -e /boot
Да, и еще: если Вы создаете Убунту на версии, которая вышла раньше, то нужно установить пакет из той версии, какую Вы хотите создать! (Иначе Ваш LiveCD не загрузится) Например, у Вас установлена Ubuntu 12.04, а Вы хотите создать сборку Ubuntu 14.04. Тогда Вам потребуются инструменты из trusty (14.04) репозитория. Помимо файла сжатой файловой системы, нужно написать файл с размером этой ФС. Для этого выполним команду
printf $ (sudo du -sx --block-size = 1 chroot | cut -f1)> image/casper/filesystem.size
Создание diskdefines
nano image/README.diskdefines
Пример:
# define DISKNAME Ubuntu 14.04 "Trusty Tahr" - Release i386 ** Remix ** # define TYPE binary # define TYPEbinary 1 # define ARCH i386 # define ARCHi386 1 # define DISKNUM 1 # define DISKNUM1 1 # define TOTALNUM 0 # define TOTALNUM0 1
Признание LiveCD подлинной
Создайте жесткую ссылку ubuntu на папку с образом диска и папку «.disk». Без этого LiveCD будет загружаться но USB Creator работать не будет. На всякий пожарный, создайте файлы со следующей информацией:
cd image ln -s . ubuntu mkdir .disk cd .disk touch base_installable echo "full_cd / single"> cd_type echo 'Ubuntu 14.04 "Trusty Tahr" - Release i386 ** Remix **'> info echo "http / / ubuntu-rescue-remix.org"> release_notes_url cd ../..
Вычисление MD5
sudo -s (cd image && find . -type f -print 0 | xargs -0 md5sum | grep -v"\ ./md5sum.txt"> md5sum.txt) exit
Это вычислит контрольные суммы md5 для всех файлов в будущем образе.
Создание ISO образа системы
Создать ISO образ из одной папки можно командой
cd image sudo mkisofs -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 .. /ubuntu-remix.iso cd ..
Файл boot.cat будет создан автоматически. Теперь созданный Вами образ можно использовать для установки в Virtualbox и на реальном железе.