Содержание
Работа с модулями.pfs и пакетами (.pkg.). Стандарты названий
Работа с модулями.pfs
- Менеджер модулей sfs-get (загрузка, выгрузка; локально и из www репозитория PRA)
- pfs-utils. Утилиты для работы с модулями.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 ) в каталог. Можно посмотреть что внутри. Ничего более
Распаковать (пересобрать)
- Распаковать : pfsextract
- Запаковать: mkpfs
Автообновление модулей
После загрузки системы, происходит проверка актуальности версий загруженных модулей
- Результаты выводятся на экран диалоговыми сообщениями системы
- Отключить через меню - «Настройка автозапуска» - 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. Использует уже загруженные модули вашего дистрибутива
Утилиты для дистрибу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
- 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.
Порядок сборки маленьких модулей (без гарантий работоспособности - рецепт только для опытных):
- 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
- packer имя_или_описание_пакета.
- Если для сборки пакета требуется установка зависимых пакетов - подключаем модули, имеющиеся в репозитории (потом прописываем эти модули в зависимости). Из прочих зависимостей делаем pacman2pfs промежуточный модуль и подключаем этот модуль
- По итогу сборки получаем пакет
- Отключаем все модули, подключенные для сборки
- pacman2pfs -U полученный пакет
- Далее как в предыдущем разделе
pacman-a : достать пакет из Historical Archive
- Для сборки модуля из репозитория , перемещенного в HA - в скрипте pacman2pfs замените pacmcn на pacman-a
pacman-arm pacman-ha: достать пакет нужной версии из ARM и Historical Archive
- Консольный с меню на dialog
- Показывает все версии пакетов в ARM
- Только скачивает. Не устанавливает и не разрешает зависимости
- Для более старых пакетов, перемещенных из ARM в 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 сохраненкой или FULL в.4, не обновляя сохраненку
Редактирование (пересборка) пакета
Распаковать:
mkdir tmp && cd tmp && tar -xf ../пакет.pkg.tar.xz
Или в mc : F2 - Распаковать tar
dir2pkg - запаковать:
dir2pkg tmp
Или в mc : нажать на файл .PKGINFO
Создание пакета
Стандартный способ (AUR ABS)
- подключить DEVX
- AUR : packer пакет
- ABS: asp export пакет + makepkg
Руками
- Сложить файлы будущего пакета в директорию
- Из любого другого пакета скопировать .PKGINFO (как из архива)
- dir2pkg директория
Полученный пакет выложить на форуме для добавления в репозиторий
Использование чужих и от других версий PRA модулей и пакетов
- Актуально только если программы нет в Arch репозитории или AUR
- Если необходимо - убедиться что не будет конфликта библиотек (.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. Просто переместите файлы. В противном случае система при подключении модуля зависнет.
Кроме того может не хватать библиотек. Запускайте в консоле. Смотрите вывод.
- Найти недостающие зависимости: dep-find каталог_с_распакованным_модулем