Работа с модулями.pfs и пакетами (.pkg.). Стандарты названий

Работа с модулями.pfs

Возможные операции с модулями

Подключить

Модуль монтируется в корень / AUFS. Если подключить в верхний слой AUFS - он перекроет прочие ausf файлы (только ausf, то что Вы изменяли будет всегда сверху ; посмотреть изменения - в /mnt/live/memory/changes ). Можно перед подключением скопировать его в память, что даст:

  • Плюсы - можно отключить загрузочную флэшку, обращения к винту минимальны - экономим ресурс и батарею, система работеет быстрее
  • Минусы - подключение дольше, расходуется RAM

Некоторые модули имеют зависимые модули (без которых работать не будет). При подключении модуля через sfs-get - будет предложено подключить зависимые. Просмотреть зависимости без подключения можно :

  • примонтировать модуль
  • прочитать в файле /start.sh строки, начинающиеся с sfs-get-dep

Добавляйте модуль в автозагрузку системы (в /modules) только после его тестирования в интерактивном режиме и только со всеми зависимостями

Отключить

Если хотя бы один файл модуля занят (запущен или открыт в другой программе) - он не отключится

Закройте связанные программы, перезагрузите Х. Иногда помогает только reboot

Установить

Модуль будет распакован в корень и перекроет все. Если после этого не сделать сохраненку - после перезагруза все пропадет. По большому счету - это рудименты .pet. Там был только этот вариант.

Практическая польза - сделать во время экспериментов, чтобы файлы модуля гарантированно перекрыли все (aufs и changes)

Смотреть

Модуль монтируется на чтение (mount -o loop ) в каталог. Можно посмотреть что внутри. Ничего более

Распаковать (пересобрать)

Автообновление модулей PRA

После загрузки системы, происходит проверка актуальности версий загруженных модулей

  • Результаты выводятся на экран диалоговыми сообщениями системы
  • Отключить через меню - «Настройка автозапуска» - mod-up
  • Запустить принудительно - через sfs-get

Стандарты названий модулей

Для правильной работы автообновления, необходимо придерживаться стандарта:

  • XXX-*.pfs : базовые модули. X- цифры по которым модули сортируются по слоям aufs (т.е. какой модуль перекрывает остальные). При загрузке из /optional и т.п. используйте sort=
  • Модуль начинается с заглавной буквы: составной модуль (можно разобрать pfsextract)
  • -p- : портированный (в /usr/lib должно быть пусто)
  • -yyXX : код сборщика модуля (yy-первые буквы ника) и ХХ (цифры) версия
  • _any _64 : архитектура. Если пусто - i686
  • ГГММДД - дата. Модуль для pra-roll-ГГММДД. Для других PRA не подойдет

Пример: 045-Program-такая-то-p-1.2.1_64-sf09.pfs

  • 045: базовый
  • P: составной модуль
  • Program-такая-то: имя программы
  • -p: портирован
  • 1.2.1: версия программы
  • _64: x86_64 (64 бит)
  • sf09: собирал модуль разработчик sfs и это его 09 версия

pacman2pfs: создание модуля.pfs из репозитория Arch

Выкачивает из репозитория Arch пакеты с зависимостями и подготавливает для упаковки модуля.

Форум

Размер модуля может быть очень большим. Оптимизация - задача для подготовленных пользователей

  • pacman2pfs пакет1 [пакет2] [пакет3] [файл со списком пакетов]
  • pacman2pfs -U /путь/локальный_пакет [список локальных пакетов]: Установить локальный пакет(ы) в каталог с его именем, разрешив зависимости из репозитория. Актуально для установки пакета не из репозитория или другого среза репозитория
  • pacman2pfs -p : Установить все пакеты уже находящиеся в /var/cache/pacman/pkg/ в каталог с именем первого по алфавиту пакета
  • pacman2pfs [-n] пакет [список пакетов]: пропустить очистку кэш пакетов

Порядок сборки:

  • С помощью sfs-get проверяем, что готового модуля нет
  • Отключаем devx, сохраненку и прочие модули не из iso (иначе у других юзеров может не заработать; у них нет либ из Вашей сохраненки).
  • В терминале вводим команду pacman2pfs с параметром названия пакета например mc. Чтобы хватило прав на стирание кеша, выполняем от имени суперпользователя ставя перед командой sudo
