pfs-utils. Утилиты для работы с пакетами дистрибутива PuppyRus

В рамках работы над дистрибутивом PuppyRus был разработан новый формат пакетов: PFS.

Преимущество нового типа пакетов в том, что они соединяют в себе все плюсы PET-пакетов и SFS-модулей. Все файлы в пакете учтены. Возможна сборка и разборка базового модуля без сборочных сред или подключение к системе выше или ниже базового модуля.

Ограниченная поддержка .pet и .sfs оставлена для совместимости.

Обсуждение на форуме PuppyRus + Скачать (пакет в стадии тестирования).

Спецификация

  • Расширение файла - .pfs
  • Файловая система внутри файла - SquashFS 4
  • Тип сжатия данных - xz

Структура файловой системы внутри пакета

От корня «/»

  • (Каталоги и файлы программы)
  • 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 есть файл «/tmp/.pfs/.command», содержащий команду запуска программы (например «firefox») - то после подключения пользователю будет предложено запустить эту команду.

После подключения или установки пакетов выводится список отсутствующих зависимостей.

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 (по умолчанию для других типов файлов или ФС).

pfsunload

Отключает файл от корневой файловой системы AUFS.

Использование:
  • pfsunload /file.pfs

pfsinstall

Устанавливает пакеты PFS в корневую файловую систему.

Использование:
  • pfsinstall /file.pfs - установить все пакеты из «/file.pfs» в корневую файловую систему.
  • pfsinstall /file.pfs -p pack_1 pack_2 - установить только пакеты «pack_1» и «pack_2» в корневую файловую систему.
Параметры (ключи):
  • -u / --upper - установка с заменой существующих файлов (по умолчанию).
  • -l / --lower - установка без замены существующих файлов.

pfsuninstall

Удаляет пакет из корневой файловой системы (файлы, используемые несколькими пакетами не будут удалены, пока хотя бы один из этих пакетов установлен или подключён).

pet2pfs

Конвертирует .pet в пакет PFS.

petinstall

Устанавливает .pet в режиме совместимости с PFS.

pfsinfo

При запуске pfsinfo /file.pfs выводит список пакетов в указанном файле.

При запуске без параметров выводит список всех пакетов в системе.

Параметры (ключи):
  • -m / --mount - выводить только подключённые пакеты.
  • -i / --install - выводить только установленные пакеты.

mkpfs

Создаёт .pfs пакет из каталога (аналогично mksquashfs). Автоматически создаёт файлы pfs.files, pfs.specs и pfs.dirs.empty (при наличии внутри пакета пустых каталогов).

Использование:
  • mkpfs - создаст .pfs из текущего каталога
  • mkpfs /catalog - создаст .pfs из каталога «/catalog».
Параметры (ключи):
  • -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 из каталога «/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 все файлы и каталоги, которые не входят в состав пакетов.
  • -no-progress - не показывать строку прогресса.

Можно объединять до 126 .pfs за один проход (если не указывать при загрузке параметр ядра max_loop с меньшим значением). Это ограничение AUFS. При большем количестве пакетов рекомендуется объединить их в файлы по 126 пакетов, потом объединить эти файлы.

Наличие пакетов с одинаковыми названиями в объединяемых файлах .pfs недопустимо. При наличии одинаковых пакетов скрипт выведет их список и завершит работу.

pfsextract

Извлекает отдельные пакеты из многопакетных файлов .pfs.

Использование:
  • pfsextract /file.pfs - создать каталог «/file_pfs» с отдельными файлами .pfs из «/file.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», если пакеты с такими названиями содержатся в файле «/file.pfs» (использование «-p pack_1 pack_2» допустимо и без указания «/catalog»).
Параметры (ключи):
  • -no-progress - не показывать строку прогресса.

Подключение PFS c копированием в RAM

Перед подключением можно скопировать пакет на RAM-диск.

Преимущества:

  • Ускорение работы (не во всех случаях).
  • Экономия батареи ноутбука.
  • Возможность размонтировать раздел.

Недостатки:

  • Увеличивается загрузка оперативной памяти.
  • Требуется больше времени для подключения (не всегда).

Рекомендуется для компьютеров с RAM 500мб или более.

pfsramload

Копирует файл .pfs в оперативную память компьютера и подключает его.

Использование:
  • pfsramload /file.pfs
Параметры (ключи):
  • -u / --upper - монтирование в верхний слой AUFS (по умолчанию).
  • -l / --lower - монтирование в нижний слой AUFS.

Для отключения файла используется скрипт pfsunload. После отключения нужно очистить оперативную память командой pfsramfree.

Обсуждение на форуме.

Разрешение зависимостей (в разработке)

Поиск недостающих для работы программы библиотек

pfsdepends

Проверка зависимостей.

  • Использование: pfsdepends или pfsdepends pack1.
  • По умолчанию скрипт выводит список отсутствующих зависимостей, с ключом -a/--all - все зависимости.
  • Скрипт читает файл pfs.depends в конфиг. каталоге пакета (на сегодня этот файл практически во всех пакетах отсутствует).

Файл необходимо создавать вручную. В файле должны быть перечислены пакеты-зависимости (один пакет - одна строка). В файле можно (и даже желательно) указывать не полное название пакета, а только часть.

pfslibslst

  • Создание каталога библиотек репозитория
  • Вызывается командой pfslibslst /catalog (где «/catalog» - это каталог с файлами .pfs).
  • Создаёт в корне каталога файл libs.lst

mkpfsdep

  • Скрипт в процессе создания.
  • Выводит список пакетов, необходимых для разрешения зависимостей подключаемого пакета
Печать/экспорт