Barium:модули — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(barium mkmod)
Строка 39: Строка 39:
 
   cp superproga.conf ./superproga2/etc/skel/.config/
 
   cp superproga.conf ./superproga2/etc/skel/.config/
 
   barium mkmod ./superproga2 ./superproga.xzm -o superproga2.xzm
 
   barium mkmod ./superproga2 ./superproga.xzm -o superproga2.xzm
 +
 +
=== Распаковка модулей ===
 +
 +
Для распаковки модуля проще всего смонтировать модуль и забрать содержимое из точки монтирования.
 +
Также можно использовать утилиту unsquashfs.
 +
Для разборки составного модуля ("склеенного") если утилита barium split
 +
 +
=== barium dnf2mo ===
 +
 +
Пожалуй наиболее востребованная утилита для сборки модулей. Она использует dnf. То есть устанавливает в модуль запрошенные пакеты из репозитория, вместе с зависимостями и результатом выполнения скриптов из rpm. После установки из модуля удаляются базы rpm, dnf и кэши. Таким образом при подключении модуля база rpm не изменится и пакеты не будут зарегистрированы как установленные в системе. Это сделано для того, чтобы модули не были инкрементно зависимы. Любой модуль собранный dnf2mod зависит только от базовых модулей системы и может быть удален в любой момент не нарушая работу других модулей.
 +
 +
Например:
 +
 +
    barium dnf2mod nano
 +
 +
Соберет пакет с редактором nano. Пакет будет собран даже в том случае если nano уже есть в базовой системе. Это позволяет, например, выборочно обновить пакет не дожидаясь обновления всей системы.
 +
 +
Можно передать список модулей:
 +
 +
    barium dnf2mod nano mc busybox
 +
 +
С ключoм "-с" утилита будет использовать системные настройки и кэши dnf.
 +
В конце строки с параметрами после ключа --dnf можно дописать параметры которые будут передаваться dnf при установке, например --repofrompath.
 +
Нет необходимости запоминать параметры сборки модуля, они хранятся внутри и запустив
 +
 +
    barium dnf2mod nano.xzm
 +
 +
вы пересоберете модуль с теми же параметрами как он был собран, но с обновленными пакетами из репозитория.

Версия 09:20, 17 августа 2022

Что за модули такие

UIRD создает корневую файловую систему для дальнейшей загрузки ОС из слоев собранных объединяющей файловой системой aufs/overlayfs. В качестве слоев может использоваться все что возможно смонтировать в Линукс в режиме read only. Чаще всего это squashfs архивы это и есть модули Бария. Squashfs архив отличает то что данные из него можно читать блочно, то есть для того чтобы извлечь файл нет необходимости распаковывать весь архив, распаковываются только блоки в которых лежат части этого файла. По мимо уменьшения размера ОС это часто дает прирост в скорости чтения, особенно с медленных носителей, относительно чтения не сжатых данных с того же носителя. Это происходит потому, что прочитать 1 мегабайт и распаковать его в 3 мегабайта с "быстрым" процессором и "медленным" носителем, будет быстрее чем читать не сжатые 3 мегабайта. Каждый такой модуль содержит свою часть файловой системы. Модуль не равен rpm пакету по содержимому, он может содержать как один файл так и всю ОС, как это бывает в livecd.

Как сделать модуль

Squashfs архивы создаются утилитой mksquashfs из пакета squahfs-tools, и модули вполне можно сделать имея только mksquashfs, но для большего удобства подготовлено несколько утилит в составе barium-utils.

barium mkmod

Основная задача утилиты сделать модуль из папки с файлами, дополнительно можно склеивать папки и модули в один модуль в любых сочетаниях. Например: У вас есть два файла - программа и ее конфиг. В системе они должны быть размещены по путям:

  /usr/bin/superproga
  /etc/superproga.d/superproga.conf
  • Создаем папку с именем будущего модуля:
  mkdir ./superproga
  • Внутри папки создаем нужные каталоги. Обратите внимание на права и пользователя каталогов. Для системных папок обчно достаточно создавать их под рутом.


  mkdir -p ./superproga/usr/bin
  mkdir -p ./superproga/etc/superproga.d
  • копируем файлы в папки, допустим они у нас тоже были в текущем каталоге
  cp  ./superproga ./superproga/usr/bin/
  cp ./superproga.conf ./superproga/etc/superproga.d/
  • Пакуем
 barium mkmod ./superproga

Итогом будет модуль superproga.xzm, при подключении которого файлы окажутся в системе в нужных подкаталогах. Модули не возможно редактировать, они монтируются только RO, по этому если вам нужно будет что-то изменить придется собирать модуль заново. Если же нужно добавить файл в модуль можно воспользоваться режимом "склейки" утилиты barium mkmod

 mkdir -p ./superproga2/etc/skel/.config/
 cp superproga.conf ./superproga2/etc/skel/.config/
 barium mkmod ./superproga2 ./superproga.xzm -o superproga2.xzm

Распаковка модулей

Для распаковки модуля проще всего смонтировать модуль и забрать содержимое из точки монтирования. Также можно использовать утилиту unsquashfs. Для разборки составного модуля ("склеенного") если утилита barium split

barium dnf2mo

Пожалуй наиболее востребованная утилита для сборки модулей. Она использует dnf. То есть устанавливает в модуль запрошенные пакеты из репозитория, вместе с зависимостями и результатом выполнения скриптов из rpm. После установки из модуля удаляются базы rpm, dnf и кэши. Таким образом при подключении модуля база rpm не изменится и пакеты не будут зарегистрированы как установленные в системе. Это сделано для того, чтобы модули не были инкрементно зависимы. Любой модуль собранный dnf2mod зависит только от базовых модулей системы и может быть удален в любой момент не нарушая работу других модулей.

Например:

   barium dnf2mod nano

Соберет пакет с редактором nano. Пакет будет собран даже в том случае если nano уже есть в базовой системе. Это позволяет, например, выборочно обновить пакет не дожидаясь обновления всей системы.

Можно передать список модулей:

   barium dnf2mod nano mc busybox 

С ключoм "-с" утилита будет использовать системные настройки и кэши dnf. В конце строки с параметрами после ключа --dnf можно дописать параметры которые будут передаваться dnf при установке, например --repofrompath. Нет необходимости запоминать параметры сборки модуля, они хранятся внутри и запустив

   barium dnf2mod nano.xzm 

вы пересоберете модуль с теми же параметрами как он был собран, но с обновленными пакетами из репозитория.