Как пересобрать iso образ linux

Обновлено: 07.07.2024

Для удобства, я решил поделить всю статью на две части. А именно:

Часть 1: Создание образа с диска или локальной папки.

Часть 2: Запись\очистка CD\DVD

* ISO-9660: Старый стандарт расположения данных, позволяющий использовать только стандарт 8.3 для имен файлов (т.е. 8 символов - имя файла и 3 — расширение).

* Rock Ridge: Расширение ISO-9660, предполагающее использование длинных имен для файлов и UNIX-подобных ссылок. Позволяет сохранить все атрибуты файла, такие как владелец и права доступа. Атрибуты UNIX-файлов при чтении диска в Windows не отображаются.

* Joliet: Расширение ISO-9660, разработанное Microsoft, которое позволяет использовать символы Unicode в именах файлов, так же как и использовать длинные имена файлов. Кроме того, Joliet предоставляет возможность создания урезанных имен для совместимости с MS-DOS, выглядящих наподобие FILENA

1.TXT. Позволяет использовать имена файлов длиной до 64 символов, включая пробелы.

ЧАСТЬ 1: Создание образа с диска или локальной папки.\n Так уж получилось, что в Linux создать образ можно несколькими разными способами, например используя утилиты, которые есть в любой современной сборке, или же встроенные средства самой ОС.

Утилита Genisoimage (другое название mkisofs входит в состав пакета утилит под названием cdrtools) — Программа создания образа файловой системы для последующей записи на носитель. Утилита поддерживает расширенные форматы файловых систем для компакт дисков: Rock Ridge, Joliet, Blu-ray Disc и прочее.

  • Программы для записи компакт-дисков с графическим интерфейсом обычно неявно используют mkisofs. На основе mkisofs создан усовершенствованный пакет программ dvd+rw-tools, позволяющий дописывать перезаписываемые компакт-диски без необходимости создания образа диска.

Позволяет создать такие типы образов как:

  • Загрузочные (boot).
  • С расширениями Rock Ridge. Эти расширения необходимы именно для ОС GNU\Linux, а точнее для работы с правами доступа пользователей.
  • С расширениями Joliet. Joliet-расширения не являются частью стандарта ISO9660.

Эти расширения, в основном, используются в ОС Windows-подобных при записи дисков. Характерным для Joliet-расширений является: unicode-имена файлов и директорий, длина одного компонента пути может быть до 64 unicode-символов. Часто бывает полезно.

Создание образа из папки Создать образ из папки можно, выполнив следующую команду.

где, - iso-level 4 указывает не накладывать ограничения на длину имени файла и вложенность директорий. - o задаёт имя конечного образа. - J указывает использовать Joliet-расширения (если диск будет использоваться на ОС Windows). - yourname.iso /home/alex/doom3 задаёт папку, которая будет рекурсивно включена в образ.

Можно поступить и проще, выполнив команду

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

Но прежде, создаем точку монтирования:

Производим монтирования iso файла:

где iso_file.iso — это наш образ; /media/iso/file_name/ — точка монтирования;

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

и выполнить команду

Чтобы образ монтировался автоматически при загрузке, добавьте следующую строку в /etc/fstab/

Т.е. Сам процесс достаточно понятен и логичен. Создаем образ из необходимой нам папки, далее создаем точку монтирования (папку) после, монтируем образ и переходим в точку монтирования, где просматриваем содержимое образа.

Аналогичным способом выше описанному, является метод использования mkisofs Не стоит забывать как и в первом случае, что если диск должен быть совместим с windows системами об этом надо позабоиться, включив в команду необходимые опции, а именно -r которая включает расширение RockRidge стандартной iso9660

Образ будет сохранен в текущей директории.

Создание образа с носителя Почему в заголовке, я написал создание образа «с носителя» а не с диска. Ответ прост, как не странно многие забывают, что образ это своего рода архив в котором целиком сохраняется структура файловой системы того носителя который был указан при создании самого образа, соответственно это может быть и диск и Flash-карта и много что еще.

Тут все просто, что-бы создать образ CD\DVD выполняем следующую команду.

/dev/cdrom — наше устройство /media/my_iso/name.iso — путь для сохранения образа. loopback устройства в ядре должны быть включены. Но об этом можно не париться, если конечно вы не сами собирали ядро.

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

