Это старая версия документа.


pfs-utils. Утилиты для работы с модулями squashfs. Версия 4

  • Pfs-utils - комплект скриптов полностью покрывающий задачи по работе со squashfs модулями для любых linux live ( frugal ) дистрибутивов.
  • Утилиты не являются самодостаточными, то есть работоспособность скриптов по отдельности не гарантируется.
  • Актуальными на сегодняшний момент являются pfs-utils версии 4.*, которые являются развитием версий 3.* и по большей части обратно совместимы по ключам ключам.
  • Утилиты имеют встроенный –help и небольшую общую справку (man pfs-utils).

Терминология и спецификации формата PFS

  • Модуль - squashfs архив, содержит дерево каталогов и файлов (от корня системы) для одной или нескольких программ. Squashfs архив отличается от обычных тем, что для чтения файла нет необходимости распаковывать весь архив. Распаковываются только блоки в которых находятся части запрошенного файла.
    • При подключениии модуля к корневой aufs (linux live) файлы модуля становятся доступными в системе.
  • PFS-модуль - модуль, собранный утилитой mkpfs. Отличается от модуля наличием служебной информации (метаданных).
  • mkpfs собирает pfs-модуль из одного или нескольких источников и содержит метаданные о каждом из них. Источниками могут быть:
    1. PFS-модули
    2. Каталоги
    3. Файлы, содержащих внутри файловую систему : dd if=/dev/zero of=File.img bs=1M count=10240 && mkfs.ext4 File.img
  • pfs-модуль собраный из одного источника называем - простым
  • pfs-модуль собраный из нескольких источников - составным (контейнером)
    • При помощи pfs-util возможно подключение, отключение, сборка - разборка составного модуля на составляющие

Внимание!!! Не рекомендуется использовать в именах файлов и путей пробелы и символы имеющие для sh (bash) специальное значение.

Конфигурационные файлы

  • /etc/initvars - переменные заданные initrd ( часть спецификации ULRF )
  • /etc/pfs.cfg - устанавливаются переменные, учитывающий специфику дистрибутива или конкретного пользователя
  • /usr/bin/pfs - библиотека функций pfs-utils, здесь устанавливаются начальные значения переменных, этот файл также можно использовать в качестве конфигурационного.

Переменные

  • prefixmp= префикс который будет добавлен к имени файла модуля, чтобы получить имя точки промежуточного монтирования сквошей. Это может быть имя каталога или конструкция типа /mnt/. тогда точки монтирования получат имена /mnt/.имя_модуля
  • copyramdir= каталог для промежуточного копирования модулей, подключаемых pfsramload
  • PFSDIR= каталог для хранения метаданных о pfs-пакетах
  • EXT= расширение по умолчанию для pfs-модулей. По умолчанию pfs
  • SYSMNT= каталог для монтирования частей системной aufs
  • compression= компрессия внутри squashfs. По умолчанию xz
  • compression_fast - компрессия внутри squashfs при использовании mkpfs -f . По умолчанию lz4

Служебная информация внутри модуля.pfs (метаданные)

Служебная информация хранится внутри модуля отдельно для каждого источника использованного при сборке mkpfs. Каталог для метаданных:

  • /$PFSDIR/mount/[Название_pfs-пакета]/ (название пакета соответствует имени источника - каталога, модуля, образа)
    • pfs.files (Список файлов, относящихся к pfs-пакету)
    • pfs.dirs.empty (Список пустых каталогов в pfs-пакете. Необязательный)
    • pfs.depends (Список зависимостей. Необязательный)
    • pfs.specs (Название программы, версия и т.д. Необязательный)

Функционал pfs-utils

  • Создание PFS-модуля из каталога, списка каталогов, списка простых модулей
  • Разборка простого PFS-модуля в каталог
  • Разборка составного PFS-модуля
    • на каталоги
    • на PFS-модули
  • Подключение модуля в корневую aufs
    • в верхний слой 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

Вспомогательный скрипт, монтирует модули

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

  • mountfile file.pfs (в /mnt/+…)
  • mountfile file.pfs <mount point>

umountfile

Вспомогательный скрипт, размонтирует модули.

ВАЖНО. Требует дополнительного редактирования для последующего использования в сборках PRA. Подробнее

pfs

  • Библиотека функций для pfs-utils;
  • функции могут быть использованы отдельно в консоли или в ваших скриптах

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

  • pfs <function> <pars>
  • source /path/to/scripts/pfs ; <function> <pars>

Функции (<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
Использование:
  • pfsload file.pfs - pfs-модуль
  • pfsload file.img - образ с fs внутри
  • pfsload dir - каталог

pfsunload

Отключает файл от корневой файловой системы AUFS.

Параметры и ключи
  • -n / –no-update - не обновлять кэши меню и проч.
  • -s / –saveram - не удалять модуль из RAM после отключения ( смотрите pfsload -r )
Использование:
  • pfsunload /file.pfs

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 в системе.

Параметры (ключи):
  • -m / --mount - выводить только подключённые pfs.
  • -i / --install - выводить только установленные 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 / -local - сборка на месте, без использования aufs.
  • -no-progress - не показывать строку прогресса.
  • -d / –dir - Только каталоги : $(basename $0) -d dir –> $(basename $0)» '$(find dir -maxdepth 1 -mindepth 1 -type d ) -o dir.pfs'
  • *–mklist - добавить файлы в несоставной модуль.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 (минус уже использованные другими монтированиями loop dev) за один проход (если не указывать при загрузке параметр ядра max_loop с меньшим значением). Это ограничение AUFS. При большем количестве pfs рекомендуется объединить их в файлы по 126 pfs, потом объединить эти файлы. ==== pfsextract ==== *Составной модуль разбирает (извлекает отдельные pfs из составного модуля .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 не помню). В текущей папке получите модуль с изменениями. ВАЖНО. Ограниченный функционал, использовать для пересборки модули только с root содержимым, т.к. самопроизвольно меняет владельца папок на root. Подробнее === Использование: === *pfsrebuild <PACKAGE> <args for mkpfs> ==== sync2layer==== Переносит файлы из верхнего слоя aufs во второй слой. *Подключает новый rw слой (папка или img) и переносит в него файлы из changes. *Использовать можно для освобождения RAM при переполнении changes, и для создания модулей с изменениями на ходу. === Использование: === *sync2layer <newlayer> - создать слой и перенести в него файлы из changes *sync2layer - перенести файлы в существующий второй слой *<newlayer> - каталог *<newlayer.rom> - fs in file ==== chroot2pfs==== Сборка модуля PFS из изменений, сделанных в чруте созданном из указанных модулей. Подробнее ==== addmemory==== Увеличение размера корневой aufs за счет своп файла. Подробнее ==== syschanges==== Отслеживание изменений в rw слое корневой aufs. Подробнее —- ====== Графические скрипты (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 из всех модулей (кроме тех, с которых были сняты флажки). ВАЖНО. Функционал неполный с некоторых пор. Подробнее ==== extractor_pfs ==== Скрипт позволяет извлечь один или несколько модулей из файла .pfs** (GUI к pfsextract).

Обсуждение на форуме.

Печать/экспорт