Минимальный LiveCD с coreutils и bash

Нередко мне нужен LiveCD с минимальным набором системных утилит для работы с дисками, типа dd, shred, fdisk, gparted и др. И чем меньше будет образ, тем лучше, потому что грузится это дело по сети в небыстрые KVM-системы, типа IPMI, iLO, iDRAC и т.п. К примеру 300-мегабайтный образ с gparted может грузиться минут 5.

Ещё одним немаловажным требованием был свежий dd, который поддерживает параметр status=progress.

Так вот необходимость назрела очень давно. Искал долго. Перебрал с десяток live-систем на базе линукса. Уже даже начал смотреть в сторону BSD-систем. Проблемы были две: или очень большой образ, или обкоцанный dd из состава busybox.

Но на днях наконец нашёл дистрибутив, который слегка поверг меня в шок. И это…

[барабанная дробь]

Tiny Core Linux!

В минимальной конфигурации 64-битная версия весит 15МБ, а 32-битная версия и того меньше — 13МБ! Это кажется абсолютный рекорд. Доступны также более тяжёлые версии с иксами — 27 и 18 МБ соответственно.

Немного поковырявшись внутри, я понял, как можно добавить в образ дополнения с corelinux и bash, а также практически любой другой софт, который доступен в репозитории. Вкратце расскажу как собрать свой образ со желаемым набором софта.

Итак, если заглянуть внутрь TinyCorePure64-9.0.iso (это 64-битная версия с иксами), то мы там увидим три каталога: EFI, boot и cde. Первые два, понятно, относятся к загрузке. Лично я там подправил только boot/isolinux/isolinux.cfg, чтобы по умолчанию выставлялся режим 800×600, а не 1024х768 (vga=789 вместо vga=791).

Третий каталог самый интересный. В нём хранятся дополнения с расширением TCZ, а также служебные LST-файлы, которые определяют подключение дополнений для разных режимов загрузки. Рядом с TCZ-файлами рядом лежат файлы с контрольной суммой (.tcz.md5.txt) и могут быть файлы, описывающие зависимости, необходимые для загрузки дополнения (.tcz.dep).

Например, дополнение bash состоит из трёх файлов: bash.tcz, bash.tcz.dep, bash.tcz.md5.txt. Файл bash.tcz.dep содержит одну стоку — readline.tcz. Значит помимо bash.tcz нам ещё понадобится дополнение readline. В свою очередь readline может зависеть от другого дополнения и так далее.

Все дополнения загружаются по ссылке типа http://www.tinycorelinux.net/9.x/x86_64/tcz/bash.tcz

В итоге нужно ручками отследить все зависимости и скачать контрольные суммы. Для 32-битной версии ссылка меняется с x86_64 на x86.

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

Новые дополнения надо затем надо добавить в файл onboot.lst. В моём случае это были две дополнительные строки: coreutils.tcz и bash.tcz. Логично предположить, что дополнения из этого файла будут подключены в системе при загрузке.

В VirtualBox всё так и произошло. А вот в IPMI от SuperMicro не сработало и иксы не запустились. Пришлось ручками монтировать CR-ROM и загружать мои дополнения:

sudo mount /dev/sr0 /mnt/sr0
tce-load -i /mnt/sr0/cde/optional/bash.tcz
tce-load -i /mnt/sr0/cde/optional/coreutils.tcz

После этого можно проверить вывод команды mount. Появятся новые точки монтирования типа loopback.

Осталось собрать образ. Я тупо взял команду из iso-файла, немного подправив её под xorriso (в Debian нету mkisofs):

xorriso -as mkisofs -pad -l -r -J -V TinyCorePure64 -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -eltorito-alt-boot -eltorito-platform efi -b EFI/BOOT/efiboot.img -no-emul-boot -o TinyCorePure64-9.0-with-coreutils.iso TinyCorePure64-9.0

-o определяет название выходного файла, а последний параметр — это путь к каталогу, где лежат файлы для сборки. Естественно, предварительно надо распаковать в него исходный iso, добавить нужные дополнения, и при желании подправить конфиги загрузчиков.

Это была версия с иксами. Версия без оных (CorePure64-9.0.iso) не содержит каталоги EFI и cde. Соответственно, если нужна поддержка EFI, то добавляем нужные файлы и параметры сборки образа. Чтобы добавить дополнения, в корне образа создаём каталог cde, в него кладём onboot.lst с перечислением нужных дополнений, а в подкаталог cde/optional кладём файлы дополнений. Чтобы дополнения автоматически подключились при загрузке системы, надо ещё добавить параметр ядра cde (прямо в меню загрузчика или заранее в файле isolinux.cfg). Образ собирается следующей командой:

xorriso -as mkisofs -pad -l -r -J -V CorePure64 -no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -hide-rr-moved -o CorePure64-9.0-with-coreutils.iso CorePure64-9.0

Думаю, тут всё понятно.

Таким образом можно собрать Tiny Core Linux с любым набором дополнений.

Мои 64-битные образы получились размером 30 и 17 МБ (с иксами и без соответственно).

Оставить комментарий