Это старая версия документа.
Содержание
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-модуль из одного или нескольких источников и содержит метаданные о каждом из них. Источниками могут быть:
- 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 ( часть спецификации 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)
addmemory
Увеличение размера корневой aufs за счет своп файла. Подробнее
chroot2pfs
Собирает несколько слоев AUFS в новый корень, в который делается chroot. Внутри выполняются действия, результат которых при выходе из chroot (Ctrl+d или exit) сохраняется
- -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 можно использовать:
- –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. Подробнее
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.
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
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).