Стоит отметить этот способ не очень надежен. где /mnt/…/my.iso путь куда будет сделан образ. не забудьте, что папка /media/disk/ уже должна существовать.

Для создания образа с диска, так же, можно поступить так.

Утилита и опции нам уже известны.

Для создания образа с Flash-карты мы можем использовать все те же команды и опции. Например выполнив вот эту команду, вы получите образ флэшки

ЧАСТЬ 2: Запись\очистка оптических дисков в консоли. (CD-R\RW) Сама процедура делиться на два этапа, на первом этапе мы создаем образ с помощью mkisofs, на втором записываем этот образ на диск используя программу cdrecord. Все просто и понятно. Я опишу полностью весь процесс, от начала до конца. И так, поехали…

Первым этапом копирования оптических дисков в консоли (как уже было сказано выше) является создания ISO-образа данных. Если в качестве источника выступает оптический носитель (не Audio CD), то достаточно выполнить команду:

Система задумывается на какое-то время (это нормально, никаких внешних признаков вы не увидите), будет только гореть лампочка активности оптического привода и жесткого диска , что и говорит о том, что создается образ. Через 3-5 минут в текущей директории появиться новый файл test.iso, являющийся точной копией оптического диска в приводе /dev/cdrom.

Если же исходные данные находятся на жестком диске (т.е. в директории или в нескольких), то необходимо собрать их все в одной папке. Например, в домашнем каталоге создаем папку burn и в нее перемещаем данные, необходимые для переноса на оптический носитель. Для создания ее образа необходимо в консоли набрать команду:

В этом примере следующие обозначения:

-o — имя создаваемого iso-файла (test.iso) -J — используем записи Joliet для совместимости с системой Windows -r — Rock Ridge расширение для совсестимости с *nix -v — так называемый verbose-режим. В этом случае в процессе создания образа будет выводиться различная дополнительная информация -V — указываем имя тома (test_disk); Это имя будет отображаться при просмотре в Windows

Система вновь уходит в долгие раздумья, после чего создает новый файл folder_image.iso. Можно проверить, насколько корректно был создан образ. Для этого необходимо смонтировать наш ISO-файл, для этого создаем папку /media/iso_image/new и монтируем туда наш образ

Зайдя в папку new, можно увидеть содержимое образа folder_image.iso. Этот же образ можно записать на оптический носитель. Но сперва нам необходимо узнать параметры вашего привода. Для этого можно воспользоваться командой:

выводом команды будет что-то в роде:

Выделенная жирным строка — это и есть наш привод, а цифры 0,0,0 — его адрес.

Результаты работы данной команды будет необходимо использовать во время указания параметров ключа dev команды cdrecord. А именно адрес нашего оптического накопителя. Для записи оптического диска наберите команду:

Обозначения здесь следующие: -v — verbose-режим. Обозначает тоже, что и в предыдущем случае -eject — выдвигает лоток привода после окончания процесса записи -speed — указываем скорость записи диска. В нашем случае — 48х -dev — записывающее устройство. Числа взяты из вывода программы cdrecord с параметром scanbus

Параметр speed указывает скорость записи, -eject заставит привод выдвинуть лоток после окончания записи, fs определяет размер буфера FIFO, а -v указывает утилите выводить подробную информацию о ходе записи.

Опции speed в качестве параметра так же можно передать ноль, speed=0 в таком случае программа сама выберет оптимальную скорость для записи диска, это конечно если вы не хотите указывать ее в ручную или вам это просто не нужно.

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

Запись CD-RW дисков В данном случае, есть несколько вариантов, диск может уже содержать данные, и нам либо надо дописать новые на диск, либо удалить старые и записать все по новой. Очистка диска может проводить как быстрая так полная. Быстрая выполняется командой:

Через несколько секунд диск будет готов для записи. Oпции: blank=all — очистить весь диск blank=disc — то же самое blank=fast — быстрая очистка диска blank=session — очистить последнюю сессию blank=unclose — открыть последнюю записанную сессию

Для прямого копирования содержимого с одного диска на другой можно воспользоваться командой:

