Как изменить squashfs

Obviously, I don't want to actually modify a squashfs. What I would like to do though is take an existing squashfs, a set of files and create a new squashfs which is identical to the old one except...

Obviously, I don’t want to actually modify a squashfs. What I would like to do though is take an existing squashfs, a set of files and create a new squashfs which is identical to the old one except that the files in the set either replace similar files in the squasfs or are just added if there is no similar files.

OK, that last part sounded weird. So let me give an example:

There is a squashfs called mfs.squash. Inside it there is a file ./a/foo.
I want to create a new squashfs which is identical to the old squashfs – except
that there is a new file a/b and I overwrite the ./a/foo with one of my specification.

phk's user avatar

phk

5,7837 gold badges39 silver badges70 bronze badges

asked Mar 9, 2011 at 8:08

HandyGandy's user avatar

Mount the squashfs:

mkdir /mnt/squishy
mount mfs.sqash /mnt/squishy -t squashfs -o loop

Copy the squashfs to another place:

mkdir /tmp/squooshtacular
find /mnt/squishy -xdev -print0 | cpio -pa0V /tmp/squooshtacular

Copy the new files into place:

cp ./a.foo /tmp/squooshtacular/a.foo

Make the new squashfs:

mksquashfs /tmp/squooshtacular mfs_with_bbq_sauce.squash

answered Mar 9, 2011 at 12:21

Shawn J. Goff's user avatar

Shawn J. GoffShawn J. Goff

44.5k25 gold badges133 silver badges145 bronze badges

3

you can append new_or_modified files_dir on a squashfs_file without unsquash
nor cpio mounted_squashfs as above.
See the detailed response at:

Append to sub-directory inside squashfs file

Jeff Schaller's user avatar

Jeff Schaller

65.2k34 gold badges106 silver badges240 bronze badges

answered Nov 7, 2017 at 11:38

user3477652's user avatar

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

Вступление

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

ShquashFS выводит всё это на новый уровень. Это файловая система только для чтения, которая позволяет вам сжимать целые файловые системы или отдельные директории, переписывать их в другие устройства/разделы или в обычные файлы, а затем устанавливать их непосредственно (если это устройство) или использовать закольцовку устройства (в случае с файлом). Модульный, компактный системный дизайн SquashFS блестящ. Для целей архивирования SquashFS предоставляет вам гораздо большую гибкость и скорость исполнения, чем архивы .tar.gz.

В выпуск SquashFS исходные тексты Linux-ядра (что делает возможным чтение Squash на вашем ядре), а также вспомогательная программа mksquashfs, которая создает сжатые файловые системы (в файле или в блочном устройстве).

Последнее дерево выпуска SquashFS 2.x, предыдущая была 1.x. Этот документ описывает оба эти выпуска с соответствующими пометками. Например, если какое-либо свойство или параметр различны в этих выпусках, это будет обозначено как: новое значение (2.х) или старое значение (1.х).

