Образ rootfs
Содержание
Что такое rootfs
rootfs, то есть root file system, корневая файловая система — это архив с минималистичной системой, грубо говоря, это как если бы вы открыли файловый менеджер в корне своего Linux и запаковали всё найденное в архив, только здесь предустановлено минимально необходимое количество пакетов.
Для чего нужен rootfs
- chroot
- запуск в контейнере (systemd-nspawn, lxc, docker)
- установка системы вручную
Где скачать rootfs Росы
Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформе rosa2021.1.
Найти и скачать самые свежие сборки x86_64 можно здесь.
Сборки других архитектур можно найти здесь
Сборки для старых платформ находятся здесь
Образы rootfs-min — это минималистичный образ (ввиду того, что некоторые пакеты в репозитории сейчас тянут лишние зависимости, в rootfs также есть лишние пакеты, например, grub2).
Образы rootfs-std — это более расширенный набор пакетов, добавлены пакеты, необходимые для сборки других пакетов (rpm-build, git-core и др.).Порядок скачивания последней сборки rootfs
- Зайти в список сборок
- Нажать на номер нужной сборки, обычно это последняя сборка
- Скачать нужный файл
- Распаковать его как архив
Как собрать rootfs самому
Нужно взять скрипты сборки и запустить mkimage-urpmi.sh.
Патчи и пулл-реквесты для улучшения скриптов сборки принимаются на Github.
Пример использования 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
В команде wget выше
wget --content-disposition <ссылка>
--content-disposition - благодаря этому параметру файл получит исходное имя, а не будет в виде хеша sha1, <ссылка> - это скопированная ссылка на скачивание архива.
Чтобы из контейнера запускать графические приложения необходимо установить пакет snr
sudo dnf in snr
Потом выполните от имени обычного пользователя
snr rosa1
Создайте обычного пользователя в контейнере (многие приложения нельзя запускать от рута)
useradd user
Установите необходимое приложение
dnf in app
И запускайте его от имени user
sudo -u user app
Чтобы выйти из контейнера введите
exit
Если контейнер создавать вне /var/lib/machines, то вместо rosa1 нужно указывать путь к контейнеру.
Пример использования на 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