Эта команда перенаправляет поток данных с привода CD-ROM (/dev/scd1) на записывающий привод, dev=0,0,0. Прямое копирование достаточно удобная процедура, однако в случае возникновения ошибок вы можете испортить болванку. Для избежания печальных последствий лучше вначале сделать образ CD-ROM’a и сохранить его на жестком диске и лишь потом уже писать на болванку. Эта процедура будет иметь следующий вид:

отвечают за следующее. С помощью fs=8m мы указываем программе размер буфера, чем больше, тем лучше. Важно также, чтобы он не опустошался во время записи. Указанных 8 мегабайт в обычных условиях вполне достаточно для качественной записи диска даже на слабых машинах. Опция -dummy позволяет протестировать привод прежде чем приступить непосредственно к записи данных.

Создание мультисессийного диска Диски создаются сессиями, а сами сессии деляться на треки. Структура одной сессии такова: вводная часть, содержание сессии(TOC — Table Of Contents), непосредственно данные, и закрывающая часть, которая делает невозможным дальнейшее добавление данных на диск. Используя режим мультисессии несколько сессий можно объединить, слинковав их содержания. Создание многосессионых дисков очень просто с помощью графических программ, таких как X-CD-Roast или K3b. Но такая же процедура выполняется не намного сложнее и в консоли.

Так создается первая сессия на диске. Опция -multi позволяет сделать диск открытым для добавления других сессий, оставляя диск читаемым. Для того, чтобы добавить еще одну сессию, программе mkisofs необходимо знать номера начального и конечного секторов диска. Узнать это можно следующим образом:

Результат будет правильным, только в том случае, если диск записан с возможностью добавления данных. Теперь к уже известным параметрам программы mkisofs, рассмотренным ранее, добавим еще два — -C и -M

В результате, команда для создания iso-образа будет иметь следующий вид:

Можно так же эту команду объединить с предыдущей. В итоге, получим следующее:

Теперь привод считает информацию о последней записанной сессии и объединит ее содержание с содержанием новой сессии. Предполагается, что последняя сессия записана с опцией -multi

Запись DVD-R/RW Для этого необходим пакеты dvd+rw-tools, которые содержаться практически в любом современном дистрибутиве и включают в себя программы для записи и форматирования DVD-дисков. Для выполнение записи мы будем использовать утилиту growisofs, а так же dvd+rw-format для очистки DVD+RW. Запись DVD не намного отличается от записи CD-болванок. В этом легко убедиться.

Запись DVD-/+R дисков Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-toots. Для записи используем команду

для DVD+R или DVD-R Эта же команда может использоваться с опцией speed

Для записи образа используем

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

Запись DVD-/+RW дисков Очистить диск можно выполнив команду

Теперь диск готов, что-бы записать на него данные

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


Часто возникает необходимость добавить, удалить или изменить файлы на iso образе. Например вы хотите добавить несколько треков на образ диска с музыкой или отредактировать параметры загрузки для Live CD. В Windows эта задача решалась очень просто, существует большое количество как известных так и не очень утилит с подобным функционалом таких например Alcohol, UltraISO и т д. Но в Linux дела обстоят немного странным образом.

С одной стороны в Linux работа с образами дисков поддерживается на уровне системы, без каких либо дополнительных утилит, но с другой файловая система iso не поддерживает редактирование данных. Поэтому все операции по изменению содержимого образов сводятся к распаковке, редактированию и обратной упаковке образа. Можно конечно установить ту же UltraISO в wine и радоваться жизни но это не Ъ и мы пойдем другим путем.

Способ первый, редактирование образов вручную

Этот вариант немного трудоемкий, но он раскрывает суть работы с образами, будь то в Windows или Linux все происходит именно таким способом, только если вы используете дополнительные утилиты все действия будут автоматизированы и скрыты от пользователя. Вы будете чувствовать что редактируете образ напрямую внося изменения в его файловую систему, но это не так, это лишь видимость создаваемая утилитой.

И так, приступим. Порядок такой: монтируем образ, копируем из него содержимое во временную папку, вносим необходимые изменения и собираем образ обратно.

Создаем временную папку и копируем данные:

Я создал каталог в оперативной памяти чтобы ускорить процесс, но если у вас недостаточно ОЗУ или очень большой образ можно писать и в любое другое место на жестком диске.

Переходим в временную папку и вносим изменения:

И наконец собираем образ обратно:

