Образ rootfs — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Новая страница: «== Что такое rootfs == '''rootfs''', то есть root file system, корневая файловая система — это архив с миним…»)
 
м (дополнение)
 
(не показано 18 промежуточных версий 2 участников)
Строка 8: Строка 8:
  
 
== Где скачать rootfs Росы ==
 
== Где скачать rootfs Росы ==
Раз в день автоматически выполняются сборки rootfs архитектур x86_64 и i586 на платформах rosa2016.1, rosa2014.1, rosa2012.1 и rosa2012lts.
+
Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформах rosa2021.1 и rosa2023.1.
Найти и скачать самые свежие сборки можно [https://abf.io/platforms/rosa2016.1/products/224 здесь].
+
 
 +
=== rosa2023.1 ===
 +
[https://abf.io/platforms/rosa2023.1/products/408 rootfs-std x86_64]<br />
 +
[https://abf.io/platforms/rosa2023.1/products/409 rootfs-std i686]<br />
 +
[https://abf.io/platforms/rosa2023.1/products/414 rootfs-std aarch64]<br />
 +
[https://abf.io/platforms/rosa2023.1/products/421 rootfs-min x86_64]<br />
 +
[https://abf.io/platforms/rosa2023.1/products/425 rootfs-min aarch64]<br />
 +
 
 +
=== rosa2021.1 ===
 +
[https://abf.io/platforms/rosa2021.1/products/284 rootfs-std x86_64]<br />
 +
[https://abf.io/platforms/rosa2021.1/products/294 rootfs-std i686]<br />
 +
[https://abf.io/platforms/rosa2021.1/products/295 rootfs-std aarch64]<br />
 +
[https://abf.io/platforms/rosa2021.1/products/327 rootfs-min x86_64]<br />
 +
[https://abf.io/platforms/rosa2021.1/products/337 rootfs-min aarch64]<br />
 +
 
 +
=== rosa2014.1 и rosa2016.1 ===
 +
[https://abf.io/platforms/rosa2016.1/products/224 std и min, i586 и x86_64]<br />
 +
 
 +
 
 +
{{Примечание| Образы '''rootfs-min''' — это более минималистичный образ, чем std.}}
 +
 
 +
== Порядок скачивания последней сборки rootfs ==
 +
* Зайти в [https://abf.io/platforms/rosa2021.1/products/284 список] сборок
 +
* Нажать на номер нужной сборки, обычно это последняя сборка
 +
* Скачать нужный файл
 +
* Распаковать его как архив
  
 
== Как собрать rootfs самому ==
 
== Как собрать rootfs самому ==
Нужно взять [https://github.com/mikhailnov/docker-rosa скрипты] сборки и запустить mkimage-urpmi.sh.
+
Нужно взять [https://github.com/mikhailnov/docker-rosa скрипты] сборки и запустить ./mkimage-dnf.sh.
 +
 
 
Патчи и пулл-реквесты для улучшения скриптов сборки принимаются на Github.
 
Патчи и пулл-реквесты для улучшения скриптов сборки принимаются на Github.
 +
 +
== Docker-образ ==
 +
Готовые Docker/Podman образы не публикуются, однако вы можете:
 +
 +
* взять последнюю сборку rootfs по ссылкам выше
 +
* создать Dockerfile в одном каталоге с архивом с rootfs
 +
<pre>
 +
FROM scratch
 +
ADD rootfs.tar.xz /
 +
CMD ["/bin/bash"]
 +
</pre>
 +
* в Dockerfile поменять имя файла с rootfs
 +
* собрать Docker-образ и использовать его
 +
 +
== Пример использования rootfs ==
 +
 +
Разберем на примере ежедневной сборки [https://abf.io/platforms/rosa2021.1/products/284/product_build_lists/44893 №44893]. Контейнер назовем "rosa1".
 +
 +
su -
 +
cd /var/lib/machines
 +
wget --content-disposition https://file-store.rosalinux.ru/api/v1/file_stores/bfbdc6531f18db1eeacdf1c0a6cf7cecda9a7222
 +
mkdir rosa1
 +
cd rosa1
 +
tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz
 +
cd ..    # т.е. обратно в /var/lib/machines
 +
systemd-nspawn -D rosa1 -b
 +
 +
После последней команды загрузится консоль контейнера, вводите логин root, пароль не запросит. Если убрать -b и сделать просто systemd-nspawn -D rosa1, то вы попадете в консоль без полноценного запуска виртуальной системы.
 +
 +
Чтобы выключить контейнер введите
 +
poweroff
 +
 +
{{Примечание|В команде wget выше<br/>
 +
wget --content-disposition <ссылка><br/>
 +
'''--content-disposition''' - благодаря этому параметру файл получит исходное имя, а не будет в виде хеша sha1, '''<ссылка>''' - это скопированная ссылка на скачивание архива.
 +
При желании дать файлу любое другое имя нужно заменить '''--content-disposition''' на '''-O <имя файла для сохранения>'''.}}
 +
 +
Чтобы из контейнера запускать графические приложения необходимо установить пакет snr
 +
sudo dnf in snr
 +
 +
Потом выполните от имени обычного пользователя
 +
snr rosa1
 +
 +
Создайте обычного пользователя в контейнере (многие приложения нельзя запускать от рута)
 +
useradd user -d /home/user -m -G wheel -s /bin/bash
 +
 +
{{Примечание|-d - Указывает домашнюю директорию пользователя.<br/>
 +
-m - Создает домашнюю директорию пользователя.<br />
 +
-G - Указывает группы, в которые должен входить новый пользователь (wheel позволит использовать sudo).<br />
 +
-s - Указывает оболочку.}}
 +
 +
Установите необходимое приложение
 +
dnf in app
 +
 +
И запускайте его от имени user
 +
sudo -u user app
 +
 +
Чтобы выйти из контейнера введите
 +
exit
 +
 +
{{Примечание|Если контейнер создавать вне '''/var/lib/machines''', то вместо '''rosa1''' нужно указывать путь к контейнеру.<br />
 +
Чтобы пробросить какую-то директорию или файл в контейнер используйте параметр '''<nowiki>--bind=/что/пробросить:/куда/пробросить</nowiki>''', если вторую часть начиная с ''':''' опустить, то пути в контейнере и хостовой системе совпадут.}}
 +
 +
=== Пример использования на BTRFS для быстрого клонирования контейнеров ===
 +
 +
/var/lib/machines должно быть внутри раздела BTRFS.
 +
 +
su -
 +
cd /var/lib/machines
 +
wget --content-disposition https://file-store.rosalinux.ru/api/v1/file_stores/bfbdc6531f18db1eeacdf1c0a6cf7cecda9a7222
 +
btrfs subvol create rosa1
 +
cd rosa1
 +
tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz
 +
cd /var/lib/machines
 +
btrfs subvol snapshot rosa1 rosa2
 +
btrfs subvol snapshot rosa1 rosa3
 +
 +
В итоге у нас есть 3 одинаковых контейнера: /var/lib/machines/rosa1, /var/lib/machines/rosa2, /var/lib/machines/rosa3. Поскольку они одинаковые, место на диске занимается 1 раз, а не 3.
 +
После запуска каждого из контейнеров рекомендую менять hostname, чтобы было удобно их различать.
 +
 +
=== Запуск 32-битного контейнера на 64-битном хосте ===
 +
Без доп. параметров всё запустится, но, например, uname и lscpu будут выдавать x86_64, в результате чего утилиты типа rpm будут думать, что они работают на 64-битной Ос, а не 32-битной.
 +
 +
Для решения проблемы в параметры запуска systemd-nspawn добавьте: --personality=x86, пример:
 +
 +
systemd-nspawn -D rosa-i586-1 --personality=x86
 +
 +
[[Категория:ROSA Server]]

Текущая версия на 13:26, 9 сентября 2024

Что такое rootfs

rootfs, то есть root file system, корневая файловая система — это архив с минималистичной системой, грубо говоря, это как если бы вы открыли файловый менеджер в корне своего Linux и запаковали всё найденное в архив, только здесь предустановлено минимально необходимое количество пакетов.

Для чего нужен rootfs

  • chroot
  • запуск в контейнере (systemd-nspawn, lxc, docker)
  • установка системы вручную

Где скачать rootfs Росы

Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформах rosa2021.1 и rosa2023.1.

rosa2023.1

rootfs-std x86_64
rootfs-std i686
rootfs-std aarch64
rootfs-min x86_64
rootfs-min aarch64

rosa2021.1

rootfs-std x86_64
rootfs-std i686
rootfs-std aarch64
rootfs-min x86_64
rootfs-min aarch64

rosa2014.1 и rosa2016.1

std и min, i586 и x86_64


Idea.png
Примечание
Образы rootfs-min — это более минималистичный образ, чем std.

Порядок скачивания последней сборки rootfs

  • Зайти в список сборок
  • Нажать на номер нужной сборки, обычно это последняя сборка
  • Скачать нужный файл
  • Распаковать его как архив

Как собрать rootfs самому

Нужно взять скрипты сборки и запустить ./mkimage-dnf.sh.

Патчи и пулл-реквесты для улучшения скриптов сборки принимаются на Github.

Docker-образ

Готовые Docker/Podman образы не публикуются, однако вы можете:

  • взять последнюю сборку rootfs по ссылкам выше
  • создать Dockerfile в одном каталоге с архивом с rootfs
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]
  • в Dockerfile поменять имя файла с rootfs
  • собрать Docker-образ и использовать его

Пример использования rootfs

Разберем на примере ежедневной сборки №44893. Контейнер назовем "rosa1".

su -
cd /var/lib/machines
wget --content-disposition https://file-store.rosalinux.ru/api/v1/file_stores/bfbdc6531f18db1eeacdf1c0a6cf7cecda9a7222
mkdir rosa1
cd rosa1
tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz
cd ..    # т.е. обратно в /var/lib/machines
systemd-nspawn -D rosa1 -b

После последней команды загрузится консоль контейнера, вводите логин root, пароль не запросит. Если убрать -b и сделать просто systemd-nspawn -D rosa1, то вы попадете в консоль без полноценного запуска виртуальной системы.

Чтобы выключить контейнер введите

poweroff
Idea.png
Примечание

В команде wget выше
wget --content-disposition <ссылка>
--content-disposition - благодаря этому параметру файл получит исходное имя, а не будет в виде хеша sha1, <ссылка> - это скопированная ссылка на скачивание архива.

При желании дать файлу любое другое имя нужно заменить --content-disposition на -O <имя файла для сохранения>.

Чтобы из контейнера запускать графические приложения необходимо установить пакет snr

sudo dnf in snr

Потом выполните от имени обычного пользователя

snr rosa1

Создайте обычного пользователя в контейнере (многие приложения нельзя запускать от рута)

useradd user -d /home/user -m -G wheel -s /bin/bash
Idea.png
Примечание

-d - Указывает домашнюю директорию пользователя.
-m - Создает домашнюю директорию пользователя.
-G - Указывает группы, в которые должен входить новый пользователь (wheel позволит использовать sudo).

-s - Указывает оболочку.

Установите необходимое приложение

dnf in app

И запускайте его от имени user

sudo -u user app

Чтобы выйти из контейнера введите

exit
Idea.png
Примечание

Если контейнер создавать вне /var/lib/machines, то вместо rosa1 нужно указывать путь к контейнеру.

Чтобы пробросить какую-то директорию или файл в контейнер используйте параметр --bind=/что/пробросить:/куда/пробросить, если вторую часть начиная с : опустить, то пути в контейнере и хостовой системе совпадут.

Пример использования на BTRFS для быстрого клонирования контейнеров

/var/lib/machines должно быть внутри раздела BTRFS.

su -
cd /var/lib/machines
wget --content-disposition https://file-store.rosalinux.ru/api/v1/file_stores/bfbdc6531f18db1eeacdf1c0a6cf7cecda9a7222
btrfs subvol create rosa1
cd rosa1
tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz
cd /var/lib/machines
btrfs subvol snapshot rosa1 rosa2
btrfs subvol snapshot rosa1 rosa3

В итоге у нас есть 3 одинаковых контейнера: /var/lib/machines/rosa1, /var/lib/machines/rosa2, /var/lib/machines/rosa3. Поскольку они одинаковые, место на диске занимается 1 раз, а не 3. После запуска каждого из контейнеров рекомендую менять hostname, чтобы было удобно их различать.

Запуск 32-битного контейнера на 64-битном хосте

Без доп. параметров всё запустится, но, например, uname и lscpu будут выдавать x86_64, в результате чего утилиты типа rpm будут думать, что они работают на 64-битной Ос, а не 32-битной.

Для решения проблемы в параметры запуска systemd-nspawn добавьте: --personality=x86, пример:

systemd-nspawn -D rosa-i586-1 --personality=x86