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 не подходит.
  • Возможность исправления "на лету" уже известных багов в определённых установочных образах.
  • Поддержка gfxterm, локалей и графических тем в grub для тех платформ, где это работает.

РОДНОЙ режим ('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

По умолчанию iso2stick и вызываемые ей утилиты выводят все отладочные сообщения в 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

-t, --target=

По умолчанию диски конвертируются в "родном" режиме (см. выше). Это означает, что если исходный носитель ISO-9660 предназначен для архитектуры x86_64, пользователь запускает конвертер iso2stick, сидя за компьютером с такой же архитектурой. В противном случае программа завершится с ошибкой. Чтобы конвертировать диск для "чужой" архитектуры, необходимо указать её в опции --target=. Поддерживаются такие варианты:

Хостовая i586 x86_64 aarch64 armh ppc64le e2k e2kv4
i586 N F F F F F F
x86_64 N N F F F F F
aarch64 F F N F F F F
armh - - - N - F F
ppc64le F F F F N F F
e2k - - - - - N F
e2kv4 - - - - - F N

Каждая строка определяет возможности на хостовой системе. В столбцах указана архитектура конвертируемого диска. Обратите внимание, что пока в Альте grub не собран для armh, поддерживаются лишь две "чужие" платформы: e2k и e2kv4. В пересечениях ячеек используются следующие обозначения:

  • N -- конвертирование в "родном" режиме, указывать целевую архитектуру не требуется.
  • F -- возможно конвертирование в "чужом" режиме, --target= обязателен и определяет архитектуру конвертируемого диска.
  • - -- конвертирование невозможно, даже при наличии RPM-пакетов с grub в каталоге /ALTLinux/RPMS.main на исходном носителе.

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

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

  • Политика "включения нужного" (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 и файлов, связанных с загрузкой. Строго говоря именно так делать не стоит, поскольку в данном примере пункты меню, связанные с установщиком ОС, всё равно не исчезнут. Чтобы они не попадали в меню, придётся использовать собственный шаблон меню (см. далее). Другая альтернатива: подменять файл второй стадии загрузки и базу RPM-пакетов своим исправленным вариантом.

-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.

Автоматически формируемое загрузочное меню

При создании целевого диска загрузочное меню по умолчанию формируется автоматически в соответствии с выбранным режимом конвертирования (см. предыдущий раздел). Поддерживается три опции, которые могут оказать влияние на формируемое меню, они описаны далее. Следует отметить, что эти опции не влияют на меню, создаваемое на основе пользовательского шаблона.

-T, --timeout=

По умолчанию таймаут выбора первого пункта меню составляет 60 секунд. Данное значение можно переопределить опцией --timeout.

-l, --initlang=

Код языка, изначально выбираемый по умолчанию для пунктов меню, связанных "установщиком ОС" и "живой системой", также используется на e2k, e2kv4, не используется для пунктов меню ALT Rescue. Например, "ru_RU".

-L, --lang=

Позволяет переопределить список поддерживаемых языков графической системы ("установщик ОС" и "живая система") в формате "код_языка=язык_в_меню", позиции разделяются пробелом и закавычиваются. Не используется на e2k и e2kv4.

Модификация создаваемого образа

-b, --bios-only

...

-u, --uefi-only

...

-d, --dual-boot

...

-s, --secure-boot

...

-g, --guid-gpt

...

-P, --pad-space

...

-r, --reserved=

...

-S, --swap=

...

-U, --uuid=

...


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


Enjoy! ;-)