Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

puppyrus:pr218:pfs4 [2020/02/17 16:18]
127.0.0.1 внешнее изменение
puppyrus:pr218:pfs4 [2021/05/31 14:30] (текущий)
sfs [pfsinfo]
Строка 1: Строка 1:
 ====== pfs-utils. Утилиты для работы с модулями squashfs. Версия 4 ====== ====== pfs-utils. Утилиты для работы с модулями squashfs. Версия 4 ======
-  *Документация корректируется.  + 
-  *Пока можно воспользоваться [[/puppyrus/pr218/pfs3|документацией от версии 3]] +  *Pfs-utils - комплект скриптов полностью покрывающий задачи по работе со squashfs модулями для  любых linux live ( [[setups/full-vs-frugal|frugal]] ) дистрибутивов. 
-  *[[http://forum.puppyrus.org/index.php?topic=22430.msg165876#msg165876|Отличия в.4 от в.3]] +  *Утилиты не являются самодостаточными, то есть работоспособность скриптов по отдельности не гарантируется. 
-  *Новый скрипт [[http://forum.puppyrus.org/index.php?topic=21158.0|chroot2pfs]]+  *Актуальными на сегодняшний момент являются pfs-utils версии 4.*, которые являются развитием версий 3.* и по большей части обратно совместимы по ключам ключам. 
 +  *Утилиты имеют встроенный --help и небольшую общую справку (man pfs-utils). 
 +  *[[http://forum.puppyrus.org/index.php?board=176.0|Обсуждение]] 
 +  *[[https://github.com/pfs-utils/pfs-utils-cli/|Скачать]] 
 + 
 +====== Терминология и спецификации формата PFS ======  
 + 
 +  *Модуль - [[setups/howto-squashfs|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 ]] ) 
 +    */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 (т.е. с перекрытием нижних слоев) 
 +    *с копированием в память 
 +  *Отключение модуля   
 +  *Инсталляция модуля (распаковка в корень системы) 
 +    *инсталляция составляющих составного модуля 
 +  еинсталляция модуля  
 +  *[[http://forum.puppyrus.org/index.php?topic=22986.msg171932#msg171932|bash completion]] 
 + 
 +====== Зависимости======  
 +  *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) 
 +===== addmemory=====   
 +Увеличение размера корневой aufs за счет своп файла. [[ http://forum.puppyrus.org/index.php?topic=20672.0|Подробнее ]] 
 + 
 +===== chroot2pfs====   
 +Собирает несколько слоев [[setups/start#aufs|AUFS]] в новый корень, в который делается [[https://wiki.archlinux.org/title/Chroot_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|chroot]]. Внутри выполняются действия, результат которых при выходе из chroot (Ctrl+d или exit)  сохраняется 
 + 
 +  *[[http://forum.puppyrus.org/index.php?topic=21158.0|Обсуждение]] 
 +  ***-h | --help** - внутренняя справка 
 +====Варианты chroot : === 
 +**-c | --contaner** -тип контейнера 
 +  ***chroot** - обычный. По умолчанию. Достаточен для сборки модулей из пакетов и пр. действий в консоли. Например (сборка модуля mc в каталог ModuleDIR): 
 + 
 +  chroot2pfs -o ModuleDIR  --flist /tmp/module.list --command apt install mc 
 + 
 +  ***nspawn** - systemd-nspawn. Нужен и на хост-системе и на гостевой (т.е. внутри chroot). Актуален для запуска графических приложений. Например:  
 + 
 +  chroot2pfs --nomod -X -c nspawn --mlist /pth/1.pfs,#2.pfs --command pcmanfm 
 + 
 +    ***--boot** - только для -c nspawn. См. systemd-nspawn -b 
 +    ***-X** - рарешить подключение к текущей X сессии. Для запуска в chroot приложений с GUI. Рекомендуется использовать с -c nspawn. Ядро хост-системы должно быть одинаковой архитектуры (i686 или x86_64) c гостевой. Сама хост-система может быть любой 
 +====В качестве слоев AUFS можно использовать:==== 
 +  ***-m | --mask** - регулярное выражение (подставляется в egrep) применяемое для названий уже загруженных модулей.pfs. Т.е. хост и гостевая система одна и та же. Удобно для сборки модулей из пакетов. Примеры : [[puppyrus/pfs?&#chroot2pfs%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8Fpfs_%D0%B8%D0%B7_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D1%8F_arch_%D0%BD%D0%B0_%D0%BB%D1%8E%D0%B1%D0%BE%D0%BC_linux_%D1%81_aufs|Arch]], [[puppyrus/ddr?&#chroot2pfs|Debian]] 
 +  ***--mlist** - список модулей и папок для создания aufs, разделитель в списке - , В списке можно применять # для блокирования. Пример : --mlist 1.pfs,#2.pfs,3.pfs . Хост и гостевая система могут быть разными 
 +  ***--flist** - список модулей и папок из файла. В файле можно применять # для блокирования. Например : cоздать список из модулей в каталоге dir: find  /pth/dir -name *.$EXT |sort |awk '{print \"#\"$0}' > flist.lst" 
 +  ***--bind** - Монтирование каталогов в корень chroot.  Список каталогов  в формате /SOURCE/DIR1::/TARGET/DIR1,/SOURCE/DIR2::/TARGET/DIR2 (монтировать каталог /SOURCE/DIR1, расположенный на хост-системе в /TARGET/DIR1 на гостевой ). Пример (прокидываем текущий катало ./  с пакет.rpm в chroot и устанавливаем его , как локальный , со всеми зависимостями) :  
 + 
 +  chroot2pfs --bind ./::/tmp/bind --command urpmi /tmp/bind/пакет.rpm 
 + 
 +====Возможные действия внутри chroot ==== 
 +  ***--command**  - команда (этот параметр должен быть последним в строке). Например (запуск программы с другой локалью):  --command LANG=ru_RU.UTF-8 program. Работает только с -c chroot 
 +  ***--script** - скрипт, который будет перенесен в chroot и запущен в нем 
 +==== Сохранение результатов==== 
 +  ***--nomod**  - не создавать модуль с изменениями 
 +  ***--notrim** - не удалять заведомо не нужные в модуле файлы (кэш и т.п.)" 
 +  ***--wh** - не удалять специальные файлы aufs (тени) 
 +  ***-f | --fast** - создать модуль c быстрым типом компрессии (lx вместо xz) 
 +  ***-n | -o | --name** - имя создаваемого модуля или каталога (если указано без без расширения .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, потом объединить эти файлы. 
 +===== mountfile=====  
 +Вспомогательный скрипт, монтирует модули 
 +==== Использование: ==== 
 +  *mountfile file.pfs (в /mnt/+...) 
 +  *mountfile file.pfs <mount point> 
 + 
 +===== umountfile=====  
 +Вспомогательный скрипт, размонтирует модули.  
 + 
 +ВАЖНО. Требует дополнительного редактирования для последующего использования в сборках PRA. [[ http://forum.puppyrus.org/index.php?topic=21361.msg152605#msg152605|Подробнее ]] 
 + 
 +===== 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. 
 + 
 + 
 + 
 + 
 +===== 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 не помню). В текущей папке получите модуль с изменениями. 
 +<del>ВАЖНО. Ограниченный функционал, использовать для пересборки модули только с root содержимым, т.к. самопроизвольно меняет владельца папок на root. [[ http://forum.puppyrus.org/index.php?topic=21704.msg157988#msg157988|Подробнее ]]</del> 
 + 
 + 
 +==== Использование: ==== 
 + 
 +  pfsrebuild <PACKAGE> <args for mkpfs> 
 +===== sync2layer=====   
 +Переносит файлы из верхнего слоя aufs во второй слой. 
 +  *Подключает новый  rw слой (папка или img) и переносит в него файлы из changes.  
 +  *Использовать можно для освобождения RAM при переполнении changes, и для создания модулей с изменениями на ходу. 
 + 
 +==== Использование: ==== 
 +  *sync2layer <newlayer> - создать слой и перенести в него файлы из changes 
 +  *sync2layer - перенести файлы в существующий второй слой 
 +  *<newlayer> - каталог 
 +  *<newlayer.rom> - fs in file 
 + 
 + 
 + 
 +===== syschanges=====   
 +Отслеживание изменений в rw слое корневой aufs. [[ http://forum.puppyrus.org/index.php?topic=21961.msg160319#msg160319|Подробнее ]] 
 + 
 + 
 +---- 
 + 
 +====== Графические скрипты (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 из всех модулей (кроме тех, с которых были сняты флажки). 
 +ВАЖНО. Функционал неполный с некоторых пор. [[ http://forum.puppyrus.org/index.php?topic=21651.0|Подробнее ]] 
 + 
 +==== extractor_pfs ==== 
 +Скрипт позволяет извлечь один или несколько модулей из файла **.pfs** (GUI к //pfsextract//). 
 + 
 +---- 
 +[[http://forum.puppyrus.org/index.php?board=172.0|Обсуждение на форуме]]. 
Печать/экспорт