====== Работа с модулями.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 каталог_с_распакованным_модулем