Теперь вы знаете как все происходит, но повторять такой процесс каждый раз неудобно, да и не нужно. В последнее время для Linux появилось несколько утилит для редактирования образов, которые мы рассмотрим ниже.

Редактирование образов в Linux с помощью ISO Master

ISO Master - утилита для создания и редактирования образов для Linux. Поддерживается файловая система ISO9660 а также расширения Joliet и RockRidge. Утилита позволяет открывать образы форматов .nrg (Nero) и .mdf (Media Descriptor Format). Также есть функция создания загрузочных дисков.

Установка

ISO Master есть в репозиториях большинства популярных дистрибутивов. Для установки в Ubuntu и Linux Mint выполните:

Для установки в Gentoo:

А пользователи ArchLinux могут установить утилиту из AUR.

Запуск и работа

Для запуска программы наберите:


В главном окне необходимо выбрать образ диска, затем программа подготовит диск к работе (вы уже знаете как) и отобразит содержимое в нижней части окна.

Здесь с помощью контекстного меню можно удалять, переименовывать или редактировать файлы, Для редактирования нужно указать текстовый редактор в разделе Tools -> Options -> Editor:


Чтобы добавить новый файл к образу. Выберите желаемый файл в верхней части окна и кликните на кнопке Add:


Чтобы сохранить внесенные изменения перейдите в меню File и выберите пункт Save As, затем укажите желаемое имя для нового образа и нажмите кнопку save:

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

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

Подготовка

Снимаем образ с компакт-диска. Работа с образом быстрее, да и резервная копия никогда не помешает.

Создаём папку для монтирования образа, аналог «подключения виртуального диска» в виндах. В зависимости от места создания, возможно, придётся делать от имени суперпользователя. Лично у меня эта папка была создана однократно и именно для таких целей - для подключения образов дисков.

Монтируем образ компакт-диска в папку. Только от имени суперпользователя.

Создаём папку для копирования содержимого диска, в которой будем изменять файлы. Путь к cd-dir должен быть указан либополный, либо относительно текущего каталога. У меня обычно это папка в домашнем каталоге.

Копируем файлы с образа в папку.

Размонтируем образ, он нам больше не нужен. Тоже от имени суперпользователя. Если этого не сделать сейчас, образ будет автоматически размонтирован при перезагрузке.

Изменение содержимого

Всё содержимое компакт-диска сейчас у нас находится в папке cd-dir. Редактируем его по усмотрению.

Сборка каталога в образ

А вот эта задача уже посложнее. Стандарт загрузочного компакт-диска подразумевает наличие на нём двух файлов: загрузочного каталога и собственно образа загрузчика.

Например, в Ubuntu 8.04 эти два файла находятся в папке isolinux. Образ загрузчика - isolinux.bin, загрузочный каталог - boot.cat.

Загрузочный каталог - файл размером 2 килобайта, его содержимое роли не играет.

Особый интерес представляет образ загрузчика.

BIOS не умеет грузиться с CD-ROMа, но умеет считывать с него информацию. Специально для загрузки с компакт-дисков была введена спецификация El Torito, El Torito Bootable CD Specification. Суть её в следующем: BIOS сканирует все дисковые системы компьютера, и по стандарту ISO9660 (формат хранения данных на компакт-дисках), эмулирует образ загрузчика как жёсткий диск (или флоппик), после чего происходит загрузка с этого диска в обычном режиме.

Нужно найти оба этих файла, после чего собрать образ компакт-диска из каталога:

mkisofs -r -iso-level 4 -b boot.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o cdimage-new.iso cd-dir/

boot.bin - полный путь к образу загрузчика относительно корня компакт-диска

boot.cat - полный путь к загрузочному каталогу относительно корня компакт-диска

-no-emul-boot - нужен в том случае, когда образ загрузчика не является точным образом загрузочного флоппи, включая размер

-boot-load-size 4 - задаёт число загрузочных секторов, ключ нужен для совместимости с «глючными» биосами, которых много. Если параметр будет не 4, то некоторые экземпляры откажутся запускаться

-boot-info-table - также для совместимости

Получившийся диск записываем командой:

Умолчания

/dev/cdrom - файл-устройство привода компакт-дисков

cdimage-orig.iso - образ диска до редактирования

cdimage-new.iso - образ отредактированного диска

/mnt/vcd/ - каталог для монтирования образов

cd-dir - каталог для редактирования содержимого диска

