Usermode-fs-tools/iso2stick

Материал из ALT Linux Wiki

iso2stick -- достаточно мощный конвертер, у которого много разных возможностей. Он перепаковывает официальные образы дистрибутивов ALT (в формате ISO-9660) в загрузочные образы USB-стиков (HDD-дисков). Для использования данной утилиты не требуется полномочий root, необходим только один пакет: usermode-fs-tools (в первую очередь пакет создавался ради этого скрипта-конвертера на POSIX shell размером более 1200 строк).

Формальное описание

$ iso2stick -h
Usage: iso2stick [<options>...] [--] <iso9660> <image> [<size>]

Options:
  -b, --bios-only        Make BIOS-only boottable system on x86.
  -D, --datadir=<PATH>   Add specified files to the boot disk.
  -d, --dual-boot        Add both 32-bit and 64-bit UEFI firmware
                         boot loaders for 64-bit target system,
                         such as x86_64 or aarch64.
  -e, --excludes=<FILE>  Set list for exclude files from ISO-9660.
  -f, --files=<FILE>     Set list for include files from ISO-9660.
  -g, --guid-gpt         Use GUID/GPT disk label instead BIOS/MBR.
  -m, --mode=<MODE>      One of the followed repack modes: rescue,
                         deploy, install, live, install+rescue,
                         install+live or install+live+rescue.
  -L, --lang=<LIST>      List of the languages, for example:
                         '"ru_RU=Russian" "en_US=English"'.
  -l, --initlang=<CODE>  Initial/default language code
                         ('ru_RU' used by default).
  -n, --no-clean         Keep temporary files on exit.
  -P, --pad-space        Fill free space on EFI-part by zero's.
  -q, --quiet            Suppress additional diagnostic.
  -r, --reserved=<SIZE>  Reserved space on the boot disk, in MiB.
  -S, --swap=<SIZE>      Specify SWAP partition size, in MiB.
  -s, --secure-boot      Use ALT shim's for UEFI Secure Boot.
  -T, --timeout=<SECS>   Specify boot menu timeout, in seconds.
  -t, --target=<ARCH>    Use specified target architecture: i586,
                         x86_64, aarch64, armh, ppc64le or e2k/v4.
  -U, --uuid=<UUID>      Specify UUID of the ROOT filesystem.
  -u, --uefi-only        Make UEFI-only boottable system on x86.
  -v, --version          Show this program version and exit.
  -h, --help             Show this help message and exit.

Please, report bugs to https://bugzilla.altlinux.org/

Ключевые возможности

  • Для запуска не требуется полномочий root, операция выполняется обычным пользователем.
  • По умолчанию размер создаваемого образа стремится к минимуму, т.е. на нём не останется свободного места.
  • Но можно указать явно, сколько мегабайт необходимо зарезервировать либо задать требуемый размер образа.
  • Замена конгломерата загрузчиков с графикой только одним без графики: в ряде случаев это увеличивает надёжность.
  • Единое меню при любых вариантах загрузки: генерируется само либо создаётся на основе пользовательского шаблона.
  • Можно "оторвать" неподходящий режим загрузки, препятствующий решению некоторой задачи на "железе".
  • Можно убрать не нужные файлы второй стадии загрузки, сократив размер диска и число пунктов загрузочного меню.
  • Можно добавить указанные файлы на создаваемый образ диска.
  • Можно заменить некоторые файлы в создаваемом образе диска.
  • Можно передать набор своих скриптов-хуков, выполняемых непосредственно перед созданием образа.
  • Можно конвертировать диски, предназначенные для другой аппаратной платформы.

Пока не реализованы

  • Возможность углубляться в образы initrd (первая стадия загрузки) и squashfs (вторая стадия загрузки).
  • Возможность замены устаревшего и ненадёжного propagator новыми скриптами make-initrd.
  • Возможность перепаковки initrd другими инструментами в тех случаях, когда make-initrd не подходит.
  • Возможность исправления "на лету" уже известных багов в определённых установочных образах.

РОДНОЙ режим ('native')

Режим работы программы "родной"/"чужой" определяется автоматически в процессе работы. В родном режиме (например, когда мы сидим на ppc64le и конвертируем ISO-образ для того же ppc64le) основные требования определяются утилитой grub2dirs. На Эльбрусах можно конвертировать образы только в родном режиме, т.к. на них обычно не ставится grub. Конвертирование образов для i586 на x86_64 также считается нативным.

ЧУЖОЙ режим ('foreign')

Интересной особенностью утилиты является возможность конвертирования образов на одной аппаратной платформе для другой аппаратной платформы. Например, операцию можно выполнить, сидя за компьютером x86_64, конвертируя диск для платформы aarch64. Данная возможность доступна с оговорками: в хостовой системе должен быть установлен grub и на исходном диске ISO-9660 в репозитории /ALTLinux/RPMS.main должны находиться требуемые RPM-пакеты, в основном, связанные с загрузчиком grub. Это ограничение действует для любых целевых носителей, кроме e2k/e2kv4. Другими словами: для конвертирования образов e2k/e2kv4 на другой платформе никаких особых требований нет, но использовать Эльбрус в качестве хостовой системы для других архитектур без установленного grub не выйдет, для остальных аппаратных платформ исходный ISO-диск должен быть установочным дистрибутивом ALT.

Командная строка

