Работа с модулями.pfs и пакетами (.pkg.). Стандарты названий
Работа с модулями.pfs
Возможные операции с модулями
Подключить
Модуль монтируется в корень / AUFS. Если подключить в верхний слой AUFS - он перекроет прочие ausf файлы (только ausf, то что Вы изменяли будет всегда сверху ; посмотреть изменения - в /mnt/live/memory/changes ).
Можно перед подключением скопировать его в память, что даст:
Плюсы - можно отключить загрузочную флэшку, обращения к винту минимальны - экономим ресурс и батарею, система работеет быстрее
Минусы - подключение дольше, расходуется RAM
Некоторые модули имеют зависимые модули (без которых работать не будет). При подключении модуля через sfs-get - будет предложено подключить зависимые. Просмотреть зависимости без подключения можно :
Добавляйте модуль в автозагрузку системы (в /modules) только после его тестирования в интерактивном режиме и только со всеми зависимостями
Отключить
Если хотя бы один файл модуля занят (запущен или открыт в другой программе) - он не отключится
Закройте связанные программы, перезагрузите Х. Иногда помогает только reboot
Установить
Модуль будет распакован в корень и перекроет все. Если после этого не сделать сохраненку - после перезагруза все пропадет. По большому счету - это рудименты .pet. Там был только этот вариант.
Практическая польза - сделать во время экспериментов, чтобы файлы модуля гарантированно перекрыли все (aufs и changes)
Смотреть
Модуль монтируется на чтение (mount -o loop ) в каталог. Можно посмотреть что внутри. Ничего более
Распаковать (пересобрать)
Автообновление модулей
После загрузки системы, происходит проверка актуальности версий загруженных модулей
Результаты выводятся на экран диалоговыми сообщениями системы
Отключить через меню - «Настройка автозапуска» - mod-up
Запустить принудительно - через sfs-get
Стандарты названий модулей
Для правильной работы автообновления, необходимо придерживаться стандарта:
XXX-*.pfs : базовые модули.
X- цифры по которым модули сортируются по слоям aufs (т.е. какой модуль перекрывает остальные). При загрузке из /optional и т.п. используйте
sort=
-
-p- :
портированный (в /usr/lib должно быть пусто - т.е. не сломает систему)
-yyXX : код сборщика модуля (yy-первые буквы ника) и ХХ (цифры) версия
_any _64 : архитектура. Если пусто - i686
ГГММДД - дата. Модуль для pra-roll-ГГММДД. Для других PRA не подойдет
ddrXX - Модуль для
DDRXX. Для других не подойдет
Пример: 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 на загруженной системе
Это обертка вокруг chroot2pfs. Использует уже загруженные модули вашего дистрибутива
Создание модуля.pfs из пакетов Arch или Debian на запущенном фругал дистрибутиве.
Из уже загруженных модулей.pfs собирается новый корень (chroot2pfs) и поверх него создается модуль.
Список использованных модулей выводится в начале
Usage: ./mkmod пакет1 пакет2 ...
Usage: ./mkmod [-m m1,m2] пакет1 пакет2 ... - где mx - части названий дополнительно подключаемых при сборке модулей
mkmod имя_пакета.
mkdp каталог_с_пакетами
-
Утилиты для дистрибуnивов с apt (Debian, Ubuntu)
deb2pfs: конвертация пакета в модуль
deb2pfs пакет.deb - получаем каталог с содержимым пакета
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 - составляющие пакета, нужные только для компиляции (есть не у всякого пакета)
Далее правильные варианты:
Собрать с dev и /var/lib/pacman. В этом случае ничего удалять нельзя
Собрать без dev и /var/lib/pacman
sudo mkpfs mc-4.8.1-1
В итоге получаем готовый модуль.pfs, который можно подключать при автозагрузке или через
sfs-get
Варианты уменьшения размера модуля:
pkg2pfs + dep-find
В Arch не заморачиваются идеей «маленький и быстрый» - поэтому при создании модулей приходится «поколдовать»:
перекомпилить с уменьшением зависимостей, откинуть все не обязательное. Посмотреть - не избыточны ли зависимости. Например avahi (pol)kit-ы, mesa python perl.
Порядок сборки маленьких модулей (без гарантий работоспособности - рецепт только для опытных):
sudo pacman2pfs пакет или pacman -Syw пакет (cкачать пакет c зависимостями, без установки)
pkg2pfs /var/cache/pacman/pkg/пакет (подробнее - выше) - получаем каталог с содержимым пакета и .pfs из него.
Проверяем работостособность .pfs подключением и запуском в терминале
dep-find имя каталога. Получаем список недостающих библиотек.so
Добавляем эти библиотеки каталог/usr/lib. Если нужную библиотеку не найти: pkgfile файл или pkgfile -r часть имени файла
mkpfs каталог
Если итоговый модуль не работает - сравнивайте с рабочим модулем, сделанным pacman2pfs и ищите отличия
-
Перекомпилить с оптимизацией ключей (ищите в AUR готовый).
Если модуль все равно большой - эта прога не для маленького дистрибутива
Найти пакет с недостающим файлом
sudo pkgfile -u && pkgfile -r часть_имени_файла
sudo pacman -Sw пакет && sudo pkg2pfs /var/cache/pacman/pkg/пакет
pacman2pfs: создание модуля.pfs из AUR
AUR
packer имя_или_описание_пакета.
Если для сборки пакета требуется установка зависимых пакетов - подключаем модули, имеющиеся в репозитории (потом прописываем эти модули в зависимости). Из прочих зависимостей делаем pacman2pfs промежуточный модуль и подключаем этот модуль
По итогу сборки получаем пакет
Отключаем все модули, подключенные для сборки
pacman2pfs -U полученный пакет
Далее как в предыдущем разделе
pacman-a : достать пакет из Historical Archive
pacman-arm pacman-ha: достать пакет нужной версии из ARM и Historical Archive
pacman-arm полное_название_пакета_без_версии
pacman-ha полное_название_пакета_без_версии
pkg2pfs: конвертация пакета в модуль
pkg2pfs /var/cache/pacman/pkg/пакет - получаем каталог с содержимым пакета
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)
-
AUR : packer пакет
ABS: asp export пакет + makepkg
Руками
Сложить файлы будущего пакета в директорию
Из любого другого пакета скопировать .PKGINFO (как из архива)
-
dir2pkg директория
Полученный пакет выложить на форуме для добавления в репозиторий
Использование чужих и от других версий PRA модулей и пакетов
-
Если необходимо - убедиться что не будет конфликта библиотек (.so файлов в /usr/lib) или
портировать
Модули от PRA-roll-170101 к PRA-roll-180101 (например) могут подойти, но версии библиотек могут быть разными и это может сломать систему. При острой необходимости - загружайте модули в нижний слой AUFS (pfsload -l , располагайте в /base/ c именами 000-*)
Необходимо проверить:
/bin /sbin /usr/sbin - симлинки на /usr/bin
/lib /lib64 - симлинк на /usr/lib
Это специфика Arch Linux. Просто переместите файлы. В противном случае система при подключении модуля зависнет.
Кроме того может не хватать библиотек. Запускайте в консоле. Смотрите вывод.