Различия

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

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

puppyrus:pr218:pfs [2017/02/14 10:23]
puppyrus:pr218:pfs [2017/05/21 16:52] (текущий)
Строка 1: Строка 1:
 +====== pfs-utils. Утилиты для работы с модулями squashfs. Версия 2 ======
 +
 +  *В рамках работы над дистрибутивом [[http://forum.puppyrus.org/index.php?board=87.0|PuppyRus]] был разработан формат модулей: **PFS**. Ограниченная поддержка .pet и .sfs оставлена для совместимости. 
 +  *Позже произведена доработка для использования в любом Linux [[setups/full-vs-frugal|frugal]] дистрибутиве
 +  *[[http://forum.puppyrus.org/index.php?board=172.0|Обсуждение]]
 +  *[[https://github.com/pfs-utils/pfs-utils-cli/tree/version_2|Скачать]]
 +====== Терминология====== 
 +  *[[setups/howto-squashfs|squashfs]]
 +  *модуль.pfs - squashfs, собранный mkpfs. Содержит в себе список файлов
 +  *составной модуль.pfs - squashfs, собранный pfsmerge. Возможно разделение на исходные модули
 +====== Функционал pfs-utils====== 
 +  *Создание модуля из каталога (и наоборот)
 +  *Подключение (отключение) модуля или любого squashfs. Опционально с копированием в память
 +  *Склейка (расклейка) составного модуля
 +  *(Де)инсталляция модуля (распаковка в корень)
 +
 +====== Зависимости====== 
 +  *squashfs-util
 +  *util-linux
 +  *findutils
 +  *bash
 +  *Для gui : gtkdialog; yad
 +
 +====== Спецификация ======
 +
 +  *Расширение файла - **.pfs**
 +  *Файловая система внутри файла - //[[wpru>Squashfs]]4// с сжатием **xz**  или **gz** (задается ключом -g)
 +  */etc/initvars и /usr/lib/libpfs - устанавливаются переменные, учитывающий специфику конкретного дистрибутива"
 +    *prefixmp= каталог для промежуточного монтирования модулей (перед монтированием в корень
 +    *copyramdir= каталог для промежуточного копирования модулей, подключаемых pfsramload
 +
 +===== Структура файловой системы внутри модуля =====
 +От корня <</>>
 +  * (Каталоги и файлы программы)
 +  * etc
 +      * packages
 +          * mount
 +              * [Название_модуля]
 +                  * pfs.files      (Список файлов, относящихся к модулю)
 +                  * pfs.dirs.empty (Список пустых каталогов в модуле. Необязательный)
 +                  * pfs.depends    (Список зависимостей. Необязательный)
 +                  * pfs.specs      (Название программы, версия и т.д. Необязательный)
 +                  * pfs.md5sums    (Хэш-суммы всех файлов в модуле. Необязательный)
 +
 +В одном файле **.pfs** может быть включено несколько модулей, в этом случае в каталоге <</etc/packages/mount>> должно быть несколько каталогов <<[Название_модуля]>>.
 +При установке модулей соответствующие каталоги [Название_модуля] перемещаются из каталога <</etc/packages/mount>> в каталог <</etc/packages/install>>.
 +====== Графические скрипты (GUI) ======
 +==== open_pfs ====
 +
 +Основной скрипт, позволяет подключить, отключить или установить модули.pfs.
 +
 +Если в подключаемом **.pfs** есть файл <</tmp/.pfs/.command>>, содержащий команду запуска программы (например <<firefox>>) - то после подключения пользователю будет предложено запустить эту команду.
 +
 +После подключения или установки pfs выводится список отсутствующих зависимостей.
 +====uninstall_pfs ===
 +Удаляет выбранные пользователем pfs.
 +                                   
 +==== manager_pfs ====
 +Показывает список всех (постоянно подключённых, временно подключённых и установленных) pfs в системе.
 +==== open_pet ====
 +Скрипт позволяет установить PET-пакет, либо конвертировать его в 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//).
 +
 +====== Консольные команды ======
 +
 +
 +==== pfsload ====
 +Подключает файл **.pfs** к корневой файловой системе AUFS.
 +
 +Также могут быть подключены **SFS**, **2**/**3**/**4fs**, разделы **Ext2**/**3**/**4** и каталоги на таких разделах к AUFS (скрипты **sfsload**, **extload**, **dirload** в настоящий момент являются ссылками на **pfsload**).
 +
 +== Использование: ==
 +  ***pfsload /file.pfs**
 +
 +== Параметры (ключи): ==
 +  ***-u** / **-.-upper** - монтирование в верхний слой AUFS (по умолчанию для **.pfs**).
 +  ***-l** / **-.-lower** - монтирование в нижний слой AUFS (по умолчанию для других типов файлов или ФС).
 +  ***-n** - не выполнять команды //depmod// и //ldconfig// после подключения (по умолчанию выполняются при наличии в подключаемых модулях.pfs модулей ядра или библиотек).
 +==== pfsunload ====
 +Отключает файл от корневой файловой системы AUFS.
 +
 +== Использование: ==
 +  ***pfsunload /file.pfs**
 +
 +==== pfsinstall ====
 +Устанавливает  PFS в корневую файловую систему.
 +
 +
 +== Использование: ==
 +  ***pfsinstall /file.pfs** - установить все pfs  из <</file.pfs>> в корневую файловую систему.
 +  ***pfsinstall /file.pfs -p pack_1 pack_2** - установить только модули <<pack_1>> и <<pack_2>> в корневую файловую систему.
 +
 +== Параметры (ключи): ==
 +  ***-u** / **-.-upper** - установка с заменой существующих файлов (по умолчанию).
 +  ***-l** / **-.-lower** - установка без замены существующих файлов.
 +
 +==== pfsuninstall ====
 +Удаляет pfs из корневой файловой системы (файлы, используемые несколькими pfs не будут удалены, пока хотя бы один из этих pfs установлен или подключён).
 +
 +==== pet2pfs ====
 +Конвертирует **.pet** в  **PFS**.
 +==== petinstall ====
 +Устанавливает **.pet** в режиме совместимости с **PFS**.
 +==== fileinpack ====
 +Информация о том, к какому подключенному или установленному pfs относится указанный файл. Допустимо указывать часть имени файла.
 +
 +== Использование: ==
 +  ***fileinpack file**
 +
 +==== 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>>.
 +
 +== Параметры (ключи): ==
 +
 +  ***-p** / **-.-name** - задаёт название модуля (по умолчанию соответствует названию каталога).
 +  ***-o** / **-.-out-file** - указывает название выходного файла **.pfs**.
 +  ***-m** / **-.-md5** - создать необязательный файл **//pfs.md5//**.
 +  ***-n** / **-.-not-dirs-empty** - не создавать файл **//pfs.dirs.empty//**.
 +  ***-f** / **-.-fast** - быстрое сжатие (размер .pfs больше, но создается быстрее).
 +  ***-no-progress** - не показывать строку прогресса.
 +  ***-d** - создает список файлов модуля, но не запаковывает в модуль (используется в pfsmerge-dir)
 +
 +==== pfsmerge ====
 +Объединяет несколько **.pfs** в один составной модуль
 +
 +== Использование: ==
 +
 +  ***pfsmerge /catalog /outfile.pfs** - объединить все файлы **.pfs** из каталога <</catalog>> в один файл <</outfile.pfs>>. Вложенные в <</catalog>> каталоги не просматриваются.
 +  ***pfsmerge /file_1.pfs /file_2.pfs /file_3.pfs /outfile.pfs**  - объединить файлы <</file_1.pfs>> <</file_2.pfs>> и  <</file_3.pfs>> в один файл <</outfile.pfs>>.
 +Допустимо смешанное использование (например <<**pfsmerge /сatalog_1 /file_1.pfs /сatalog_2 /file_2.pfs /outfile.pfs**>>, в этом случае <</outfile.pfs>> будет собран из <</file_1.pfs>>, <</file_2.pfs>> и всех файлов **.pfs** из каталогов <</сatalog_1>> и <</сatalog_2>>).
 +
 +== Параметры (ключи): ==
 +
 +  ***-.-cut pack_1 [pack_2 pack_3]** - удаляет указанные модули из выходного файла **.pfs**. (Обратите внимание! Параметр **-.-cut** всегда должен быть в строке запуска последним).
 +  ***-.-clean** - удаляет из выходного файла **.pfs** все файлы и каталоги, которые не входят в состав модулей.
 +  ***-g** - gzip компрессия (размер .pfs больше, но создается быстрее).
 +  ***-no-progress** - не показывать строку прогресса.
 +  ***-a / --add-command** - добавить команду запуска в существующий модуль.  После повторного редактирования / пересборки PFS встроенная команда теряется.\\ Рекомендуется писать команду максимально кратко (например "firefox"). Можно указывать только название исполняемого файла (параметры командной строки использовать нельзя).\\ Пользователь увидит предложение запустить программу только при наличии исполняемого файла.\\ Текст команды будет показан пользователю перед запуском.\\ После подключения такого PFS пользователю будет предложено запустить указанную команду. Так удобнее использовать PFS с одной основной программой.\\ Этот функционал задуман как альтернатива скрипту, запускающемуся при подключении модуля (скрипты автозапуска, выполняемые от root'а - потенциальная угроза).
 +
 +Можно объединять до 126 **.pfs** за один проход (если не указывать при загрузке параметр ядра //max_loop// с меньшим значением). Это ограничение AUFS. При большем количестве pfs рекомендуется объединить их в файлы по 126 pfs, потом объединить эти файлы.
 +
 +Наличие pfs с одинаковыми названиями в объединяемых файлах **.pfs** недопустимо. При наличии одинаковых pfs скрипт выведет их список и завершит работу.
 +
 +
 +==== pfsextract ====
 +Извлекает отдельные pfs из составного модуля **.pfs**.
 +
 +== Использование: ==
 +  ***pfsextract /file.pfs** - создать каталог <</file_pfs>> с отдельными файлами **.pfs** из <</file.pfs>>, каждый pfs в отдельном файле.
 +  ***pfsextract /file.pfs /catalog** - создать в каталоге <</catalog>> отдельные файлы **.pfs** из <</file.pfs>>. <</catalog>> должен быть пустым.
 +  ***pfsextract /file.pfs /catalog -p pack_1 pack_2** - создать в каталоге <</catalog>> отдельные файлы **.pfs** только из модулей <<pack_1>> и <<pack_2>>, если pfs с такими названиями содержатся в файле <</file.pfs>> (использование <<-p pack_1 pack_2>> допустимо и без указания <</catalog>>).
 +
 +== Параметры (ключи): ==
 +  ***-no-progress** - не показывать строку прогресса.
 +  ***-f** / **-.-fast** - быстрое сжатие (размер .pfs больше, но создается быстрее).
 +  ***-d** - извлекает отдельные pfs в виде каталогов. Удобно при переупаковке составного модуля
 +
 +==== pfsmerge-dir ====
 +Используется для пересборки составного модуля вместе с //pfsextract -d//
 +
 +Обновляет списки файлов в каталогах отдельных модулей и собирает их в один составной модуль
 +
 +== Использование: ==
 +
 +  ***pfsmerge-dir /catalog**  - объединить все каталоги из каталога <</catalog>> в один файл <</outfile.pfs>>.
 +
 +== Параметры (ключи): ==
 +Кроме ключа //-d// полностью совпадают с mkpfs
 +----
 +
 +==== Подключение PFS c копированием в RAM ====
 +Перед подключением можно скопировать pfs на RAM-диск.
 +
 +Преимущества:
 +  *Ускорение работы (не во всех случаях).
 +  *Экономия батареи ноутбука.
 +  *Возможность размонтировать раздел.
 +Недостатки:
 +  *Увеличивается загрузка оперативной памяти.
 +  *Требуется больше времени для подключения (не всегда).
 +Рекомендуется для компьютеров с RAM 500мб или более.
 +
 +==== pfsramload ====
 +Копирует файл **.pfs** в оперативную память компьютера и подключает его.
 +
 +== Использование: ==
 +  ***pfsramload /file.pfs**
 +
 +== Параметры (ключи): ==
 +  ***-u** / **-.-upper** - монтирование в верхний слой AUFS (по умолчанию).
 +  ***-l** / **-.-lower** - монтирование в нижний слой AUFS.
 +
 +Для отключения файла используется скрипт **pfsunload**. После отключения нужно очистить оперативную память командой **pfsramfree**.
 +
 +[[http://forum.puppyrus.org/index.php/topic,12819.0.html|Обсуждение на форуме]].
 +
 +
 +----
 +==== Поиск зависимостей (библиотек) содержимого модуля ====
 +==== pfsdepends ====
 + 
 +Проверка зависимостей.
 +
 +
 +== Использование: ==
 +  ***pfsdepends**  -  выводит список зависимостей всех pfs в системе.
 +  ***pfsdepends -f /file.pfs**  -  выводит список зависимостей из указанного файла **.pfs**.
 +
 +== Параметры (ключи): ==
 +  ***-a** / **-.-all** - выводит все зависимости (по умолчанию - только неудовлетворенные зависмости).
 +
 +
 +
 +== Формирование списка зависимостей при создании модуля описано на форуме разработчиков: ==
 +
 +**http://forum.puppyrus.org/index.php/topic,12727.msg84950.html#msg84950**
  
Печать/экспорт