Установка rootfs
Установщик с оф. сайта Ubuntu — это ядро с ramdisk, содержащим скрипты для распаковки rootfs с флешки во внутреннюю память или на SD. По умолчанию ядро-установщик умеет ставить только один вариант rootfs, однако его можно модифицировать в целях получения некого универсального установщика.
Как работает оф. установщик
- После загрузки монтируется флешка, на ней ищется tar.gz с соответствующим именем и контрольной суммой
- Скрипт ищет самый большой внутренний раздел. Если есть карточка, предлагает ставить на неё
- Распаковывается рутфс
- Скрипт установки вызывает update-initramfs из-под chroot
- update-initramfs hook вызывает flash-kernel
- flash-kernel ищет раздел с ядром, собирает образ обновленного ядра, используя abootimg, и прошивает новое ядро
- после перезагрузки загружается установленная система
Модификация образа установщика
Итак, есть файл , представляющий из себя образ, подлежащий разбору программой abootimg. Согласно мануалу, для разборки следует использовать команду:
abootimg -x <bootimg> <bootimg.cfg> <kernel> <ramdisk>
где <bootimg> — это имя исходного файла, последующие параметры — имена файлов распакованных компонентов.
Работа с ramdisk
Распаковка:
mkdir ramdisk cd ramdisk gunzip -c ../your-ramdisk-file | cpio -i
Далее, собственно, модификация. Все основные действия выполняются из /scripts/installer, функция mountroot()
Пакуем ramdisk обратно:
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz
Упаковка результата
abootimg --create <bootimg> -f <bootimg.cfg> -k <kernel> -r newramdisk.cpio.gz
У меня получился образ ac100-tarball-installer.img, <range type="comment" id="205919">который ищет на юсб флешке tar.gz и распаковывает его во внутреннюю память.</range id="205919"> Будьте внимательны, убедитесь, что tar.gz единственный и именно тот, который нужен. Этот образ может не отработать на не-ubuntu дистрибутивах, пробуйте, дорабатывайте скрипт.