pfs-utils. Утилиты для работы с модулями squashfs. Версия 3
Pfs-utils - комплект скриптов полностью покрывающий задачи по работе со squashfs модулями для любых linux live (
frugal ) дистрибутивов.
Утилиты не являются самодостаточными, то есть работоспособность скриптов по отдельности не гарантируется.
Актуальными на сегодняшний момент являются pfs-utils версии 3.*, которые имеют кардинальные отличия от предыдущих версий как по составу скриптов и ключам так и по алгоритмам работы утилит.
Утилиты имеют встроенный –help и небольшую общую справку (man pfs-utils).
-
-
Терминология и спецификации формата PFS
Модуль -
squashfs архив, содержит дерево каталогов и файлов (от корня системы) для одной или нескольких программ.
PFS-модуль - модуль, собранный утилитой mkpfs. Отличается от модуля наличием служебной информации (метаданных).
mkpfs собирает pfs-модуль из одного или нескольких источников и содержит метаданные о каждом из них. Источниками могут быть:
PFS-модули
Каталоги
Файлы, содержащих внутри файловую систему : dd if=/dev/zero of=File.img bs=1M count=10240 && mkfs.ext4 File.img
pfs-модуль собраный из одного источника называем - простым
pfs-модуль собраный из нескольких источников - составным (контейнером)
Внимание!!! Не рекомендуется использовать в именах файлов и путей пробелы и символы имеющие для sh (bash) специальное значение.
Конфигурационные файлы
/etc/initvars - переменные заданные initrd ( часть спецификации
ULRF )
/usr/bin/pfs - устанавливаются переменные, учитывающий специфику конкретного дистрибутива»
/etc/pfs.cfg - устанавливаются переменные, учитывающий специфику дистрибутива или конкретного пользователя
Переменные
prefixmp= каталог для промежуточного монтирования модулей (перед монтированием в корень )
copyramdir= каталог для промежуточного копирования модулей, подключаемых pfsramload
PFSDIR= каталог для хранения метаданных о pfs-пакетах
EXT= расширение по умолчанию для pfs-модулей. По умолчанию pfs
SYSMNT= каталог для монтирования частей системной aufs
compression= компрессия внутри squashfs. По умолчанию xz
compression_fast - компрессия внутри squashfs при использовании mkpfs -f . По умолчанию lz4
Служебная информация внутри модуля.pfs (метаданные)
Служебная информация хранится внутри модуля отдельно для каждого источника использованного при сборке mkpfs. Каталог для метаданных:
Функционал pfs-utils
Создание PFS-модуля из каталога, списка каталогов, списка простых модулей
Разборка простого PFS-модуля в каталог
Разборка составного PFS-модуля
на каталоги
на PFS-модули
Подключение модуля в корневую aufs
Отключение модуля
Инсталляция модуля (распаковка в корень системы)
Деинсталляция модуля
Зависимости
squashfs-util
util-linux
findutils
bash
gawk
grep
Для gui : gtkdialog; yad
Консольные команды
Утилиты pfs-utils содержат консольные скрипты и графические «обертки» к ним - GUI.
Консольные утилиты являются общими для всех дистрибутивов, а GUI могут отличаться от описанных в данном руководстве либо отсутствовать вовсе.
aufs-n
Показывает информацию о слоях AUFS
Параметры (ключи):
aufs-n N - вернет точку монтирования слоя «N»
–raw - полный вывод в удобном для конвейерной обработки виде
–raw '$n $source' - вернет значения только указанных переменных (см.–help)
mountfile
Вспомогательный скрипт, монтирует модули
Использование:
pfs
Использование:
Функции (<function>):
exitmsg - выход из скрипта с сообщением и кодом завершения
allow_only_root - проверка на root
mklist - создание списка файлов и пустых каталогов (как в контейнерах)
checksfsxzb - проверка системы на поддержку squashfs
fs_type - тип fs файла (squashfs, ext2-4 и т.д.)
mkaufs - создание aufs для утилит mkpfs, pfsextract
delaufs - удаление aufs
addlayer - добавление слоя к aufs
mksqmod - создание модуля (обертка к mksquashfs)
pfs_update_caches - обновление кэшей и прочие мелочи, которые необходимо выполнять после подключения и отключения модулей
lsblocked - показать список модулей, которые невозможно отключить
pfsload
Подключает файл .pfs к корневой файловой системе AUFS.
Также могут быть подключены любые squashfs модули сжатие которых поддерживает ваша система, разделы Ext234 и каталоги на таких разделах к корневой AUFS.
Параметры (ключи):
-r / –toram - копировать модуль в tmpfs и монтировать оттуда
-u / –upper - монтирование в верхний слой AUFS (по умолчанию).
-l / --lower - монтирование в нижний слой AUFS.
-n / –no-update - Не обновлять кэши иконок и пр.
–ro / –read-only - монтировать «только для чтения» (без возможности изменять). Модули без вариантов по умолчанию -r
Использование:
pfsunload
Отключает файл от корневой файловой системы AUFS.
Параметры и ключи
Использование:
pfsuninstall
Удаляет pfs из корневой файловой системы
файлы, используемые несколькими pfs не будут удалены, пока хотя бы один из этих pfs установлен или подключен.
действие обратное pfsextract -i модуль
pfsfind
Информация о том, к какому подключенному или установленному pfs относится указанный файл. Допустимо указывать часть имени файла.
Использование:
pfsfind filename - find «filename» формат удобный для чтения
pfsfind filename –raw - find «filename» формат для конвейеров
pfsfind filename –raw '$n $module' - только нужные поля (см.–help)
pfsinfo
При запуске pfsinfo /file.pfs выводит список pfs в составном.pfs
При запуске без параметров выводит список всех pfs в системе.
Параметры (ключи):
mkpfs
Создаёт .pfs из каталога (аналогично mksquashfs).
Автоматически создаёт файлы pfs.files, pfs.specs и pfs.dirs.empty (при наличии внутри pfs пустых каталогов).
Использование:
mkpfs - создаст .pfs из текущего каталога
mkpfs /catalog - создаст .pfs из каталога «/catalog».
mkpfs -d /catalog - создаст составной.pfs из каталогов внутри «/catalog».
mkpfs -m /catalog - создаст составной.pfs из .pfs внутри «/catalog». Вложенные в «/catalog» каталоги не просматриваются.
mkpfs /path/1.pfs /path2/2.pfs /path3/3.pfs -o contaner.pfs - создаст составной.pfs из перечисленных с именем contaner.pfs
Параметры (ключи):
-o / –out-file - указывает название выходного файла .pfs (по умолчанию соответствует имени первого источника в списке).
-n / –not-dirs-empty - не создавать файл pfs.dirs.empty.
-f / –fast - быстрое сжатие (размер .pfs больше, но создается быстрее).
-w - включать в модуль AUFS тени. Будет работать но только с ключем -l
-l / -local - сборка на месте, без использования aufs.
-no-progress - не показывать строку прогресса.
-d / –dir - Только каталоги : $(basename $0) -d dir –> $(basename $0)» '$(find dir -maxdepth 1 -mindepth 1 -type d ) -o dir.pfs'
-m / –mod - Только модули: $(basename $0) -m dir —> $(basename $0)» '$(find dir -maxdepth 1 -mindepth 1 -type f ) -o dir.pfs'
-comp comp pars - параметры сжатия для mksquashfs (такие же как у mksquashfs). Внимание, параметр должен быть последним.
Можно объединять до 126 .pfs за один проход (если не указывать при загрузке параметр ядра max_loop с меньшим значением). Это ограничение AUFS. При большем количестве pfs рекомендуется объединить их в файлы по 126 pfs, потом объединить эти файлы.
Использование:
pfsextract /file.pfs - создать каталог «/file_pfs» с отдельными файлами .pfs из «/file.pfs», каждый pfs в отдельном файле. Если file.pfs - не составной - распаковать в каталог ./file
pfsextract /file.pfs pack1 pack2 - извлечь из file.pfs только модули pack1 и pack2
pfsextract -i /file.pfs pack1 - извлечь из file.pfs пакет pack1 и установить его в систему
Параметры (ключи):
-no-progress - не показывать строку прогресса.
-f / --fast - быстрое сжатие (размер .pfs больше, но создается быстрее).
-d / –nopfs - извлекает отдельные pfs в виде каталогов. Удобно при переупаковке составного модуля вместе с mkpfs -d
-i / –install - распаковать в систему т.е. «установить»
-o / –out-dir path/dir - создать каталог dir и распаковывать в него.
-comp comp pars - параметры сжатия для mksquashfs (такие же как у mksquashfs). Внимание, параметр должен быть последним.
-q - молча
pfsrebuild
Cборка нового модуля по списку файлов из уже подключенного к aufs.
Пересобирает модуль по спискам файлов. Сами файлы берет из системы.
То есть есть у вас к примеру подключенный модуль mate.pfs и вы хотите заменить в нем пару файлов, ну или конфиг какой поправить. Заменяете и правите прямо в системе, и запускаете pfsrebuild mate (или mate.pfs не помню). В текущей папке получите модуль с изменениями.
Использование:
sync2layer
Переносит файлы из верхнего слоя aufs во второй слой.
Подключает новый rw слой (папка или img) и переносит в него файлы из changes.
Использовать можно для освобождения RAM при переполнении changes, и для создания модулей с изменениями на ходу.
Использование:
sync2layer <newlayer> - создать слой и перенести в него файлы из changes
sync2layer - перенести файлы в существующий второй слой
<newlayer> - каталог
<newlayer.rom> - fs in file
Графические скрипты (GUI)
open_pfs
Основной скрипт, позволяет подключить, отключить или установить модули.pfs.
Если в подключаемом .pfs есть файл «/tmp/.pfs/.command», содержащий команду запуска программы (например «firefox») - то после подключения пользователю будет предложено запустить эту команду.
После подключения или установки pfs выводится список отсутствующих зависимостей.
uninstall_pfs
Удаляет выбранные пользователем pfs.
manager_pfs
Показывает список всех (постоянно подключённых, временно подключённых и установленных) pfs в системе.
loader_fs
Позволяет подключить к корневой файловой системе AUFS файлы SFS, 234fs и разделы Ext234 (GUI к pfsload | sfsload | extload).
editor_pfs
Редактор файлов PFS (GUI к pfsmerge).
Принцип работы скрипта:
Пользователь указывает отдельные PFS-файлы и/или каталог с PFS-файлами.
Скрипт читает все отдельные файлы + все файлы каталога и составляет полный список включённых в них pfs.
Пользователь снимает флажки с каких-то модулей, если нужно.
Скрипт собирает PFS из всех модулей (кроме тех, с которых были сняты флажки).
Скрипт позволяет извлечь один или несколько модулей из файла .pfs (GUI к pfsextract).
Обсуждение на форуме.