Образ rootfs — различия между версиями
Noname (обсуждение | вклад) |
|||
(не показано 11 промежуточных версий 2 участников) | |||
Строка 8: | Строка 8: | ||
== Где скачать rootfs Росы == | == Где скачать rootfs Росы == | ||
− | Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на | + | Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформах rosa2021.1 и rosa2023.1. |
− | + | === rosa13 === | |
− | + | [https://abf.io/platforms/rosa13/products/408 rootfs-std x86_64]<br /> | |
+ | [https://abf.io/platforms/rosa13/products/409 rootfs-std i686]<br /> | ||
+ | [https://abf.io/platforms/rosa13/products/414 rootfs-std aarch64]<br /> | ||
+ | [https://abf.io/platforms/rosa13/products/421 rootfs-min x86_64]<br /> | ||
+ | [https://abf.io/platforms/rosa13/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 == | == Порядок скачивания последней сборки rootfs == | ||
Строка 23: | Строка 37: | ||
== Как собрать rootfs самому == | == Как собрать rootfs самому == | ||
− | Нужно взять [https://github.com/mikhailnov/docker-rosa скрипты] сборки и запустить mkimage- | + | Нужно взять [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 == | == Пример использования rootfs == | ||
Строка 37: | Строка 64: | ||
cd rosa1 | cd rosa1 | ||
tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz | tar -xvf ../rootfs-std-rosa2021.1_x86_64_2022-11-06.tar.xz | ||
− | cd /var/lib/machines | + | cd .. # т.е. обратно в /var/lib/machines |
systemd-nspawn -D rosa1 -b | systemd-nspawn -D rosa1 -b | ||
После последней команды загрузится консоль контейнера, вводите логин root, пароль не запросит. Если убрать -b и сделать просто systemd-nspawn -D rosa1, то вы попадете в консоль без полноценного запуска виртуальной системы. | После последней команды загрузится консоль контейнера, вводите логин root, пароль не запросит. Если убрать -b и сделать просто systemd-nspawn -D rosa1, то вы попадете в консоль без полноценного запуска виртуальной системы. | ||
− | В команде wget выше | + | Чтобы выключить контейнер введите |
− | + | poweroff | |
− | '''--content-disposition''' - благодаря этому параметру файл получит исходное имя, а не будет в виде хеша sha1, '''<ссылка>''' - это скопированная ссылка на скачивание архива. | + | |
− | При желании дать файлу любое другое имя нужно заменить '''--content-disposition''' на '''-O <имя файла для сохранения>'''. | + | {{Примечание|В команде 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 для быстрого клонирования контейнеров === | === Пример использования на BTRFS для быстрого клонирования контейнеров === | ||
Строка 70: | Строка 126: | ||
systemd-nspawn -D rosa-i586-1 --personality=x86 | systemd-nspawn -D rosa-i586-1 --personality=x86 | ||
+ | |||
+ | [[Категория:ROSA Server]] |
Текущая версия на 05:17, 14 ноября 2024
Содержание
Что такое rootfs
rootfs, то есть root file system, корневая файловая система — это архив с минималистичной системой, грубо говоря, это как если бы вы открыли файловый менеджер в корне своего Linux и запаковали всё найденное в архив, только здесь предустановлено минимально необходимое количество пакетов.
Для чего нужен rootfs
- chroot
- запуск в контейнере (systemd-nspawn, lxc, docker)
- установка системы вручную
Где скачать rootfs Росы
Раз в день автоматически выполняются сборки rootfs архитектуры x86_64 на платформах rosa2021.1 и rosa2023.1.
rosa13
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