Синтаксис: iso2stick [<опции>...] <что-конвертируем> <во-что-конвертируем> [<размер>], где:

  • <опции> -- изменяют принятые умолчания, необязательны и будут подробно описаны далее;
  • <что-конвертируем> -- файл исходного образа ISO-9660 с дистрибутивом Альт (другие не подойдут) либо смонтированный каталог CD/DVD с файлами, находящимися на исходном диске;
  • <во-что-конвертируем> -- создаваемый IMG-файл либо каталог, в который будет сложен создаваемый образ usbstick.img вместе с файлами контрольных сумм -- SHA256 (checksum.256) и MD5 (checksum.MD5).
  • <размер> -- размер основного (корневого) раздела. Если не указывать, стремится к минимуму. По умолчанию в мегабайтах, но можно использовать буквенные сокращения после цифры: K-килобайты, M-мегабайты, G-гигабайты, T-терабайты.

В случае успеха программа завершается с нулевым кодом возврата.

Пример использования:

$ iso2stick ~/iso/alt-workstation-9.1-i586.iso .
$ ls -1
checksum.256
checksum.MD5
unpack.log
usbstick.img

TMPDIR

Полученный образ вместе с журналом распаковки и файлами контрольных сумм попадёт в указанный каталог только после успешного окончания операции. До этого программа работает с образами во временном каталоге, ориентируясь на переменную окружения TMPDIR, а если она не определена, то на каталог /tmp. В TMPDIR необходимо иметь столько свободного места, чтобы было достаточно для размещения удвоенного объёма исходных файлов (ISO-9660 плюс ваши файлы) * 2. Если на TMPFS недостаточно свободного места, переопределите TMPDIR перед запуском программы:

$ TMPDIR=$HOME/tmp iso2stick ~/iso/alt-workstation-9.1-i586.iso .
# либо так:
$ export TMPDIR=$HOME/tmp
$ iso2stick ~/iso/alt-workstation-9.1-i586.iso .

-n, --no-clean

По умолчанию, когда программа завершается, все файлы из временного каталога удаляются. Чтобы изменить это поведение, например, для детального анализа, в отладочных целях, используйте ключ --no-clean.

-q, --quiet

По умолчанию программа и все вызываемые ей утилиты выводит все отладочные сообщения в stdout и stderr. Чтобы изменить это поведение и сделать её менее "говорливой", используйте ключ --quiet. Примеры:

# Тихий запуск:
$ iso2stick -q ~/iso/alt-workstation-9.1-i586.iso .

# Тихий, но с созданием отчёта (для скриптов):
$ iso2stick ~/iso/alt-workstation-9.1-i586.iso . >mkstick.log 2>&1

# С выводом в консоль и созданием отчёта:
$ iso2stick ~/iso/alt-workstation-9.1-i586.iso . 2>&1 |tee mkstick.log

Политики копирования исходных файлов

При копировании файлов с исходного носителя применяется одна их двух политик:

  • Политика "включения нужного" (INCLUDES) -- применяется по умолчанию.
  • Политика "исключения не нужного" (EXCLUDES) -- применяется, когда указан соответствующий ключ.

Ядро Linux и файл первой стадии загрузки (initrd) всегда копируются, независимо от выбранной политики.

-e, --excludes=

Предписывает применить политику "исключения не нужного". Дополнительно следует указать файл с исключениями. Диск будет скопирован целиком, со всеми файлами стадий, кроме mediacheck, в исключения попадёт всё, что вы перечислите в файле исключений плюс все объекты файловой системы, связанные с загрузкой. Пример:

$ cat >EXCLUDES.lst <<EOF
ALTLinux
altinst
EOF
$ iso2stick -e EXCLUDES ~/iso/alt-workstation-9.1-i586.iso .

Здесь будет скопировано всё содержимое диска за исключением каталога ALTLinux, второй стадии загрузки с инсталлятором altinst и файлов, связанных с загрузкой.

-f, --files=

Предписывает применить политику "включения нужного", хотя она и так используется по умолчанию. Дополнительно следует указать файл с перечислением нужных файлов и каталогов, которые должны попасть на целевой носитель. К ним всегда добавляется подкаталог .disk, нужные файлы стадий, которые определяет выбранный режим конвертирования (см. следующий раздел), а если среди стадий есть установщик, то будет скопирован и каталог ALTLinux с базой RPM-пакетов. Пример:

$ cat >INCLUDES.lst <<EOF
index.html.ru
index.html
EOF
$ iso2stick -m intsall -f INCLUDES ~/iso/alt-workstation-9.1-i586.iso .

Здесь наоборот, копируется только squashfs инсталлятора altinst, база RPM-пакетов, два указанных HTML-файла плюс скрытый каталог .disk.

Режимы конвертирования

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

-m, --mode=

По возможности программа сама пытается определить нужный режим конвертирования, но можно задать его явно после опции --mode. Поддерживаются следующие режимы (указываются в нижнем регистре целиком либо только сокращение, см. в скобках):

  • (R) rescue -- только спасательная система ALT Rescue.
  • (D) deploy -- как rescue, но с дополнительным пунктом меню Rescue Deploy и файлами пользователя.
  • (I) install -- только установщик операционной системы.
  • (L) live -- только "живая" система (LiveCD).
  • (IR) install+rescue -- только две указанные стадии.
  • (IL) install+live -- только две указанные стадии.
  • (ILR) install+live+rescue -- все три стадии обязательны.
iso2stick --mode=rescue ~/iso/alt-workstation-9.1-i586.iso .

Здесь с исходного диска будет скопирован только файл второй стадии со спасательной системой ALT Rescue, в начальное загрузочное меню попадут только те позиции, которые связаны с ALT Rescue.


ВНИМАНИЕ: СТАТЬЯ ЕЩЁ НЕ ЗАКОНЧЕНА!!!


Enjoy! ;-)