Обзор SquashFS

  • Данные, связующие узлы и директории сжаты.

  • Squashfs сохраняет полностью идентификаторы пользователя/группы (uin/gids) (32 бита) и время создания файла.

  • Поддерживаются файлы до 232 байт. Файловые системы могут быть до 232 байт.

  • Данные узлов и директорий очень сильно сжаты и упакованы в байтовых пределах. Каждый сжатый узел имеет в среднем размер 8 байт (конкретная длина зависит от типа файла (то есть обычный файл, директория, символьная ссылка и блочные/символьные узлы устройства имеют различные размеры).

  • Squashfs может использовать блоки размером до 64 Кб (размер по умолчанию 64 Кб). Использование 64-килобайтовых блоков позволяет достигать большей степени сжатия, чем обычный 4-килобайтовый размер блока.

  • SquashFS привносит концепцию фрагментарных блоков: возможность объединять множественные файлы, по размеру меньшие блока, в отдельный блок, достигая больших степеней сжатия.

  • Копии файлов обнаруживаются и удаляются.

  • Поддерживаются архитектуры как big-endian, так и little-endian.

  • SquashFS может собирать файловые системы, созданные на машинах с различной последовательностью байтов.

Разъяснения

Теперь давайте убедимся, что любые последующие обсуждения вам будем проще понять. Процедура запуска работы SquashFS, в целом, состоит из следующих шагов:

  • Патч и рекомпиляция Linux-ядра для возможности поддержки SquashFS

  • Компиляция mksquashfstool

  • Создание сжатой файловой системы с mksquashfs

  • Проверка: установка squashfs в место временного назначения

  • Модифицирование стартовых скриптов /etc/fstab вашей целевой Linux-системы для установления новой сжатой файловой системы, когда это необходимо

Приготовления для SquashFS

Приобретение SquashFS

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

Подготовка совместимого со SquashFS ядра

Для того, чтобы читать SquashFS, вам необходимо, чтобы она поддерживалась вашим ядром — точно так же, как если бы это были файловые системы reiserfs или ext3. Вы должны убедиться в наличии соответствующего пaтча для вашей версии ядра — он должен быть расположен в субдиректории linux-2.x.y в дереве исходных текстов SquashFS. Помните также, что в большинстве случаев вам понадобится чистое (оригинальное) Linux-ядро от www.kernel.org. Если ваше ядро от продавца-дистрибьютера, оно может быть уже пропатчено, поэтому с патчем SquashFS скорее всего не будет работать, поскольку патчи SquashFS сделаны для оригинальных Linux-ядер.

«Склейка» исходных текстов ядра

С исходниками ядра и наличием надлежащего патча все, что вам нужно делать это (мы исходим из того, что у вас имеются исходные тексты ядра Linux в /usr/src/linux и xnj и исходные тексты SquashFS в /usr/src/squashfs):

Внести изменения в директорию исходников SquashFS и скопировать пaтч ядра (мы исходим из того, что он называется squashfs-patch) в /usr/src/linux.

cd /usr/src/squashfs
cp linux-2.x.y/squashfs-patch /usr/src/linux

Идем в директорию исходных текстов Linux /usr/src/linux:

cd /usr/src/linux

Внимание: помните, что мы не будем покидать эту директорию в течение всех последующих связанных с ядром процедур и все дорожки будут даваться относительно /usr/src/linux.

Теперь «склеиваем» исходные тексты с помощью пaтча SquashFS:

patch -p1 < squashfs-patch

Компиляция ядра 2.6.x

чистим и подготовим ядро программы:

make distclean
make mrproper

Выберем конфигурацию ядра используя ваш любимый метод (config/menuconfig/xconfig/gconfig):

make menuconfig

В разделе «File systems» («Файловые системы»), подразделе «Miscellaneous (различные) file systems» активируем опцию «Squashed filesystem» в качестве модуля либо как связанную с ядром. Обязательно компилировать SquashFS внутри ядра только в том случае, если планируем использовать «сквошенные» начальные виртуальные диски (initrd).

Для использования сжатого начального виртуального диска, активируем «Initial RAM disk support» в разделе «Device drivers», подразделе «Block devices».

Чтобы иметь возможность установить сжатую файловую систему после закольцовки устройства, следует активировать опцию «Loopback device support» («Поддержка закольцовки») и разделе «Device drivers» («Драйвера»), подразделе «Block devices» («Блочные устройства»).

Теперь вы можем компилировать ядро и модули:

make

Компиляция ядра 2.4.x

Выберем конфигурацию:

make menuconfig

В разделе «File systems» активируем опцию «Squashed filesystem» в качестве модуля либо как связанную с ядром. Обязательно компилировать SquashFS внутри ядра только в том случае, если планируется использовать «сквошенные» начальные виртуальные диски (initrd).

Если хотим использовать «сквошенные» начальные вирт диски, активируем «Initial RAM disk support» (поддержку начальных вирт дисков) в разделе «Block devices» («Блочные устройства»).

Чтобы иметь возможность установить сжатую файловую систему после закольцовки устройства, следует активировать опцию «Loopback device support» («Поддержка закольцовки») и разделе «Device drivers» («Драйвера»), подразделе «Block devices» («Блочные устройства»).

Теперь можно компилировать ядро и модули:

make dep
make bzImage
make modules

Инсталляция и тестирование ядра

Теперь пора инсталлировать ваше новое ядро с возможностью работы SquashFS. Инструкции ниже для инсталляции и начальной загрузки ядра на хостовой машине.

Мы исходим из того, что ядро было компилировано на x.86 архитектуре, и что сжатый образ ядра находится в arch/i386/boot/ субдиректории дерева ядра. Теперь скопируем ядро в директорию /boot (и назовем для удобства bzImage-sqsh):

cp arch/i386/boot/bzImage /boot/bzImage-sqsh

Не забудем инсталлировать модули ядра, если они у вас есть:

make modules_install

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

cat /proc/filesystems

Или, если установили поддержку SquashFS в качестве модульного ядра:

insmod squashfs
cat /proc/filesystems

Если видим строку squashfs над другими файловыми системами, это означает, что SquashFS успешно внедрена в ядро.

Компиляция вспомогательной программы mksquashfs

Теперь нам нужно скомпилировать mksquashfs — инструмент для создания сжатых файловых систем

cd /usr/src/squashfs/squashfs-tools

Компилируем и установим mksquashfs:

make
cp mksquashfs /usr/sbin

Если все прошло хорошо, набираем mksquash в строке подсказки, что выдаст сообщение как им пользоваться.

Вспомогательная программа mksquashfs, как она есть

Использование mksquashfs

mksquashfs — это инструмент для создания новых «сквошенных» файловых систем и для добавления новых данных в уже существующие сквошенные файловые системы. Основной вид командной строки для mksquashfs:

mksquashfs source1 source2 ... destination [options]
source1, source2 и т. д.
файлы и директории, которые должны быть в итоге добавлены в полученную файловую систему с относительными и/или абсолютными путями
destination
обычный файл (файловая система, образ файла) или блочное устройство (такое как /dev/fd0 или /dev/hda3), куда мы хотим поместить свою сжатую файловую систему.

Заметки по работе mksquashfs по умолчанию:

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

Идентичные файлы будут удалены, поэтому будет оставаться только один физический экземпляр (в SquashFS 2.x можно отменить поиск/удаление копий с опцией —no-duplicates).

Если в пункте назначения уже есть существующая SquashFS по умолчанию, новые пункты будут добавлены в существующую ветвь директорий. Необходимо проверить список опций ниже, чтобы заставить mksquash переписать пункт назначения полностью и/или изменить его таким образом, чтобы добавить новые элементы исходных текстов. Пожалуйста обратите внимание, что невозможно присоединять записи к файловой системе, созданной с mksquashfs1.x используя mksquashfs2.x. Для этого понадобится установить SqyashFS-1.x файловую систему и скопировать файлы куда-нибудь, а затем присоединить их с другими нужными файлами, чтобы создать файловую систему SquashFS-2.x.

Если даны один файл исходных текстов или директория, они становятся ветвью в заново созданной файловой системе. Если даны два или более файлов исходников и/или директорий, они все станут подпунктами в ветви новой файловой системы.

Полученная в результате файловая система будет упакована во множество пакетов 4 Кб: это необходимо для файловых систем, используемых в блочных устройствах. Если вы абсолютно уверены, что вам это не понадобится, используйте опцию —nopadoption, чтобы отменить эту операцию.

Смотрите следующий раздел с более подробным описанием всех возможных опций.

Опции командной строки

Все возможные опции для mksquashfs представлены в таблице ниже.

Таблица 1. Опции командной строки инструмента mksquashfs

Описание опций

-2.0 заставляет mksquashfs версии 2.1 создавать файловую систему версии 2.0
-all-root или —root-owned объединяет все файлы целевой файловой системы в ветвь (UID=o, GID=o)
-always-use-fragments разделяет все файлы размером больше блока на фрагменты (только 2.x, достижение больших степеней сжатия)
-b [block size] использует [block size] размер блока файловой систему (32 Кб по умолчанию) — это может быть также 512, 1024, 2048, 4069, 8192, 16384 или 32768
-be или -le запускает big endian либо little endian файловую систему, соответственно.
-check-data активирует дополнительные проверки файловой системы
-e [file 1] ([file 2] …) задает, какие файлы и/или директории нужно опустить из новой файловой системы, которая должна создаваться
-ef [file] указывает файл, который содержит перечень файлов/директорий, которые нужно исключить
-force-gid [GID] устанавливает все групповые ID в целевой файловой системе в [GID] (может быть указано как имя или число)
-force-uid [UID] устанавливает все юзерские ID в целевой файловой системе в [UID] (может быть указано как имя или число)
-info выдает файлы, их оригинальный размер и степень сжатия после добавления в файловую систему
-keep-as-directory если исходный текст представляет из себя одну директорию, опция делает эту директорию субдиректорией ветви в созданной файловой системе
-noappend если целевой файл/устройство уже содержит сжатую файловую систему, лучше перепишите его, чем добавлять новые данные в уже существующую файловую систему
-no-duplicates не обнаруживает/удаляет одинаковые имена файлов
-noD или —noDataCompression не сжимать данные
-noF или —noFragmentCompresstion не сжимать фрагменты (только для 2.x)
-no-fragments не создавать фрагментарные блоки (только для 2.x, это создаст практически такую же файловую систему, как 1.x)
-noI или —no-Inode-Compresstion не сжимать таблицу узлов
-nopad не паковать полученную файловую систему во множественные пакеты 4 Кб
-root-becomes [name] может быть использована в процессе присоединения к уже существующей сжатой файловой системе: это создаст новый корень и [имя] директорию, которая будет содержать все пре-существующие файлы/директории
-version выдает сообщение о версии, авторских правах и лицензии

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

Создание и использование сжатых файловых систем

Основные шаги

Для того, чтобы создать сжатую файловую систему из одной директории (скажем, /some/dir (какая-то/директория)) и вывести ее в обычный файл (таким образом продуцируя образ файловой системы), нужно сказать только одну волшебную фразу:

mksquashfs /some/dir dir.sqsh

mksquashfs начнет сжимать и печатать получаемое число узлов и размер записанных данных, так же, как среднюю степень сжатия. Теперь у нас есть образ директории /some/dir в файле dir.sqsh. Теперь можно использовать команду установки, чтобы установить ее используя устройство закольцовки:

mkdir /mnt/dir
mount dir.sqsh /mnt/dir -t squashfs -o loop

Чтобы проверить, получилось ли то, что ожидали:

ls /mnt/dir

Если мы хотим вывести файловую систему непосредственно в устройство (скажем, дискета на /dev/fd0):

mksquashfs /some/dir /dev/fd0

Затем просто установим устройство:

mount /dev/fd0 /mnt/floppy -t squashfs

И проверим, все ли в порядке:

ls /mnt/floppy

Сжатие файловых систем

Операции, описанные здесь, обращены к большинству случаев, когда может использоваться сжатая файловая система только-для-чтения, хотите ли вы, чтобы она была на блочном устройстве или в файле. Это может быть все что угодно начиная от FTP/HTTP архивов, которые часто не обновляются до сжатого сегмента памяти и все, что угодно в этом духе.

Пример 1

Давайте предположим, что у нас есть директория /var/arch со множеством файлов и что надо превратить ее в сжатую файловую систему и сохранить на вашем сегменте ветви в качестве файла (это будет образ файловой систему который вы установите через кольцевое устройство). Операции, которые понадобится сделать:

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

mksquashfs /var/arch /var/arch.sqsh
mkdir /mnt/tmp
mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop
ls /mnt/tmp

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

/var/arch.sqsh/var/archsquashfsro,defaults0 0

Извлекаем файловую систему из временного места установки и установите используя компонент fstab:

umount /mnt/tmp
mount /var/arch

Теперь просто убедимся, что все работает хорошо:

ls /var/arch

Пример 2

Предположим, что у нас есть два раздела жесткого диска, /dev/hda6 (который пуст) и /dev/hda7 (который больше, чем /dev/hda6, установлен в /at/arch, содержит те же данные и полон). Теперь скажем, мы хотим сжать файловую систему /dev/hda7 и переместить ее в /dev/hda6, потом использовать /dev/hda7 для каки-то других целей. Мы предположим, что у нас будет следующая строка в /etc/fstab (reiserfs это просто пример файловой системы, используемой на /dev/hda7):

/dev/hda7/var/archreiserfsdefaults0 0

И точно таким же образом, как с предыдущим примером:

mksquashfs /var/arch /var/arch.sqsh
mkdir /mnt/tmp
mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop
ls /mnt/tmp

Если все прошло хорошо, извлекаем /dev/hda7 (если нужно) и используйте dd чтобы копировать var/arch/sqsh в /dev/hda6:

umount /dev/hda7
dd if=/var/arch.sqsh of=/dev/hda6

Теперь изменим строку в /etc/fstab для /dev/hda7 на:

/dev/hda6/var/archsquashfsro,defaults0 0

Установим новую файловую систему и проверим, все ли прошло хорошо:

mount /var/arch
ls /var/arch

Не забудем стереть ненужный образ файловой системы:

rm /var/arch.sqsh

Создание маленьких/встроенных систем

Под «маленькие/встроенные», подразумеваются Linux-системы, которые строятся в первоначальной загрузкой c дискет, IDE/USB флэш дисков, iso9660 CD-ROM’ов, маленьких жестких дисков и т.д. Хотите ли вы иметь вашу целую корневую файловую систему или единичный носитель (единичный сегмент, одна дискета) или у вас модульная система (несколько дискет или сегментов диска), процедура практически идентична. Создание таких Linux-систем стоит вне контекста этого HOWTO — есть специальные HOWTO и гиды для этого (такие, как Bootdisk HOWTO и Linux From Scratch — посетите tldp.org чтобы найти эти документы).

Сжатые файловые системы на дискетах/флэш/жестких дисках

Чтобы использовать SquashFS для создания Linux-систем на маленьких дисках, нужно сделать следующие обычные шаги для создания минимальных систем.

Проделайте следующие операции в соответствующих пунктах:

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

Используйте mksquashfs для создания начального виртуального диска только-для-чтения и/или ветви и/или других файловых систем.

Не забудьте установить типа файловых систем для squashfs в /etc/fstab и/или начальных скриптах вашей системы для установления сжатых файловых систем.

Пример с дискетой. Предположим что у нас есть дерево системы дискеты в /home/user/floppylinux и мы хотим поместить корневую файловую систему на одну дискету, а /usr на другую. Что надо сделать:

cd /home/user
mksquashfs floppylinux root.sqsh -e usr
mksquashfs floppylinux/usr usr.sqsh

Примечание 1: здесь можно видеть, как мы используем опцию -e чтобы исключить директорию /usr из образа корневой файловой системы.

Примечание 2: не забудьте указать squashfs в директории /etc/fstab вашего корневого диска или стартовых скриптах когда устанавливаете файловую систему /usr.

Вставляем корневой диск в накопитель (предполагается , что на ней есть, положим, компилятор, и, таким образом, файловая система существует на этой дискете, а корневая файловая система будет постоянно храниться под директорией /boot этой файловой системы):

mount /mnt/floppy
cp root.sqsh /mnt/floppy/boot

Когда будет сделано, вытаскиваем корневую дискету, меняем дискеты на /usr диск и используем dd для передачи данных на usr:

dd if=usr.sqsh of=/dev/fd0

Сжатые файловые системы на CD-ROM

Посредством SquashFS можно сжимать большие файловые системы, что может быть использовано в CD дисках (просто как пример).

Запустите SquashFS в Linux-ядре целевой системы. Создаем сжатую корневую файловую систему. Изменяем начальные скрипты /etc/fstab целевой системы чтобы установить сжатую файловую систему, когда она нам понадобится.

Если мы создаем корневую файловую систему из запущенной Linux-системы, используем опцию -e, чтобы mksquashfs исключил все псевдо-файловые системы, такие, как /proc, /sys (на Linux-ядре после 2.5x) и /dev (когда используется DevFS). Также не забываем добавить сам образ ядра файловой системы который создается вместе с mksquashfs (Предполагается, что вы знаете причины для этих исключений).

Благодарности

Я бы хотел выразить мою искреннюю благодарность и безмерное уважение:

Phillip Lougher — за его блестящую работу по squashfs, за создание эксклюзивного патча для linux-2.4.18, за его помощь в редактировании этого howto и ответы на мои письма.

Tabatha Marshall из TLDP Проекта Документации Linux за помощь мне написании этого HOWTO финального выпуска 1.0.

Всех из Проекта Документации Linux за их великолепную работу над всеми HOWTO и гидами, которые сильно помогли мне в исследовании и изучении тонкостей Linux.

Всех из рассылочных листов Проекта Документации Linux, которые помогли мне начать.

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

Лицензия

Этот документ может быть использован и распространен в пределах и под условиями , последующими дальше в Open Content licencе. Коротко это означает, что вы можете свободно изменять и распространять это HOWTO с основным условиям , что вы сохраняете ссылку на автора и авторские права. Полный текст лицензии вы можете увидеть на http://www.opencontent.org/opl.shtml


Artemyi I. Pavlov

Опубликовал и редактировал Виктор Мелехин

Оригинал статьи

tool to create and append to squashfs filesystems

Synopsis

mksquashfs source1 source2 ...  FILESYSTEM [Options] [-e list of exclude dirs/files]

Description

Squashfs is a highly compressed read-only filesystem for Linux. It uses either gzip/xz/lzo/lz4/zstd compression to compress both files, inodes and directories.  Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1Mbytes (default block size 128K).

Squashfs is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in constrained block device/memory systems (e.g. embedded systems) where low overhead is needed.

Options

Filesystem build options

-tar

read uncompressed tar file from standard in (stdin).

-no-strip

act like tar, and do not strip leading directories from source files.

-tarstyle

alternative name for -no-strip.

-cpiostyle

act like cpio, and read files from standard in (stdin).

-cpiostyle0

like -cpiostyle, but filenames are null terminated.

-comp COMP

select COMP compression. Compressors available: gzip (default), lzo, lz4, xz, zstd, lzma.

-b BLOCK_SIZE

set data block to BLOCK_SIZE.  Default 128 Kbytes. Optionally a suffix of K or M can be given to specify Kbytes or Mbytes respectively.

-reproducible

build filesystems that are reproducible (default).

-not-reproducible

build filesystems that are not reproducible.

-mkfs-time TIME

set filesystem creation timestamp to TIME, which is an unsigned 32-bit int indicating seconds since the epoch (1970-01-01).

-fstime TIME

synonym for mkfs-time.

-all-time TIME

set all file timestamps to TIME, which is an unsigned 32-bit int indicating seconds since the epoch (1970-01-01).

-no-exports

don’t make filesystem exportable via NFS (-tar default).

-exports

make filesystem exportable via NFS (default).

-no-sparse

don’t detect sparse files.

-no-xattrs

don’t store extended attributes.

-xattrs

store extended attributes (default).

-noI

do not compress inode table.

-noId

do not compress the uid/gid table (implied by -noI).

-noD

do not compress data blocks.

-noF

do not compress fragment blocks.

-noX

do not compress extended attributes.

-no-tailends

don’t pack tail ends into fragments (default).

-tailends

pack tail ends into fragments.

-no-fragments

do not use fragments.

-always-use-fragments

use fragment blocks for files larger than block size.

-no-duplicates

do not perform duplicate checking.

-no-hardlinks

do not hardlink files, instead store duplicates.

-all-root

make all files owned by root.

-root-time TIME

set root directory time to TIME.

-root-mode MODE

set root directory permissions to octal MODE.

-root-uid UID

set root directory owner to UID.

-root-gid GID

set root directory group to GID.

-force-uid UID

set all file uids to UID.

-force-gid GID

set all file gids to GID.

-keep-as-directory

if one source directory is specified, create a root directory containing that directory, rather than the contents of the directory.

-action ACTION@EXPRESSION

evaluate EXPRESSION on every file, and execute ACTION if it returns TRUE.

-log-action ACTION@EXPRESSION

as above, but log expression evaluation results and actions performed.

-true-action ACTION@EXPRESSION

as above, but only log expressions which return TRUE.

-false-action ACTION@EXPRESSION

as above, but only log expressions which return FALSE.

-action-file FILE

as action, but read actions from FILE.

-log-action-file FILE

as -log-action, but read actions from FILE.

-true-action-file FILE

as -true-action, but read actions from FILE.

-false-action-file FILE

as -false-action, but read actions from FILE.

Filesystem filter options

-p PSEUDO-DEFINITION

Add pseudo file definition.  The definition should be quoted.

-pf PSEUDO-FILE

Add list of pseudo file definitions.  Pseudo file definitions in pseudo-files should not be quoted.

-sort SORT_FILE

sort files according to priorities in SORT_FILE.  One file or dir with priority per line.  Priority -32768 to 32767, default priority 0.

-ef EXCLUDE_FILE

list of exclude dirs/files.  One per line.

-wildcards

Allow extended shell wildcards (globbing) to be used in exclude dirs/files.

-regex

Allow POSIX regular expressions to be used in exclude dirs/files.

-one-file-system

Do not cross filesystem boundaries when scanning sources.

Filesystem append options

-noappend

do not append to existing filesystem.

-root-becomes NAME

when appending source files/directories, make the original root become a subdirectory in the new root called NAME, rather than adding the new source items to the original root.

Mksquashfs runtime options

-version

print version, licence and copyright message.

-exit-on-error

treat normally ignored errors as fatal.

-recover NAME

recover filesystem data using recovery file NAME.

-no-recovery

don’t generate a recovery file.

-recovery-path NAME

use NAME as the directory to store the recovery file.

-quiet

no verbose output.

-info

print files written to filesystem.

-no-progress

don’t display the progress bar.

-progress

display progress bar when using the -info option.

-throttle PERCENTAGE

throttle the I/O input rate by the given percentage. This can be used to reduce the I/O and CPU consumption of Mksquashfs.

-limit PERCENTAGE

limit the I/O input rate to the given percentage. This can be used to reduce the I/O and CPU consumption of Mksquashfs (alternative to -throttle).

-processors NUMBER

Use NUMBER processors.  By default will use number of processors available.

-mem SIZE

Use SIZE physical memory. Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively.

Expert options (these may make the filesystem unmountable)

-nopad

do not pad filesystem to a multiple of 4K.

-offset OFFSET

Skip OFFSET bytes at the beginning of FILESYSTEM. Optionally a suffix of K, M or G can be given to specify Kbytes, Mbytes or Gbytes respectively. Default 0 bytes.

-o OFFSET

synonym for -offset.

Miscellaneous options

-root-owned

alternative name for -all-root.

-noInodeCompression

alternative name for -noI.

-noIdTableCompression

alternative name for -noId.

-noDataCompression

alternative name for -noD.

-noFragmentCompression

alternative name for -noF.

-noXattrCompression

alternative name for -noX.

-help

output this options text to stdout.

-h

output this options text to stdout.

-Xhelp

print compressor options for selected compressor.

Pseudo File Definition Format

-p «filename d mode uid gid»

create a directory.

-p «filename m mode uid gid»

modify filename.

-p «filename b mode uid gid major minor»

create a block device.

-p «filename c mode uid gid major minor»

create a character device.

-p «filename f mode uid gid command»

create file from stdout of command.

-p «filename s mode uid gid symlink»

create a symbolic link.

-p «filename i mode uid gid [s|f]»

create a socket (s) or FIFO (f).

-p «filename l linkname»

create a hard-link to linkname.

-p «filename L pseudo_filename»

same, but link to pseudo file.

-p «filename D time mode uid gid»

create a directory with timestamp time.

-p «filename M time mode uid gid»

modify a file with timestamp time.

-p «filename B time mode uid gid major minor»

create block device with timestamp time.

-p «filename C time mode uid gid major minor»

create char device with timestamp time.

-p «filename F time mode uid gid command»

create file with timestamp time.

-p «filename S time mode uid gid symlink»

create symlink with timestamp time.

-p «filename I time mode uid gid [s|f]»

create socket/fifo with timestamp time.

Compressors Available and Compressor Specific Options

gzip (default)

-Xcompression-level COMPRESSION-LEVEL

COMPRESSION-LEVEL should be 1 .. 9 (default 9).

-Xwindow-size WINDOW-SIZE

WINDOW-SIZE should be 8 .. 15 (default 15).

-Xstrategy strategy1,strategy2,…,strategyN

Compress using strategy1,strategy2,…,strategyN in turn and choose the best compression. Available strategies: default, filtered, huffman_only, run_length_encoded and fixed.

lzo

-Xalgorithm ALGORITHM

Where ALGORITHM is one of: lzo1x_1, lzo1x_1_11, lzo1x_1_12, lzo1x_1_15, lzo1x_999 (default).

-Xcompression-level COMPRESSION-LEVEL

COMPRESSION-LEVEL should be 1 .. 9 (default 8) Only applies to lzo1x_999 algorithm.

lz4

-Xhc

Compress using LZ4 High Compression.

xz

-Xbcj filter1,filter2,…,filterN

Compress using filter1,filter2,…,filterN in turn (in addition to no filter), and choose the best compression. Available filters: x86, arm, armthumb, powerpc, sparc, ia64.

-Xdict-size DICT-SIZE

Use DICT-SIZE as the XZ dictionary size.  The dictionary size can be specified as a percentage of the block size, or as an absolute value.  The dictionary size must be less than or equal to the block size and 8192 bytes or larger.  It must also be storable in the xz header as either 2^n or as 2^n+2^(n+1). Example dict-sizes are 75%, 50%, 37.5%, 25%, or 32K, 16K, 8K etc.

zstd

-Xcompression-level COMPRESSION-LEVEL

COMPRESSION-LEVEL should be 1 .. 22 (default 15).

lzma

(no options) (deprecated — no kernel support)

Environment

SOURCE_DATE_EPOCH

If set, this is used as the filesystem creation timestamp.  Also any file timestamps which are after SOURCE_DATE_EPOCH will be clamped to SOURCE_DATE_EPOCH.  See https://reproducible-builds.org/docs/source-date-epoch/ for more information.

Examples

mksquashfs DIRECTORY IMAGE.SQFS

Create a Squashfs filesystem from the contents of DIRECTORY, writing the output to IMAGE.SQSH.  Mksquashfs will use the default compressor (normally gzip), and block size of 128 Kbytes.

mksquashfs DIRECTORY FILE1 FILE2 IMAGE.SQFS

Create a Squashfs filesystem containing DIRECTORY and FILE1 and FILE2.  If multiple sources are specified on the command line they will be combined into a single directory.

mksquashfs DIRECTORY IMAGE.SQFS -b 1M -comp zstd

Use a block size of 1 Mbyte and Zstandard compression to create the filesystem.

mksquashfs DIRECTORY IMAGE.SQFS -e file1 file2

Exclude file1 and file2 from DIRECTORY when creating filesystem.  No wildcard matching of files.

mksquashfs DIRECTORY IMAGE.SQFS -wildcards -e «*.gz»

Exclude anything in DIRECTORY which matches the wildcard pattern «*.gz».

mksquashfs DIRECTORY IMAGE.SQFS -wildcards -e «… *.gz»

Exclude files which match the wildcard pattern «*.gz» anywhere within DIRECTORY and its sub-directories.  The initial «…» indicates the wildcard pattern is «non-anchored» and will match anywhere.

Note: when passing wildcarded names to Mksquashfs, they should be quoted (as in the above examples), to ensure that they are not processed by the shell.

Using pseudo file definitions

mksquashfs DIRECTORY IMAGE.SQFS -p «build_dir d 0644 0 0»

Create a directory called «build_dir» in the output filesystem.

mksquashfs DIRECTORY IMAGE.SQFS -p «version.txt l /tmp/build/version»

Create a reference called «version.txt» to a file outside DIRECTORY, which acts as if the file «/tmp/build/version» was copied or hard-linked into DIRECTORY before calling Mksquashfs.

mksquashfs DIRECTORY IMAGE.SQFS -p «date.txt f 0644 0 0 date»

Create a file called «date.txt» which holds the output (stdout) from running the «date» command.

mksquashfs DIRECTORY IMAGE.SQFS -p «»hello world» f 0644 0 0 date»

As above, but, showing that filenames can have spaces, if they are quoted. The quotes need to be blackslashed to protect them from the shell.

mksquashfs — IMAGE.SQFS -p «input f 0644 root root dd if=/dev/sda1 bs=1024» -p «/ d 0644 0 0»

Create a file containing the contents of partition /dev/sda1″.  Ordinarily Mksquashfs given a device, fifo, or named socket will place that special file within the Squashfs filesystem, the above allows input from these special files to be captured and placed in the Squashfs filesystem.   Note there are no other sources than the pseudo file, and so the command line source is «-«.  If there are no other sources than pseudo files, the root (/) directory must be defined too, as seen in this example.

Note: pseudo file definitions should be quoted (as in the above examples), to ensure that they are passed to Mksquashfs as a single argument, and to ensure that they are not processed by the shell.

Using Actions to not compress, change attributes etc.

mksquashfs DIRECTORY IMAGE.SQSH -action «uncompressed @ (name(*.jpg) || name(*.mpg) ) || (name(*.img) && filesize(+1G))»

Specify that any files matching the wildcards «*.jpg» and «*.mpg» should not be compressed.  Additionally, it also specifies any files matching the wildcard «*.img» and are larger than 1 Gigabyte should be uncompressed too.  This shows test operators can be combined with logical expressions.

mksquashfs DIRECTORY IMAGE.SQSH -action «chmod(o+r)@! perm(o+r)»

If any files within DIRECTORY are not readable by «others», then make them readable by others in the Squashfs filesystem.

mksquashfs DIRECTORY IMAGE.SQSH -action «uid(phillip)@! perm(o+r)»

As previous, match on any files which are not readable by «others», but, in this case change the owner of the file to «phillip» in the Squashfs filesystem.

mksquashfs DIRECTORY IMAGE.SQSH -action «prune @ type(l) && ! exists»

Delete any symbolic link within DIRECTORY which points outside of DIRECTORY, i.e. will be unresolvable in the Squashfs filesystem.

mksquashfs DIRECTORY IMAGE.SQSH -action «exclude @ depth(3)»

Create a Squashfs filesystem containing the two top most levels (contents of DIRECTORY and immediate sub-directories), and exclude anything at level 3 or below.

Note: actions should be quoted (as in the above examples), to ensure that they are passed to Mksquashfs as a single argument, and to ensure that they are not processed by the shell.

Copyright

Copyright © 2022 Phillip Lougher <phillip@squashfs.org.uk>

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

See Also

unsquashfs(1), sqfstar(1), sqfscat(1)

The README for the Squash-tools 4.5.1 release, describing the new features can be read here https://github.com/plougher/squashfs-tools/blob/master/README-4.5.1

The Squashfs-tools USAGE guide can be read here https://github.com/plougher/squashfs-tools/blob/master/USAGE

The ACTIONS-README file describing how to use the new actions feature can be read here https://github.com/plougher/squashfs-tools/blob/master/ACTIONS-README

Referenced By

ch-convert(1), ch-test(1), sqfscat(1), sqfstar(1), unsquashfs(1), virt-make-fs(1).

January 2023 mksquashfs version 4.5.1

SquashFS is an open source, read only, extremely compressible filesystem. Like other filesystems, SquashFS is capable of de-duplicating the data passed to it, which helps it compress data further. Although not fully necessary to operate correctly, SquashFS is typically paired with some kind of union filesystem when used for Live media (LiveUSBs and LiveCDs).

Installation

Kernel

Activate the following kernel options must be activated for SquashFS support:

KERNEL Enabling SquashFS 4.0 support

File systems  --->
   [*] Miscellaneous filesystems  --->
      [*]   SquashFS 4.0 - Squashed file system support

Optional SquashFS support

KERNEL Enabling optional features of SquashFS

File systems  --->
   [*] Miscellaneous filesystems  --->
         File decompression options (Decompress file data into an intermediate buffer)  --->
         Decompressor parallelisation options (Single threaded compression)  --->
      [*]     Squashfs XATTR support
      [*]     Include support for ZLIB compressed file systems
      [*]     Include support for LZ4 compressed file systems
      [*]     Include support for LZO compressed file systems
      [*]     Include support for XZ compressed file systems
      [*]     Use 4K device block size?
      [*]     Additional option for memory-constrained systems
      (3)       Number of fragments cached

USE flags

Like most filesystems in Linux, the SquashFS filesystem tools come in a separate package. This package is called sys-fs/squashfs-tools. Set the desired support for the package by adjusting USE flags accordingly.

USE flags for
sys-fs/squashfs-tools

tools to create and extract Squashfs filesystems

debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
lz4 Enable support for lz4 compression (as implemented in app-arch/lz4)
lzma Support for LZMA (de)compression algorithm
lzo Enable support for lzo compression
xattr Add support for extended attributes (filesystem-stored metadata)
zstd Enable support for ZSTD compression

Emerge

After setting flags as desired, update the system so the changes take effect:

root #emerge --ask --changed-use --deep sys-fs/squashfs-tools

Usage

Filesystem creation

Creation of SquashFS filesystems is performed with the mksquashfs command. To create a SquashFS filesystem of the home directory of a user named Larry, the following command could be used:

larry@example $mksquashfs /home/larry /home/larry/home.squashfs

Depending on what kernel features were selected for SquashFS support, the output of the mksquashfs command will look something like the following:

Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /home/larry/home.squashfs, block size 131072.
[=========================================================================|] 4/4 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments, compressed xattrs
        duplicates are removed
Filesystem size 0.82 Kbytes (0.00 Mbytes)
        58.79% of uncompressed filesystem size (1.39 Kbytes)
Inode table size 104 bytes (0.10 Kbytes)
        46.02% of uncompressed inode table size (226 bytes)
Directory table size 96 bytes (0.09 Kbytes)
        77.42% of uncompressed directory table size (124 bytes)
Number of duplicate files found 1
Number of inodes 7
Number of files 5
Number of fragments 1
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 2
Number of ids (unique uids + gids) 1
Number of uids 1
        larry (1001)
Number of gids 1
        larry (1001)

Notice the command provides an excellent summary of what went into the newly created home.squashfs file. Information such as filesystem size, inode table, directory table, number of duplicate files, UIDs, and GUIs are easily readable. This information can be very helpful when attempting to gather specific information from the filesystem.

Mount

To mount a SquashFS, use the mount command’s -o loop option with escalated privileges:

larry@example $mkdir ~/tmp

larry@example $mount -o loop ~/home.squashfs ~/tmp

Note
If the mount command fails, see the related entry in the troubleshooting section below.

Now all the files that are included in home.squashfs are available under the ~/tmp mount point. List the files in the directory using the -la options to see all the files:

larry@example $ls -la ~/tmp

total 3
drwxr-xr-x 3 larry larry 125 Mar 31 13:51 .
drwxr-xr-x 1 larry larry 130 Mar 31 13:52 ..
-rw------- 1 larry larry  10 Mar 31 13:49 .bash_history
-rw-r--r-- 1 larry larry 127 Mar 24 13:19 .bash_logout
-rw-r--r-- 1 larry larry 193 Mar 24 13:19 .bash_profile
-rw-r--r-- 1 larry larry 551 Mar 24 13:19 .bashrc
-rw-r--r-- 1 larry larry   0 Mar 31 13:51 home.squashfs
drwx------ 2 larry larry   3 Oct 23 06:52 .ssh

Unmount

To unmount the filesystem, use the umount command with escalated privileges:

larry@example $sudo umount ~/tmp

SquashFS files can be extracted using unsquashfs. Supposing the ~/tmp directory and the ~/home.squashfs file have been previously created in the steps above:

larry@example $unsquashfs -d tmp/ -f home.squashfs

Important

  • If a filesystem target is not specified (~/tmp is the target in the example above) unsquashfs will create a folder called squashfs-root in the current directory and extract the files there.[1]
  • If a directory exists previous to the unsquashfs command being run, then the -d <directory> and -f options must be used in order to force SquashFS extraction to the existing directory [1]
  • When creating extracting to a new directory, the -f option is not needed.

unsquashfs can be used to extract a specific file in the SquashFS. Again, presuming the ~/home.squashfs file has been previously created in the steps above, the .bashrc file can be extracted to the ~/tmp directory:

larry@example $unsquashfs -d ~/tmp -f ~/home.squashfs -e .bashrc

Parallel unsquashfs: Using 4 processors
1 inodes (1 blocks) to write

[===========================|] 1/1 100%

created 1 files
created 1 directories
created 0 symlinks
created 0 devices
created 0 fifos

View the extract file using the ls command:

larry@example $ls -la ~/tmp

total 4
drwxr-xr-x 1 larry larry  14 Mar 31 13:51 .
drwxr-xr-x 1 larry larry 156 Mar 31 14:32 ..
-rw-r--r-- 1 larry larry 551 Mar 24 13:19 .bashrc

Troubleshooting

mount: only root can use «—options» option

This error is should be self-explanatory. Login as the root user or use sudo to run mount the filesystem with escalated privileges.

See also

  • Aufs — an advanced multi-layered unification filesystem.
  • OverlayFS — an in-kernel attempt at providing union file system capabilities on Linux.
  • Wikipedia:UnionFS — The original union filesystem.

External resources

  • A SquashFS instructional video on YouTube.
  • Forums thread TIP: Compressing portage using squashfs: initscript method
  • Article/Script using SquashFS to store and update portage tree
  • Portage tree using squashfs and overlayfs
  • GitHub — nrdvana/squash-portage: Script to generate squashfs files of the Gentoo portage tree

References

  1. 1.0 1.1 Artemiy I. Pavlov, Marco Cecchetti. The SquashFS tools exposed, The Linux Documentation Project, July 24, 2008. Retrieved on April 8, 2015

Содержание

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

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

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

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

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

Осторожно! Почти все команды выполняются под root.

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

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

Подготовка

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

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

sudo apt install squashfs-tools genisoimage

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

cd /var/log/apt
# ищем в history.log
grep -r squashfs --color=always
# если прошло много времени, история упаковывается в .gz, ищем в ней:
find -name *.gz -print0 | xargs -0 zgrep squashfs --color=always
# --color=always добавляет подсветку найденных слов

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

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

Скачиваем оригинальный ISO образ Ubuntu, который будем модифицировать под свои нужны. Допустим, образ скачан и находится в ~/downloads/ubuntu-18.04-desktop-amd64.iso.

Подмонтируем этот ISO образ в каталог ~/livecdtmp/mnt для дальнейшей работы:

# создаем сразу два вложенных каталога
mkdir -p ~/livecdtmp/mnt
# копируем ISO образ диска
cp ~/downloads/ubuntu-18.04-desktop-amd64.iso ~/livecdtmp
# входим в каталог, где будет проводиться основная работа
cd ~/livecdtmp
# монтируем CD-диск
sudo mount -o loop ubuntu-18.04-desktop-amd64.iso mnt
mkdir extract-cd
rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd

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

sudo unsquashfs mnt/casper/filesystem.squashfs
sudo mv squashfs-root edit

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

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

sudo cp /etc/resolv.conf edit/etc/
sudo mount -o bind /run/ edit/run
sudo mount --bind /dev/ edit/dev

FIXME resolv.conf в следующих шагах оказался пустым, надо понять почему, и исправить

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

# chroot выполняется только от суперпользователя
sudo su
# чрутимся:
chroot edit # < зачрутились
# важно! чтобы не перепутать, где мы работаем, сразу сменим вид приглашения командной строки:
PS1="(CHROOT) $PS1"

Настраиваем:

mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C

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

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

vi /etc/resolv.conv
# это не команды, а содержимое файла, которое следует внести. Не копировать слепо! Подставить из своей рабочей системы, файл /etc/resolv.conv! У меня оно такое:
nameserver 127.0.1.1

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

ping ya.ru

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

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

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

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

dpkg-query -W --showformat='${Installed-Size}t${Package}n' | sort -nr | less

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

apt update
apt upgrade

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

# программы для работы с сетью
apt install curl net-tools whois nmap
# остальные - также по желанию
apt install vim git htop zsh tmux 

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

shutter
krusader
filezilla
lynx

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

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

  • Скачиваем Atom через консоль или браузер

  • Если скачано из браузера, то: sudo mv ~/downloads/atom-amd64.deb ~/livecdtmp/edit/tmp

  • Устанавливаем: dpkg -i /tmp/atom-amd64.deb

У меня установка не удалась, так как этот пакет зависит от gconf2 и gconf-service. Эти зависимости apt не сумел разрешить. Чтобы это исправить, требуется добавить в /etc/apt/ дополнительные репо. FIXME какие?

dpkg: dependency problems prevent configuration of atom:
atom depends on gconf2; however:
Package gconf2 is not installed.
atom depends on gconf-service; however:
Package gconf-service is not installed.

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

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

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

Мы все еще находимся в чруте chroot edit

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

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

awk -F: '$3 == 999' /etc/passwd

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

Пересобираем initrd

После модификации ядра, скриптов загрузки или добавления модулей ядра, нужно пересобрать initrd.gz и переместить его в каталог casper

mkinitramfs -o /initrd.gz 4.15.0-23-generic
# выходим из чрута и перемещаем собранный образ
exit
mv edit/initrd.gz extract-cd/casper/

Снова чрутимся:

chroot edit
PS1="(CHROOT) $PS1"

Очищаем образ

Удаляем все, что не установилось и чистим систему:

apt --fix-broken install
apt autoremove
rm -rf /tmp/*
rm /etc/resolv.conf
rm /var/lib/dbus/machine-id # у меня файла не было

Размонтируем

umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit # выходим из chroot
umount edit/dev

Собираем ISO образ

Манифест

# делаем манифест записываемым
chmod +w extract-cd/casper/filesystem.manifest
# обновляем манифест
chroot edit dpkg-query -W --showformat='${Package} ${Version}n' > extract-cd/casper/filesystem.manifest
# пишем установленные пакеты
cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
# удаляем упоминания пакетов
sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop

Сжимаем файловую систему

rm extract-cd/casper/filesystem.squashfs ## у меня не было этого файла
mksquashfs edit extract-cd/casper/filesystem.squashfs -b 1048576

Пишем размер файловой системы и md5 хеши файлов

printf $(du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size
cd extract-cd
rm md5sum.txt
find -type f -print0 | xargs -0 md5sum | grep -v isolinux/boot.cat | tee md5sum.txt

Создаем готовый ISO

mkisofs -D -r -V "My Ubuntu custom image" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../my-ubuntu.iso .

Итоговый образ my-ubuntu.iso проверяем в Virtualbox.

Записываем ISO на флешку

Для записи я использовал unetbootin, который доступен из центра приложений Ubuntu.

unetbootin свой образ LiveCD загрузочной флешки

  • Форум русскоязычного сообщества Ubuntu »
  • Архив »
  • Архив »
  • Архив тем до 2016г »
  • Как можно примотнировать squashfs 4.0 с сжатием lzma? [ЧАСТИЧНО РЕШЕНО]
  • Печать

Страницы: [1]   Вниз

Тема: Как можно примотнировать squashfs 4.0 с сжатием lzma? [ЧАСТИЧНО РЕШЕНО]  (Прочитано 3949 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн
gangstervano

Как можно примотнировать squashfs 4.0 с сжатием lzma?
Можно ли его как-нить редактировать?
Ну или хотя бы распоковать куда-нить ???


Пользователь решил продолжить мысль 17 Июня 2011, 13:47:36:


Так, часть с распаковкой и с редактированием решилась:   8)
1. Скачиваем http://sourceforge.net/projects/squashfs/files/squashfs/squashfs4.2/squashfs4.2.tar.gz/download
2. Распаковываем.
3. Переходим в папку squashfs-tools.
4. Открываем Makefile и расскоммичеваем строчки
     XZ_SUPPORT = 1
     LZMA_XZ_SUPPORT = 1
     LZMA_DIR = ../../../../LZMA/lzma465
5. Даллее в консоли make. Если не будет хватать каких-нибудь *.h файлов (например zlib.h), то заходим в Synaptic и устанавливаем соответсвующие deb пакеты (для zlib.h что-то наподобии zlib1g-dev).
6. После успешного make, перед тем как делать make install убедитесь, что у Вас не установлен squashfs-tool, если установлен то лучше удалите его.
7. Делаем make install.
8. Переходим в папку с squashfs файлом (например image.squashfs)
9. В консоли набираем sudo unsquashfs image.squashfs и ждем завершения.
10. Все распоковалось!
11. Запаковывать соответсвенно командой mksquashfs.

Остался только вопрос с монтированием. Можно ли примонтировать как-нибудь эту файловую систему (squashfs)?

« Последнее редактирование: 24 Июня 2011, 11:15:56 от RustemNur »


  • Печать

Страницы: [1]   Вверх

  • Форум русскоязычного сообщества Ubuntu »
  • Архив »
  • Архив »
  • Архив тем до 2016г »
  • Как можно примотнировать squashfs 4.0 с сжатием lzma? [ЧАСТИЧНО РЕШЕНО]

SMF 2.0.19 |
SMF © 2011, Simple Machines | Карта форума

Страница сгенерирована за 0.105 секунд. Запросов: 23.

Понравилась статья? Поделить с друзьями:
  • Как изменить sprite unity
  • Как изменить spfile
  • Как изменить spf запись для почтового сервера
  • Как изменить spd оперативной памяти
  • Как изменить spawn rate minecraft