Содержание

Работа с модулями.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 ) в каталог. Можно посмотреть что внутри. Ничего более

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

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

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

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

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

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

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

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

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

chroot2pfs: создание модуля.pfs из репозитория Arch на любом Linux с AUFS

chroot2pfs создает свой корень системы из перечисленных модулей (каталогов) , делает chroot и при выходе сохраняет результат ваших действий

chroot2pfs --mlist /путь/001...,/путь/030-qt5... --command bash

Если вы собираете на загруженной системе (т.е. модули 001*.pfs и 030-qt5*.pfs являются слоями AUFS Вашей системы и уже подключены):

chroot2pfs -m "^\(001\|030-qt5\)-.*" --command bash

…и далее

pacman -Sy && pacman -S нужные_пакеты

mk-dp: создание псевдопакета arch и ubuntu

  • Бывший mk-dpkg
  • В ubuntu-debian переносит /var/lib/dpkg/status в /var/lib/dpkg/_status/имя_модуля.stt удалив из него все не про этот модуль. Так удобнее для chroot2pfs (внутри сделать dpkg-fix) и апдейта части модулей (верхние модули не перекроют обновленные индексы обновленных пакетов).
  • можно установить дистрибутив как FULL (инсталлятором) и работать (удалять) с этими модулями как с пакетами.
  • Для портированных модулей mk-dp создает псевдо (без зависимостей и т..п.) индексы для apt и pacman. Пример
# mk-dp
Создание индексов apt и pacman модуля.pfs. Дает возможность удалить модуль,
установленный распаковкой (unsquashfs -dest / модуль.pfs) модуля.pfs в корень FULL дистрибутива 
его стандартным пакетным менеджером (apt purge или pacman -R)
Для apt нужно после распаковки дополнительно использовать dpkg-fix
    Usage: /usr/local/bin/mk-dp [-1] [-l] [-a] [-p] dir 
        dir : директория с распакованным составным модулем.pfs , т.е. dir/mod1 dir/mod2 ...
        -1  : директория с распакованным одиночным  модулем.pfs. Можно не указывать - автоопределится
        -l  : показать устанновленные в систему такие модули. 
            apt    - группа portable. 
            pacman - группа mk-dp
        -a  : создать только apt индексы
        -p  : создать только pacman индексы
        -r  : удалить */var/lib/dpkg и */var/lib/pacman

mkmod: создание модуля.pfs из пакетов ubuntu или arch на загруженной системе

  • Это обертка вокруг chroot2pfs. Использует уже загруженные модули вашего дистрибутива
  • Создание модуля.pfs из пакетов Arch или Debian на запущенном фругал дистрибутиве.
  • Из уже загруженных модулей.pfs собирается новый корень (chroot2pfs) и поверх него создается модуль.
  • Список использованных модулей выводится в начале
  Usage:  ./mkmod пакет1 пакет2 ...
  Usage:  ./mkmod [-m m1,m2] пакет1 пакет2 ... - где mx - части названий дополнительно подключаемых при сборке модулей
  1. mkmod имя_пакета.
    • Точное название пакета искать :
      • ubuntu : apt update && apt search имя_пакета или здесь
      • arch : pacman -Sys имя_пакета
  2. mkdp каталог_с_пакетами
  3. mkpfs каталог_с_пакетами

Утилиты для дистрибуnивов с apt (Debian, Ubuntu)

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

  1. deb2pfs пакет.deb - получаем каталог с содержимым пакета
  2. mkpfs каталог - .pfs из него.

dpkg-fix

  • apt хранит списки всех пакетов в одном файле /var/lib/dpkg/status - в LF дистрибутивах этот список делится на части. В каждом модуле только свой список пакетов /var/lib/dpkg/_status/название_модуля.stt
  • dpkg-fix после объединения модулей.pfs в общий корень - собирает из *.stt /var/lib/dpkg/status

dpkg-trim

Создает из /var/lib/dpkg/status - /var/lib/dpkg/_status/название_модуля.stt

Утилиты для дистрибуnивов с pacman (Arch, Mandjaro)

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

  • Выкачивает из репозитория Arch пакеты с зависимостями и подготавливает для упаковки модуля.
  • Если у Вас подключено много непортированных модулей - удобнее использовать chroot2pfs. Иначе при другом составе модулей в созданном модуле будет не хватать компонентов

Форум

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

  • 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
    • Перед окончательной упаковкой модуля создайте в корне каталога с модулем файл start.sh , в который добавьте все зависимые модули следующим образом : sfs-get-dep зависимый_модуль. Тогда при подключении Ваш модуль запросит подключение этих зависимых модулей
  • В текущем каталоге появится каталог с именем нашего пакета. И _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

В Arch не заморачиваются идеей «маленький и быстрый» - поэтому при создании модулей приходится «поколдовать»: перекомпилить с уменьшением зависимостей, откинуть все не обязательное. Посмотреть - не избыточны ли зависимости. Например avahi (pol)kit-ы, mesa python perl.

Порядок сборки маленьких модулей (без гарантий работоспособности - рецепт только для опытных):

  1. sudo pacman2pfs пакет или pacman -Syw пакет (cкачать пакет c зависимостями, без установки)
  2. pkg2pfs /var/cache/pacman/pkg/пакет (подробнее - выше) - получаем каталог с содержимым пакета и .pfs из него.
  3. Проверяем работостособность .pfs подключением и запуском в терминале
  4. dep-find имя каталога. Получаем список недостающих библиотек.so
  5. Добавляем эти библиотеки каталог/usr/lib. Если нужную библиотеку не найти: pkgfile файл или pkgfile -r часть имени файла
  6. mkpfs каталог
  7. Если итоговый модуль не работает - сравнивайте с рабочим модулем, сделанным pacman2pfs и ищите отличия
  8. Готовый рабочий модуль желательно портировать
Перекомпилить с оптимизацией ключей (ищите в AUR готовый).

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

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

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

pacman2pfs: создание модуля.pfs из AUR

AUR

  1. packer имя_или_описание_пакета.
  2. Если для сборки пакета требуется установка зависимых пакетов - подключаем модули, имеющиеся в репозитории (потом прописываем эти модули в зависимости). Из прочих зависимостей делаем pacman2pfs промежуточный модуль и подключаем этот модуль
  3. По итогу сборки получаем пакет
  4. Отключаем все модули, подключенные для сборки
  5. pacman2pfs -U полученный пакет
  6. Далее как в предыдущем разделе

pacman-a : достать пакет из Historical Archive

  • Последнее время ARM стали активно чистить переносом в Historical Archive.
  • pacman-a. Поддерживаются только ключи -S[wdd] - см. pacman. Другие и не нужны. Надо только выкачать в /var/cache/pacman/pkg. Остальное сделает pacman
  • Для сборки модуля из репозитория , перемещенного в HA - в скрипте pacman2pfs замените pacmcn на pacman-a

pacman-arm pacman-ha: достать пакет нужной версии из ARM и Historical Archive

  • Консольный с меню на dialog
  • Показывает все версии пакетов в ARM
  • Только скачивает. Не устанавливает и не разрешает зависимости
  • Для более старых пакетов, перемещенных из ARM в Historical Archive используйте pacman-ha
  • Запуск :
pacman-arm полное_название_пакета_без_версии
pacman-ha  полное_название_пакета_без_версии

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 каталог_с_распакованным_модулем
Печать/экспорт