====== pfs-utils. Утилиты для работы с модулями squashfs. Версия 3 ====== *Pfs-utils - комплект скриптов полностью покрывающий задачи по работе со squashfs модулями для любых linux live ( [[setups/full-vs-frugal|frugal]] ) дистрибутивов. *Утилиты не являются самодостаточными, то есть работоспособность скриптов по отдельности не гарантируется. *Актуальными на сегодняшний момент являются pfs-utils версии 3.*, которые имеют кардинальные отличия от предыдущих версий как по составу скриптов и ключам так и по алгоритмам работы утилит. *Утилиты имеют встроенный --help и небольшую общую справку (man pfs-utils). *[[http://forum.puppyrus.org/index.php?board=172.0|Обсуждение]] *[[https://github.com/pfs-utils/pfs-utils-cli/|Скачать]] ====== Терминология и спецификации формата PFS ====== *Модуль - [[setups/howto-squashfs|squashfs]] архив, содержит дерево каталогов и файлов (от корня системы) для одной или нескольких программ. *При подключениии модуля к корневой aufs (linux live) файлы модуля становятся доступными в системе. *PFS-модуль - модуль, собранный утилитой mkpfs. Отличается от модуля наличием служебной информации (метаданных). *mkpfs собирает pfs-модуль из одного или нескольких источников и содержит метаданные о каждом из них. Источниками могут быть: -PFS-модули -Каталоги -Файлы, содержащих внутри файловую систему : //dd if=/dev/zero of=File.img bs=1M count=10240 && mkfs.ext4 File.img// *pfs-модуль собраный из одного источника называем - простым *pfs-модуль собраный из нескольких источников - составным (контейнером) * При помощи pfs-util возможно подключение, отключение, сборка - разборка составного модуля на составляющие **Внимание!!!** Не рекомендуется использовать в именах файлов и путей пробелы и символы имеющие для sh (bash) специальное значение. ===== Конфигурационные файлы ===== */etc/initvars - переменные заданные initrd ( часть спецификации [[ http://forum.puppyrus.org/index.php?topic=18733.0 | 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. Каталог для метаданных: * /$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 ==== pfs==== *Библиотека функций для pfs-utils; *функции могут быть использованы отдельно в консоли или в ваших скриптах === Использование: === *pfs *source /path/to/scripts/pfs ; === Функции (): === *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 модули сжатие которых поддерживает ваша система, разделы **Ext2**/**3**/**4** и каталоги на таких разделах к корневой 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** из каталога <>. ***mkpfs -d /catalog** - создаст **составной.pfs** из каталогов внутри <>. ***mkpfs -m /catalog** - создаст **составной.pfs** из **.pfs** внутри <>. Вложенные в «/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 ==== *Составной модуль разбирает (извлекает отдельные pfs из составного модуля **.pfs**). *Не составной - распаковывает == Использование: == ***pfsextract /file.pfs** - создать каталог <> с отдельными файлами **.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 не помню). В текущей папке получите модуль с изменениями. === Использование: === *pfsrebuild ==== sync2layer==== Переносит файлы из верхнего слоя aufs во второй слой. *Подключает новый rw слой (папка или img) и переносит в него файлы из changes. *Использовать можно для освобождения RAM при переполнении changes, и для создания модулей с изменениями на ходу. === Использование: === *sync2layer - создать слой и перенести в него файлы из changes *sync2layer - перенести файлы в существующий второй слой * - каталог * - fs in file ---- ====== Графические скрипты (GUI) ====== ==== open_pfs ==== Основной скрипт, позволяет подключить, отключить или установить модули.pfs. Если в подключаемом **.pfs** есть файл <>, содержащий команду запуска программы (например <>) - то после подключения пользователю будет предложено запустить эту команду. После подключения или установки pfs выводится список отсутствующих зависимостей. ====uninstall_pfs === Удаляет выбранные пользователем pfs. ==== manager_pfs ==== Показывает список всех (постоянно подключённых, временно подключённых и установленных) pfs в системе. ==== loader_fs ==== Позволяет подключить к корневой файловой системе AUFS файлы **SFS**, **2**/**3**/**4fs** и разделы **Ext2**/**3**/**4** (GUI к //pfsload// | //sfsload// | //extload//). ---- ==== editor_pfs ==== Редактор файлов PFS (GUI к //pfsmerge//). == Принцип работы скрипта: == *Пользователь указывает отдельные PFS-файлы и/или каталог с PFS-файлами. *Скрипт читает все отдельные файлы + все файлы каталога и составляет полный список включённых в них pfs. *Пользователь снимает флажки с каких-то модулей, если нужно. *Скрипт собирает PFS из всех модулей (кроме тех, с которых были сняты флажки). ==== extractor_pfs ==== Скрипт позволяет извлечь один или несколько модулей из файла **.pfs** (GUI к //pfsextract//). ---- [[http://forum.puppyrus.org/index.php?board=172.0|Обсуждение на форуме]].