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
5,7837 gold badges39 silver badges70 bronze badges
asked Mar 9, 2011 at 8:08
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. 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♦
65.2k34 gold badges106 silver badges240 bronze badges
answered Nov 7, 2017 at 11:38
Это 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 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.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
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
узнать, какие репо следует добавить для установки
Установить программы можно и из deb-пакетов, на примере Atom:
-
Скачиваем Atom через консоль или браузер
-
Если скачано из браузера, то:
sudo mv ~/downloads/atom-amd64.deb ~/livecdtmp/edit/tmp
-
Устанавливаем:
dpkg -i /tmp/atom-amd64.deb
У меня установка не удалась, так как этот пакет зависит от gconf2
и gconf-service
. Эти зависимости apt не сумел разрешить. Чтобы это исправить, требуется добавить в /etc/apt/
дополнительные репо. какие?
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.
- Форум русскоязычного сообщества Ubuntu »
- Архив »
- Архив »
- Архив тем до 2016г »
- Как можно примотнировать squashfs 4.0 с сжатием lzma? [ЧАСТИЧНО РЕШЕНО]
- Печать
Страницы: [1] Вниз
Тема: Как можно примотнировать squashfs 4.0 с сжатием lzma? [ЧАСТИЧНО РЕШЕНО] (Прочитано 3949 раз)
0 Пользователей и 1 Гость просматривают эту тему.
gangstervano
Как можно примотнировать squashfs 4.0 с сжатием lzma?
Можно ли его как-нить редактировать?
Ну или хотя бы распоковать куда-нить
Пользователь решил продолжить мысль 17 Июня 2011, 13:47:36:
Так, часть с распаковкой и с редактированием решилась:
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.