Различия
Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
— |
puppyrus:pr218:pfs3 [2018/12/03 12:49] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== 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 <mount point> | ||
+ | ==== 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 модули сжатие которых поддерживает ваша система, разделы **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** из каталога <</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 ==== | ||
+ | *Составной модуль разбирает (извлекает отдельные 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 не помню). В текущей папке получите модуль с изменениями. | ||
+ | |||
+ | === Использование: === | ||
+ | |||
+ | *pfsrebuild <PACKAGE> <args for mkpfs> | ||
+ | ==== 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**, **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|Обсуждение на форуме]]. | ||