Образ rootfs
Что такое rootfs
rootfs, то есть root file system, корневая файловая система — это архив с минималистичной системой, грубо говоря, это как если бы вы открыли файловый менеджер в корне своего Linux и запаковали всё найденное в архив, только здесь предустановлено минимально необходимое количество пакетов.
Для чего нужен rootfs
- chroot
- запуск в контейнере (systemd-nspawn, lxc, docker)
- установка системы вручную
Где скачать rootfs Росы
Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформах rosa2021.1 и rosa13.
rosa13
rosa2021.1
rosa2014 и rosa2016
Примечание
Образы 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
Примечание
В команде wget выше wget --content-disposition <ссылка> --content-disposition - благодаря этому параметру файл получит исходное имя, а не будет в виде хеша sha1, <ссылка> - это скопированная ссылка на скачивание архива. При желании дать файлу любое другое имя нужно заменить --content-disposition на -O <имя файла для сохранения>. |
Чтобы из контейнера запускать графические приложения необходимо установить пакет snr
sudo dnf in snr
Потом выполните от имени обычного пользователя
snr rosa1
Создайте обычного пользователя в контейнере (многие приложения нельзя запускать от рута)
useradd user
Установите необходимое приложение
dnf in app
И запускайте его от имени user
sudo -u user app
Чтобы выйти из контейнера введите
exit
Примечание
Если контейнер создавать вне /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