Дополнительно

ISO9660 - стандарт файловой системы для хранения данных на дисках CD. Формат введён для независимости доступа к дискам от рабочей платформы (Windows, Linux, и т.д.)

Есть несколько уровней спецификации:

1. Формат имён файлов - 8.3, как в DOS. Не больше 8 символов в имени каталога. Не больше 8 вложенных каталогов. В именах используются только буквы латинского алфавита. Фрагментация файлов не допускается.

2. Имена файлов ограничены 32 символами. Набор символов в именах неограничен.

3. Допускается фрагментация файлов (необходимо для пакетной или инкрементной записи CD).

4. (ISO9660-2) Максимальная длина пути - 207 символов. Нет ограничения на вложенные папки. Символа «.» (точка) в именах файлов не носит особого значения.

Общее ограничение ISO9660 - размер файла не может превышать 2GB.

Расширение стандарта, называемое Joliet, добавляет поддержку длинных имён файлов и не-ASCII символов в именах.

Я собирал собственный образ ISO Ubuntu 18.04 по инструкции LiveCDCustomization на системе Ubuntu 14.04.

Мне необходимо было поставить некоторые программы, чтобы они были доступны сразу с LiveCD, без установки. Это удобно, особенно без наличия интернета.

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

В оригинальной инструкции LiveCDCustomization есть некоторые неясные моменты и неточности. Сама инструкция устарела, и частично не работала.

Поэтому я делал по шагам и записывал выполняемые действия.

Важно понимать, что вы делаете: вся кастомизация LiveCD проходит под chroot, и на рабочую систему (ту, где вы сейчас работаете) влияния не оказывает.

Но если выйти из chroot, все введенные команды применяются к рабочей системе. Это требуется в некоторых местах инструкции: при первичной подготовке, и в конце, при сборке. Смотри не перепутай

Подготовка

Устанавливаем зависимости на хост-систему

Потребуется 2 пакета, один занимается работой со сжатой файловой системой squashfs, другой для создания ISO-образа CDROM (ISO-9660):

Странно, но у меня уже были установлены эти пакеты. Ради интереса найдем, когда эти пакеты были установлены, для чего поищем в истории apt:

Также потребуется виртуальная машина для быстрого тестирования. Я использовал Virtualbox

Монтируем оригинальный образ ISO в mnt

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

Подмонтируем этот ISO образ в каталог

/livecdtmp/mnt для дальнейшей работы:

Копируем содержимого mnt в extract-cd

Расжимаем файловую систему squashfs и перемещаем содержимое в edit

Подготавливаем рабочую среду

Копируем resolv.conf с рабочей системы, чтобы было сетевое соединение внутри чрута, также делаем это для сети::

Чрутимся, и начинаем работать со своим кастомизированным образом.

dbus-uuidgen из оригинальной инструкции я пропустил

Файл /etc/resolv.conv оказался пустым, значит что-то я сделал не так. Отредактируем его вручную, скопировав содержимое /etc/resolv.conv из рабочей системы:

Теперь сеть у нас доступна внутри чрута, проверим

Кастомизация своего образа Ubuntu

Напомню, сейчас мы находимся под чрутом ( chroot edit ), и у нас работает сеть. Все что написано ниже, является делом вкуса.

Ставим необходимые пакеты

Смотрим установленные пакеты:

Если хотим, обновляем пакеты:

Устанавливаем свои пакеты:

Следующие пакеты поставить не удалось, так как их нет в /etc/apt/ :

узнать, какие репо следует добавить для установки

Установить программы можно и из deb-пакетов, на примере Atom:

Кастомизация

Это по-желанию: читаем оригинальную инструкцию LiveCDCustomization, раздел Customizations и настраиваем фон рабочего стола, шрифты, региональные настройки и прочее. Первый шаг dbus-uuidgen и dpkg-divert можно пропустить, для Ubuntu 18.04 они не повлияли на работу apt .

Проверка и сборка ISO образа

Проверяем, что нет пользователя UID=999

В оригинальной мане указано, что если существует пользователь с UID 999, с LiveCD невозможно будет загрузиться. Такой пользователь может возникнуть при установке Virtualbox.

есть есть, то выполнить usermod -u 500 $hit , где $hit - имя проблемного пользователя

Читайте также: