Содержание

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

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

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

Теория

Подключить

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

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

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

Отключить

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

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

Установить

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

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

Смотреть

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

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

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

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

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

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

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

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-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 на загруженной системе

  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

dpkg-trim

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

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

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

Форум

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

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

sudo pacman2pfs mc
  1. Собрать с dev и /var/lib/pacman. В этом случае ничего удалять нельзя
  2. Собрать без dev и /var/lib/pacman
sudo mkpfs mc-4.8.1-1

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

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

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

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 модулей и пакетов

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

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

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

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