====== pfs-utils. Утилиты для работы с пакетами дистрибутива PuppyRus. Версии меньше 2.0 (2016г.) ====== В рамках работы над дистрибутивом [[http://puppyrus.org|PuppyRus]] был разработан новый формат пакетов: **PFS**. Преимущество нового типа пакетов в том, что они соединяют в себе все плюсы PET-пакетов и SFS-модулей. Все файлы в пакете учтены. Возможна сборка и разборка базового модуля без сборочных сред или подключение к системе выше или ниже базового модуля. Ограниченная поддержка **.pet** и **.sfs** оставлена для совместимости. [[http://forum.puppyrus.org/index.php/topic,12727.0.html|Обсуждение на форуме PuppyRus + Скачать]] (пакет в стадии тестирования). ====== Спецификация ====== *Расширение файла - **.pfs** *Файловая система внутри файла - //SquashFS 4// *Тип сжатия данных - **xz** Файлы .**pfs** содержат внутри __стандартную файловую систему SFS__ со сжатием XZ. ===== Структура файловой системы внутри пакета ===== От корня <> * (Каталоги и файлы программы) * etc * packages * mount * [Название_пакета] * pfs.files (Список файлов, относящихся к пакету) * pfs.dirs.empty (Список пустых каталогов в пакете. Необязательный) * pfs.depends (Список зависимостей. Необязательный) * pfs.specs (Название программы, версия и т.д. Необязательный) * pfs.md5sums (Хэш-суммы всех файлов в пакете. Необязательный) В одном файле **.pfs** может быть включено несколько пакетов, в этом случае в каталоге <> должно быть несколько каталогов <<[Название_пакета]>>. При установке пакетов соответствующие каталоги [Название_пакета] перемещаются из каталога <> в каталог <>. ====== Графические скрипты (GUI) ====== ==== open_pfs ==== Основной скрипт, позволяет подключить, отключить или установить пакеты. Если в подключаемом **.pfs** есть файл <>, содержащий команду запуска программы (например <>) - то после подключения пользователю будет предложено запустить эту команду. После подключения или установки пакетов выводится список отсутствующих зависимостей. ====uninstall_pfs === Удаляет выбранные пользователем пакеты. ==== manager_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 из всех пакетов (кроме тех, с которых были сняты флажки). ==== 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// после подключения (по умолчанию выполняются при наличии в подключаемых пакетах модулей ядра или библиотек). ==== pfsunload ==== Отключает файл от корневой файловой системы AUFS. == Использование: == ***pfsunload /file.pfs** ==== pfsinstall ==== Устанавливает пакеты PFS в корневую файловую систему. == Использование: == ***pfsinstall /file.pfs** - установить все пакеты из <> в корневую файловую систему. ***pfsinstall /file.pfs -p pack_1 pack_2** - установить только пакеты <> и <> в корневую файловую систему. == Параметры (ключи): == ***-u** / **-.-upper** - установка с заменой существующих файлов (по умолчанию). ***-l** / **-.-lower** - установка без замены существующих файлов. ==== pfsuninstall ==== Удаляет пакет из корневой файловой системы (файлы, используемые несколькими пакетами не будут удалены, пока хотя бы один из этих пакетов установлен или подключён). ==== pet2pfs ==== Конвертирует **.pet** в пакет **PFS**. ==== petinstall ==== Устанавливает **.pet** в режиме совместимости с **PFS**. ==== fileinpack ==== Информация о том, к какому подключенному или установленному пакету относится указанный файл. Допустимо указывать часть имени файла. == Использование: == ***fileinpack file** ==== pfsinfo ==== При запуске **pfsinfo /file.pfs** выводит список пакетов в указанном файле. При запуске без параметров выводит список всех пакетов в системе. == Параметры (ключи): == ***-m** / **-.-mount** - выводить только подключённые пакеты. ***-i** / **-.-install** - выводить только установленные пакеты. ---- ==== mkpfs ==== Создаёт **.pfs** пакет из каталога (аналогично mksquashfs). Автоматически создаёт файлы **//pfs.files//**, **//pfs.specs//** и **//pfs.dirs.empty//** (при наличии внутри пакета пустых каталогов). == Использование: == ***mkpfs** - создаст **.pfs** из текущего каталога ***mkpfs /catalog** - создаст **.pfs** из каталога <>. == Параметры (ключи): == ***-p** / **-.-name** - задаёт название пакета (по умолчанию соответствует названию каталога). ***-o** / **-.-out-file** - указывает название выходного файла **.pfs**. ***-m** / **-.-md5** - создать необязательный файл **//pfs.md5//**. ***-n** / **-.-not-dirs-empty** - не создавать файл **//pfs.dirs.empty//**. ***-no-progress** - не показывать строку прогресса. ==== pfsmerge ==== Объединяет пакеты из нескольких файлов **.pfs** в один файл. == Использование: == ***pfsmerge /catalog /outfile.pfs** - объединить все файлы **.pfs** из каталога <> в один файл <>. Вложенные в <> каталоги не просматриваются. ***pfsmerge /file_1.pfs /file_2.pfs /file_3.pfs /outfile.pfs** - объединить файлы <> <> и <> в один файл <>. Допустимо смешанное использование (например <<**pfsmerge /сatalog_1 /file_1.pfs /сatalog_2 /file_2.pfs /outfile.pfs**>>, в этом случае <> будет собран из <>, <> и всех файлов **.pfs** из каталогов <> и <>). == Параметры (ключи): == ***-.-cut pack_1 [pack_2 pack_3]** - удаляет указанные пакеты из выходного файла **.pfs**. (Обратите внимание! Параметр **-.-cut** всегда должен быть в строке запуска последним). ***-.-clean** - удаляет из выходного файла **.pfs** все файлы и каталоги, которые не входят в состав пакетов. ***-no-progress** - не показывать строку прогресса. ***-a / --add-command** - добавить команду запуска в существующий модуль. После повторного редактирования / пересборки PFS встроенная команда теряется.\\ Рекомендуется писать команду максимально кратко (например "firefox"). Можно указывать только название исполняемого файла (параметры командной строки использовать нельзя).\\ Пользователь увидит предложение запустить программу только при наличии исполняемого файла.\\ Текст команды будет показан пользователю перед запуском.\\ После подключения такого PFS пользователю будет предложено запустить указанную команду. Так удобнее использовать PFS с одной основной программой.\\ Этот функционал задуман как альтернатива скрипту, запускающемуся при подключении модуля (скрипты автозапуска, выполняемые от root'а - потенциальная угроза). Можно объединять до 126 **.pfs** за один проход (если не указывать при загрузке параметр ядра //max_loop// с меньшим значением). Это ограничение AUFS. При большем количестве пакетов рекомендуется объединить их в файлы по 126 пакетов, потом объединить эти файлы. Наличие пакетов с одинаковыми названиями в объединяемых файлах **.pfs** недопустимо. При наличии одинаковых пакетов скрипт выведет их список и завершит работу. ==== pfsextract ==== Извлекает отдельные пакеты из многопакетных файлов **.pfs**. == Использование: == ***pfsextract /file.pfs** - создать каталог <> с отдельными файлами **.pfs** из <>, каждый пакет в отдельном файле. ***pfsextract /file.pfs /catalog** - создать в каталоге <> отдельные файлы **.pfs** из <>. <> должен быть пустым. ***pfsextract /file.pfs /catalog -p pack_1 pack_2** - создать в каталоге <> отдельные файлы **.pfs** только из пакетов <> и <>, если пакеты с такими названиями содержатся в файле <> (использование <<-p pack_1 pack_2>> допустимо и без указания <>). == Параметры (ключи): == ***-no-progress** - не показывать строку прогресса. ---- ==== Подключение PFS c копированием в RAM ==== Перед подключением можно скопировать пакет на 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** - выводит список зависимостей всех пакетов в системе. ***pfsdepends -f /file.pfs** - выводит список зависимостей пакетов из указанного файла **.pfs**. == Параметры (ключи): == ***-a** / **-.-all** - выводит все зависимости (по умолчанию - только неудовлетворенные зависмости). == Формирование списка зависимостей при создании пакета описано на форуме разработчиков: == **http://forum.puppyrus.org/index.php/topic,12727.msg84950.html#msg84950**