Образ rootfs
Содержание
Что такое 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
Порядок скачивания последней сборки 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, <ссылка> - это скопированная ссылка на скачивание архива.
Чтобы из контейнера запускать графические приложения необходимо установить пакет snr
sudo dnf in snr
Потом выполните от имени обычного пользователя
snr rosa1
Создайте обычного пользователя в контейнере (многие приложения нельзя запускать от рута)
useradd user -d /home/user -m -G wheel -s /bin/bash
-d - Указывает домашнюю директорию пользователя.
-m - Создает домашнюю директорию пользователя.
-G - Указывает группы, в которые должен входить новый пользователь (wheel позволит использовать sudo).
Установите необходимое приложение
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