====== Работа с модулями.pfs и пакетами (.pkg.). Стандарты названий ======
====== Работа с модулями.pfs ======
*[[https://wiki.archlinux.org/index.php/List_of_applications_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|Путеводитель по программному обеспечению]]
*[[soft/sfs-get|Менеджер модулей sfs-get]] (загрузка, выгрузка; локально и из www репозитория PRA)
*[[puppyrus:pr218:pfs|pfs-utils. Утилиты для работы с модулями.pfs]] (сборка-разборка)
===== Возможные операции с модулями =====
[[http://wiki.puppyrus.org/setups/start|Теория]]
==== Подключить ====
Модуль монтируется в корень / AUFS. Если подключить в верхний слой AUFS - он перекроет прочие ausf файлы (только ausf, то что Вы изменяли будет всегда сверху ; посмотреть изменения - в /mnt/live/memory/changes ).
Можно перед подключением скопировать его **в память**, что даст:
*Плюсы - можно отключить загрузочную флэшку, обращения к винту минимальны - экономим ресурс и батарею, система работеет быстрее
*Минусы - подключение дольше, расходуется RAM
Некоторые модули имеют **зависимые модули** (без которых работать не будет). При подключении модуля через sfs-get - будет предложено подключить зависимые. Просмотреть зависимости без подключения можно :
*примонтировать модуль
*прочитать в файле /start.sh строки, начинающиеся с sfs-get-dep
Добавляйте модуль в автозагрузку системы (в /modules) только после его тестирования в интерактивном режиме и только со всеми зависимостями
==== Отключить ====
Если хотя бы один файл модуля занят (запущен или открыт в другой программе) - он не отключится
Закройте связанные программы, перезагрузите Х. Иногда помогает только reboot
==== Установить ====
Модуль будет распакован в корень и перекроет все. Если после этого не сделать сохраненку - после перезагруза все пропадет. По большому счету - это рудименты .pet. Там был только этот вариант.
Практическая польза - сделать во время экспериментов, чтобы файлы модуля гарантированно перекрыли все (aufs и changes)
==== Смотреть ====
Модуль монтируется на чтение (mount -o loop ) в каталог. Можно посмотреть что внутри. Ничего более
==== Распаковать (пересобрать)====
*Распаковать : [[puppyrus/pr218/pfs3#pfsextract|pfsextract]]
*Запаковать: [[puppyrus/pr218/pfs3#mkpfs|mkpfs]]
*[[http://forum.puppyrus.org/index.php?topic=20612.0|Пример]]
===== Автообновление модулей =====
После загрузки системы, происходит [[http://forum.puppyrus.org/index.php?topic=17797.0|проверка актуальности версий загруженных модулей]]
*Результаты выводятся на экран диалоговыми сообщениями системы
*Отключить через меню - "Настройка автозапуска" - mod-up
*Запустить принудительно - через sfs-get
===== Стандарты названий модулей =====
Для правильной работы автообновления, необходимо придерживаться стандарта:
*XXX-*.pfs : базовые модули. //X-// цифры по которым модули сортируются по слоям aufs (т.е. какой модуль перекрывает остальные). При загрузке из /optional и т.п. используйте [[http://forum.puppyrus.org/index.php/topic,14190.msg110846.html#msg110846|sort=]]
*Модуль начинается с заглавной буквы: составной модуль (можно [[puppyrus/pr218/pfs#pfsextract|разобрать pfsextract]])
*-p- : [[http://wiki.puppyrus.org/setups/portable|портированный]] (в /usr/lib должно быть пусто - т.е. не сломает систему)
*-yyXX : код сборщика модуля (yy-первые буквы ника) и ХХ (цифры) версия
*_any _64 : архитектура. Если пусто - i686
*ГГММДД - дата. Модуль для pra-roll-ГГММДД. Для других PRA не подойдет
*ddrXX - Модуль для [[http://forum.puppyrus.org/index.php?board=184.0|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 =====
[[https://wiki.puppyrus.org/puppyrus/pr218/pfs4#chroot2pfs|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 ([[https://forum.puppyrus.org/index.php?topic=15557.0|инсталлятором]]) и работать (удалять) с этими модулями как с пакетами.
*Для портированных модулей mk-dp создает псевдо (без зависимостей и т..п.) индексы для apt и pacman. [[http://mirror.yandex.ru/puppyrus/puppyrus-a64/pfs-portable/connman-gtk-p-1.1.1_64-sf02.pfs|Пример]]
# 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 имя_пакета.
*Точное название пакета искать :
*ubuntu : apt update && apt search имя_пакета или [[https://packages.ubuntu.com|здесь]]
*arch : pacman -Sys имя_пакета
-mkdp каталог_с_пакетами
-[[https://wiki.puppyrus.org/puppyrus/pr218/pfs4#mkpfs|mkpfs]] каталог_с_пакетами
====== Утилиты для дистрибу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. Иначе при другом составе модулей в созданном модуле будет не хватать компонентов
[[http://forum.puppyrus.org/index.php?topic=16490.msg138586#msg138586|Форум]]
Размер модуля может быть очень большим. Оптимизация - задача для подготовленных пользователей
*pacman2pfs пакет1 [пакет2] [пакет3] [файл со списком пакетов]
*pacman2pfs -U /путь/локальный_пакет [список локальных пакетов]: Установить локальный пакет(ы) в каталог с его именем, разрешив зависимости из репозитория. Актуально для установки пакета не из репозитория или другого среза репозитория
*pacman2pfs -p : Установить все пакеты уже находящиеся в /var/cache/pacman/pkg/ в каталог с именем первого по алфавиту пакета
*pacman2pfs [-n] пакет [список пакетов]: пропустить очистку кэш пакетов
==== Порядок сборки: ====
*С помощью [[/soft/sfs-get|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
*1 - pacman увидит. 2 - невидимка. Если сделать без dev , но с /var/lib/pacman - ждите сюрпризов при компиляции
*Водим команду [[http://wiki.puppyrus.org/puppyrus/pr218/pfs#mkpfs|mkpfs]] также от суперпользователя, и в параметре укажем наш созданый каталог.
sudo mkpfs mc-4.8.1-1
*В итоге получаем готовый модуль.pfs, который можно подключать при автозагрузке или через [[/soft/sfs-get|sfs-get]]
=== Варианты уменьшения размера модуля: ===
== pkg2pfs + dep-find ==
В Arch не заморачиваются идеей "маленький и быстрый" - поэтому при создании модулей приходится "поколдовать":
перекомпилить с уменьшением зависимостей, откинуть все не обязательное. Посмотреть - не избыточны ли зависимости. Например avahi (pol)kit-ы, mesa python perl.
Порядок сборки маленьких модулей (без гарантий работоспособности - __рецепт только для опытных__):
-//sudo pacman2pf//s пакет или //pacman -Syw пакет// (cкачать пакет c зависимостями, без установки)
-//pkg2pfs /var/cache/pacman/pkg/пакет// (подробнее - выше) - получаем каталог с содержимым пакета и .pfs из него.
-Проверяем работостособность .pfs подключением и запуском в терминале
-//dep-find имя каталога//. Получаем список недостающих библиотек.so
-Добавляем эти библиотеки //каталог/usr/lib//. Если нужную библиотеку не найти: //pkgfile файл// или //pkgfile -r часть имени файла//
-//mkpfs каталог//
-Если итоговый модуль не работает - сравнивайте с рабочим модулем, сделанным pacman2pfs и ищите отличия
-Готовый рабочий модуль желательно [[setups/portable|портировать]]
==Перекомпилить с оптимизацией ключей (ищите в AUR готовый).==
Если модуль все равно большой - эта прога не для маленького дистрибутива
==== Найти пакет с недостающим файлом ====
sudo pkgfile -u && pkgfile -r часть_имени_файла
sudo pacman -Sw пакет && sudo pkg2pfs /var/cache/pacman/pkg/пакет
===== pacman2pfs: создание модуля.pfs из AUR =====
[[https://wiki.archlinux.org/index.php/Arch_User_Repository_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29|AUR]]
-[[http://wiki.puppyrus.org/setups/pacman#packer|packer]] имя_или_описание_пакета.
-Если для сборки пакета требуется установка зависимых пакетов - подключаем модули, имеющиеся в репозитории (потом прописываем эти модули в зависимости). Из прочих зависимостей делаем pacman2pfs промежуточный модуль и подключаем этот модуль
-По итогу сборки получаем пакет
-Отключаем все модули, подключенные для сборки
-pacman2pfs -U полученный пакет
-Далее как в предыдущем разделе
===== pacman-a : достать пакет из Historical Archive =====
*Последнее время [[https://wiki.archlinux.org/index.php/Arch_Linux_Archive|ARM]] стали активно [[http://forum.puppyrus.org/index.php?topic=21839.msg159409#msg159409|чистить переносом]] в [[https://wiki.archlinux.org/index.php/Arch_Linux_Archive#Historical_Archive|Historical Archive]].
*[[http://forum.puppyrus.org/index.php?topic=21839.msg159409#msg159409|pacman-a]]. Поддерживаются только ключи -S[wdd] - см. [[https://wiki.archlinux.org/index.php/Pacman|pacman]]. Другие и не нужны. Надо только выкачать в /var/cache/pacman/pkg. Остальное сделает pacman
*Для сборки модуля из репозитория , перемещенного в HA - в скрипте pacman2pfs замените pacmcn на pacman-a
===== pacman-arm pacman-ha: достать пакет нужной версии из ARM и Historical Archive =====
*Консольный с меню на dialog
*Показывает все версии пакетов в [[https://wiki.archlinux.org/index.php/Arch_Linux_Archive|ARM]]
*Только скачивает. Не устанавливает и не разрешает зависимости
*Для более старых пакетов, перемещенных из ARM в [[https://wiki.archlinux.org/index.php/Arch_Linux_Archive#Historical_Archive|Historical Archive]] используйте pacman-ha
*Запуск :
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 сохраненкой или [[http://wiki.puppyrus.org/soft/arch-initrd-rootaufs2?%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D1%8B_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%B4%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%B0|FULL в.4]], не обновляя сохраненку
===== Редактирование (пересборка) пакета =====
==== Распаковать: ====
mkdir tmp && cd tmp && tar -xf ../пакет.pkg.tar.xz
Или в mc : F2 - Распаковать tar
==== dir2pkg - запаковать: ====
dir2pkg tmp
Или в mc : нажать на файл .PKGINFO
=====Создание пакета=====
[[https://wiki.archlinux.org/index.php/Creating_packages_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|Подробности]]
==== Стандартный способ (AUR ABS) ====
-подключить [[puppyrus/pra-roll#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_pra-roll|DEVX]]
-AUR : packer пакет
-ABS: asp export пакет + makepkg
==== Руками ====
-Сложить файлы будущего пакета в директорию
-Из любого другого пакета скопировать .PKGINFO (как из архива)
-[[https://wiki.archlinux.org/index.php/Creating_packages_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|Отредактировать .PKGINFO]]
-dir2pkg директория
Полученный пакет выложить на форуме для добавления в репозиторий
====== Использование чужих и от других версий PRA модулей и пакетов ======
*Актуально только если программы нет в [[https://www.archlinux.org/packages/|Arch репозитории]] или [[https://aur.archlinux.org/|AUR]]
*Если необходимо - убедиться что не будет конфликта библиотек (.so файлов в /usr/lib) или [[setups/portable|портировать]]
*Модули от PRA-roll-170101 к PRA-roll-180101 (например) могут подойти, но версии библиотек могут быть разными и это может сломать систему. При острой необходимости - загружайте модули в нижний слой AUFS (pfsload -l , располагайте в /base/ c именами 000-*)
Необходимо проверить:
-/bin /sbin /usr/sbin - симлинки на /usr/bin
-/lib /lib64 - симлинк на /usr/lib
Это специфика Arch Linux. Просто переместите файлы. В противном случае система при подключении модуля зависнет.
Кроме того может не хватать библиотек. Запускайте в консоле. Смотрите вывод.
*Найти недостающие зависимости: dep-find каталог_с_распакованным_модулем