sudo pacman2pfs mc
  • При первом запуске будет вопрос «синхронизировать ли базу пакетов». Соглашаемся, введя 'Y' и нажав Enter, также соглашаемся на очистку кеша и на загрузку файла. Кеш это каталог /var/cache/pacman/pkg куда и загрузится пакет, в данном случае это файл mc-4.8.1-1-i686.pkg.tar.xz.
  • Проанализируйте состав пакетов, которые собирается загрузить скрипт. Если среди них есть такие, которые уже есть в репозитории модулей.pfs (например : qt mesa ffmpeg sdl perl python) - прервите (Ctrl+c) pacman2pfs, подключите эти модули, снова запустите pacman2pfs
  • В текущем каталоге появится каталог с именем нашего пакета. И _DEV - составляющие пакета, нужные только для компиляции (есть не у всякого пакета)
  • Далее правильные варианты:
  1. Собрать с dev и /var/lib/pacman. В этом случае ничего удалять нельзя
  2. Собрать без dev и /var/lib/pacman
  • 1 - pacman увидит. 2 - невидимка. Если сделать без dev , но с /var/lib/pacman - ждите сюрпризов при компиляции
  • Водим команду mkpfs также от суперпользователя, и в параметре укажем наш созданый каталог.
sudo mkpfs mc-4.8.1-1
  • В итоге получаем готовый модуль.pfs, который можно подключать при автозагрузке или через sfs-get

Варианты уменьшения размера модуля:

  • pkg2pfs + dep-find (см. ниже)
  • перекомпилить с оптимизацией ключей (ищите в AUR готовый).

Если модуль все равно большой - эта прога не для маленького дистрибутива

Найти пакет с недостающим файлом

sudo pkgfile -u && pkgfile -r часть_имени_файла
sudo pacman -Sw пакет && sudo pkg2pfs /var/cache/pacman/pkg/пакет

pkg2pfs: конвертация пакета в модуль

  1. pkg2pfs /var/cache/pacman/pkg/пакет - получаем каталог с содержимым пакета
  2. mkpfs каталог - .pfs из него.

pfspkg: названия пакетов, содержащихся в модуле.pfs

Удобно использовать для пересоздания модуля:

pacman2pfs `pfspkg module.pfs`

-r - удалит информацию (но не содердимое) о пакете в /var/lib/pacman/local. Удобно, например для сборки другой DE. Используйте ТОЛЬКО при FRUGAL с RO сохраненкой или FULL в.4, не обновляя сохраненку

Редактирование (пересборка) пакета

Распаковать:

mkdir tmp && cd tmp && tar -xf ../пакет.pkg.tar.xz

Или в mc : F2 - Распаковать tar

dir2pkg - запаковать:

dir2pkg tmp

Или в mc : нажать на файл .PKGINFO

Создание пакета

Стандартный способ (AUR ABS)

  1. подключить DEVX
  2. AUR : packer пакет
  3. ABS: asp export пакет + makepkg

Руками

  1. Сложить файлы будущего пакета в директорию
  2. Из любого другого пакета скопировать .PKGINFO (как из архива)
  3. dir2pkg директория

Полученный пакет выложить на форуме для добавления в репозиторий

Использование чужих и от других версий PRA модулей и пакетов

  • Актуально только если программы нет в Arch репозитории или AUR
  • Если необходимо - убедиться что не будет конфликта библиотек (.so файлов в /usr/lib) или портировать
  • Модули от PRA-roll-170101 к PRA-roll-180101 (например) могут подойти, но версии библиотек могут быть разными и это может сломать систему. При острой необходимости - загружайте модули в нижний слой AUFS (pfsload -l , располагайте в /base/ c именами 000-*)

Необходимо проверить:

  1. /bin /sbin /usr/sbin - симлинки на /usr/bin
  2. /lib /lib64 - симлинк на /usr/lib

Это специфика Arch Linux. Просто переместите файлы. В противном случае система при подключении модуля зависнет.

Кроме того может не хватать библиотек. Запускайте в консоле. Смотрите вывод.

  • Найти недостающие зависимости: dep-find каталог_с_распакованным_модулем
Печать/экспорт