Участник:Korotyshev/Подготовка образов для OpenNebula: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показано 36 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{stub}} | |||
Подготовить образ можно двумя способами: | Подготовить образ можно двумя способами: | ||
# Загрузить готовый cloud-образ и настроить под свои нужды; | # Загрузить готовый cloud-образ и настроить под свои нужды; {{note | Для OpenNebula выпускаются [http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p10/cloud/x86_64/ голые образы] Альт с уже встроенной службой [https://packages.altlinux.org/ru/sisyphus/binary/opennebula-context/ opennebula-context], а также с [https://packages.altlinux.org/ru/sisyphus/binary/cloud-init/ cloud-init] (альтернативный инструмент инициализации системы, подробнее на [[Cloud-init|'''отдельной странице''']]).}}# Создать голый образ диска, установить систему с livecd вместе с желаемыми пакетами, а затем подготовить его для OpenNebula; | ||
# Создать голый образ диска, установить систему с livecd вместе с желаемыми пакетами, а затем подготовить его для OpenNebula; | |||
#* (Вариант для опытных пользователей) Cобрать образ вручную на базе rootfs - базовой файловой системы (в комплекте с ней не идет ядро/initrd - их нужно получать отдельно), распространяется в виде архивов (Альт поставляется в нескольких [http://ftp.basealt.ru/pub/distributions/ALTLinux/p10/images/cloud/x86_64/ вариантах] в .tar.xz) либо генерируется самостоятельно через pacstrap/debootstrap/[[hasher|hasher]]/[[LXD#Сборка_с_использованием_официального_rootfs|distrobuilder]]; | #* (Вариант для опытных пользователей) Cобрать образ вручную на базе rootfs - базовой файловой системы (в комплекте с ней не идет ядро/initrd - их нужно получать отдельно), распространяется в виде архивов (Альт поставляется в нескольких [http://ftp.basealt.ru/pub/distributions/ALTLinux/p10/images/cloud/x86_64/ вариантах] в .tar.xz) либо генерируется самостоятельно через pacstrap/debootstrap/[[hasher|hasher]]/[[LXD#Сборка_с_использованием_официального_rootfs|distrobuilder]]; | ||
:: {{ Attention | Даже если формат образа [https://qemu-project.gitlab.io/qemu/system/images.html#disk-image-file-formats поддерживается] QEMU, это не означает, что его можно добавить в хранилище OpenNebula. Поддерживаются форматы RAW, QCOW2 и VMDK. Если образ не поддерживается (например .vhdx), необходимо выполнить конвертацию.}} | :: {{ Attention | Даже если формат образа [https://qemu-project.gitlab.io/qemu/system/images.html#disk-image-file-formats поддерживается] QEMU, это не означает, что его можно добавить в хранилище OpenNebula. Поддерживаются форматы RAW, QCOW2 и VMDK. Если образ не поддерживается (например .vhdx), необходимо выполнить конвертацию.}} | ||
__TOC__ | |||
Для создания образа будут использоваться qemu-kvm и qemu-img (пакеты [https://packages.altlinux.org/ru/sisyphus/binary/qemu-img/ qemu-img] [https://packages.altlinux.org/ru/sisyphus/binary/qemu-kvm/ qemu-kvm] [https://packages.altlinux.org/ru/sisyphus/binary/qemu-ui-gtk/ qemu-ui-gtk] [https://packages.altlinux.org/ru/sisyphus/binary/qemu-device-display-virtio-gpu/ qemu-device-display-virtio-gpu]) | |||
== Кастомизация готового образа == | == Кастомизация готового образа == | ||
{{note|Все действия будут проводиться в Live-окружении [https://www.altlinux.org/Rescue Alt Regular Rescue]}} | |||
# Загружаем облачный образ для opennebula <syntaxhighlight lang="bash">$ wget http://ftp.basealt.ru/pub/distributions/ALTLinux/images/Sisyphus/cloud/x86_64/alt-sisyphus-opennebula-x86_64.qcow2</syntaxhighlight> | |||
# Увеличиваем максимальный размер диска на 1G <syntaxhighlight lang="bash">$ qemu-img resize alt-sisyphus-opennebula-x86_64.qcow2 +1G</syntaxhighlight> | |||
# Запускаем qemu/kvm с нужными параметрами <syntaxhighlight lang="bash">$ qemu-system-x86_64 -accel kvm -machine q35 -m 3072M -drive format=qcow2,file=./alt-sisyphus-opennebula-x86_64.qcow2 -cdrom regular-rescue-latest-x86_64.iso -vga virtio -boot d</syntaxhighlight> | |||
# Расширяем раздел <syntaxhighlight lang="bash"># parted /dev/sda resizepart 1 100%</syntaxhighlight> | |||
# Расширяем ext4 на увеличенном разделе <syntaxhighlight lang="bash"># resize2fs /dev/sda1</syntaxhighlight> | |||
# Монтируем раздел вместе с proc, dev и sys <syntaxhighlight lang="bash"># mount /dev/sda1 /mnt | |||
# mount --bind /proc /mnt/proc | |||
# mount --bind /dev /mnt/dev | |||
# mount --bind /dev/pts /mnt/dev/pts | |||
# mount --bind /sys /mnt/sys | |||
# mount --bind /etc/resolv.conf /mnt/etc/resolv.conf</syntaxhighlight> | |||
#* Альтернативный вариант - команда mount-system. После её выполнения все обнаруженные root-разделы будут находиться в /mnt/systemN. | |||
# Делаем chroot до точки монтирования <syntaxhighlight lang="bash"># chroot /mnt /bin/sh</syntaxhighlight> | |||
:: {{note|Если необходимо подключение к сети внутри окружения, перед входом в chroot необходима [[Etcnet_start|'''настройка интерфейса'''.]]}} | |||
На данном этапе доступна консоль, в которой можно сделать нужные изменения, например: | |||
Обновить систему, установить утилиты nano,tmux <syntaxhighlight lang="bash"># apt-get update && apt-get -y install nano tmux</syntaxhighlight> | |||
== Установка системы с нуля == | |||
*... | |||
== Установка службы контекстуализации == | |||
Инструкция по установке для большинства систем доступна в [https://docs.opennebula.io/6.2/management_and_operations/references/kvm_contextualization.html документации к OpenNebula] | |||
{{note|Для ОС Альт необходимый пакет присутствует в официальном репозитории [https://packages.altlinux.org/ru/p10/binary/opennebula-context/noarch/ opennebula-context]}} | |||
{{Attention|Контекстуализация OpenNebula несовместима с Etcnet. Требуется его замена на systemd-networkd или NetworkManager}} | |||
Пример установки службы на p10 (если отсутствует): | |||
# Устанавливаем основную службу one-context: <syntaxhighlight lang="bash"># apt-get update && apt-get -y install opennebula-context</syntaxhighlight> | |||
# Устанавливаем systemd-networkd и timesyncd: <syntaxhighlight lang="bash"># apt-get -y install systemd-networkd systemd-timesyncd</syntaxhighlight> | |||
# Меняем настройки автозапуска в systemd: <syntaxhighlight lang="bash"># systemctl disable network NetworkManager && systemctl enable systemd-networkd systemd-timesyncd one-context</syntaxhighlight> | |||
#* Cоздаём файл автонастройки всех сетевых интерфейсов по DHCP {{path|/etc/systemd/network/lan.network}} со следующим содержимым: <source lang="text"> | |||
[Match] | |||
Name = * | |||
[Network] | |||
DHCP = yes | |||
</source> {{note|Данное действие необходимо, если ВМ будет также использоваться в сетях с получением адреса по DHCP.}} | |||
== Графическое окружение рабочего стола == | |||
Здесь приведены инструкции по установке стандартных окружений рабочего стола: | |||
* [[ GNOME#Установка_GNOME | Gnome]] | |||
* [[ KDE#Установка_KDE | KDE]] | |||
* [[ Cinnamon#Установка_и_запуск_Cinnamon | Cinnamon ]] | |||
* [[ MATE#Установка_MATE | MATE ]] | |||
* [[ LXDE#Установка | LXDE ]] | |||
* [[ Xfce#Установка_Xfce | XFCE ]] | |||
{{Attention|Рекомендуется использовать [https://getalt.org/ru/ официальные релизы p10] или community-сборки [[Starterkits | Starterkit]] для установки системы вместе с желаемым окружением во избежание проблем}} | |||
{{note|При установке минимального графического окружения (напр. [https://packages.altlinux.org/ru/p10/binary/xorg-server xorg-server] вместе с оконным менеджером [https://packages.altlinux.org/ru/p10/binary/openbox openbox]) потребуется установка device-dependent X (DDX) драйвера. Так как OpenNebula по умолчанию эмулирует Cirrus Logic, необходим [https://packages.altlinux.org/ru/p10/binary/xorg-drv-cirrus/ xorg-drv-cirrus]}} | |||
Пример установки LXDM+Openbox на p10: | |||
# Устанавливаем пакеты для X11, LXDM/Openbox, а также открытый шрифт Liberation: <syntaxhighlight lang="bash"># apt-get update && apt-get -y install xorg-drv-cirrus lxde-lxdm openbox fonts-ttf-liberation</syntaxhighlight> | |||
# Меняем настройки автозапуска в systemd: <syntaxhighlight lang="bash"># systemctl set-default graphical.target | |||
# systemctl enable lxdm</syntaxhighlight> | |||
# Меняем путь к исполняемому файлу для default окружения {{path|/etc/lxdm/lxdm.conf}}: <source lang="text"> | |||
[Base] | |||
session=/usr/bin/openbox-session | |||
</source> {{note|Также возможно выбрать Openbox в списке окружений внутри дисплейного менеджера.}} | |||
::{{Attention|Рекомендуется использовать стандартных пользователей вместо root для работы в графическом сеансе. Создать его можно локально через useradd/passwd либо при контекстуализации с переменными USERNAME и PASSWORD.}} | |||
== Окончание редактирования образа == | |||
Выходим из командной оболочки, выполняем размонтирование и завершаем работу | |||
<syntaxhighlight lang="bash"># apt-get clean | |||
# exit | |||
# umount -R /mnt | |||
# poweroff</syntaxhighlight> | |||
== Уменьшение размера образа == | |||
Образы QCOW2 поддерживают компрессию. Это сильно уменьшит размер, однако производительность I/O будет снижена: | |||
<syntaxhighlight lang="bash">$ qemu-img convert -O qcow2 -c image1.qcow2 image1-compressed.qcow2</syntaxhighlight> | |||
Если используется динамический диск (thin-provision), возможно уменьшить его размер за счёт неиспользуемого пространства без компрессии. Для этого выполняем следующую команду (утилита входит в состав [https://packages.altlinux.org/ru/p10/binary/guestfs-tools/ guestfs-tools]): | |||
<syntaxhighlight lang="bash">$ virt-sparsify image1.qcow2 image1-discard.qcow2</syntaxhighlight> | |||
Вместе с компрессией (только QCOW2): | |||
<syntaxhighlight lang="bash">$ virt-sparsify --compress image1.qcow2 image1-discard-compressed.qcow2</syntaxhighlight> |
Текущая версия от 15:06, 13 февраля 2024
Подготовить образ можно двумя способами:
- Загрузить готовый cloud-образ и настроить под свои нужды; Примечание: Для OpenNebula выпускаются голые образы Альт с уже встроенной службой opennebula-context, а также с cloud-init (альтернативный инструмент инициализации системы, подробнее на отдельной странице).
- Создать голый образ диска, установить систему с livecd вместе с желаемыми пакетами, а затем подготовить его для OpenNebula;
- (Вариант для опытных пользователей) Cобрать образ вручную на базе rootfs - базовой файловой системы (в комплекте с ней не идет ядро/initrd - их нужно получать отдельно), распространяется в виде архивов (Альт поставляется в нескольких вариантах в .tar.xz) либо генерируется самостоятельно через pacstrap/debootstrap/hasher/distrobuilder;
- Внимание! Даже если формат образа поддерживается QEMU, это не означает, что его можно добавить в хранилище OpenNebula. Поддерживаются форматы RAW, QCOW2 и VMDK. Если образ не поддерживается (например .vhdx), необходимо выполнить конвертацию.
Для создания образа будут использоваться qemu-kvm и qemu-img (пакеты qemu-img qemu-kvm qemu-ui-gtk qemu-device-display-virtio-gpu)
Кастомизация готового образа
- Загружаем облачный образ для opennebula
$ wget http://ftp.basealt.ru/pub/distributions/ALTLinux/images/Sisyphus/cloud/x86_64/alt-sisyphus-opennebula-x86_64.qcow2
- Увеличиваем максимальный размер диска на 1G
$ qemu-img resize alt-sisyphus-opennebula-x86_64.qcow2 +1G
- Запускаем qemu/kvm с нужными параметрами
$ qemu-system-x86_64 -accel kvm -machine q35 -m 3072M -drive format=qcow2,file=./alt-sisyphus-opennebula-x86_64.qcow2 -cdrom regular-rescue-latest-x86_64.iso -vga virtio -boot d
- Расширяем раздел
# parted /dev/sda resizepart 1 100%
- Расширяем ext4 на увеличенном разделе
# resize2fs /dev/sda1
- Монтируем раздел вместе с proc, dev и sys
# mount /dev/sda1 /mnt # mount --bind /proc /mnt/proc # mount --bind /dev /mnt/dev # mount --bind /dev/pts /mnt/dev/pts # mount --bind /sys /mnt/sys # mount --bind /etc/resolv.conf /mnt/etc/resolv.conf
- Альтернативный вариант - команда mount-system. После её выполнения все обнаруженные root-разделы будут находиться в /mnt/systemN.
- Делаем chroot до точки монтирования
# chroot /mnt /bin/sh
- Примечание: Если необходимо подключение к сети внутри окружения, перед входом в chroot необходима настройка интерфейса.
На данном этапе доступна консоль, в которой можно сделать нужные изменения, например:
Обновить систему, установить утилиты nano,tmux
# apt-get update && apt-get -y install nano tmux
Установка системы с нуля
- ...
Установка службы контекстуализации
Инструкция по установке для большинства систем доступна в документации к OpenNebula
Пример установки службы на p10 (если отсутствует):
- Устанавливаем основную службу one-context:
# apt-get update && apt-get -y install opennebula-context
- Устанавливаем systemd-networkd и timesyncd:
# apt-get -y install systemd-networkd systemd-timesyncd
- Меняем настройки автозапуска в systemd:
# systemctl disable network NetworkManager && systemctl enable systemd-networkd systemd-timesyncd one-context
- Cоздаём файл автонастройки всех сетевых интерфейсов по DHCP /etc/systemd/network/lan.network со следующим содержимым:
[Match] Name = * [Network] DHCP = yes
Примечание: Данное действие необходимо, если ВМ будет также использоваться в сетях с получением адреса по DHCP.
- Cоздаём файл автонастройки всех сетевых интерфейсов по DHCP /etc/systemd/network/lan.network со следующим содержимым:
Графическое окружение рабочего стола
Здесь приведены инструкции по установке стандартных окружений рабочего стола:
Пример установки LXDM+Openbox на p10:
- Устанавливаем пакеты для X11, LXDM/Openbox, а также открытый шрифт Liberation:
# apt-get update && apt-get -y install xorg-drv-cirrus lxde-lxdm openbox fonts-ttf-liberation
- Меняем настройки автозапуска в systemd:
# systemctl set-default graphical.target # systemctl enable lxdm
- Меняем путь к исполняемому файлу для default окружения /etc/lxdm/lxdm.conf:
[Base] session=/usr/bin/openbox-session
Примечание: Также возможно выбрать Openbox в списке окружений внутри дисплейного менеджера.
- Внимание! Рекомендуется использовать стандартных пользователей вместо root для работы в графическом сеансе. Создать его можно локально через useradd/passwd либо при контекстуализации с переменными USERNAME и PASSWORD.
Окончание редактирования образа
Выходим из командной оболочки, выполняем размонтирование и завершаем работу
# apt-get clean
# exit
# umount -R /mnt
# poweroff
Уменьшение размера образа
Образы QCOW2 поддерживают компрессию. Это сильно уменьшит размер, однако производительность I/O будет снижена:
$ qemu-img convert -O qcow2 -c image1.qcow2 image1-compressed.qcow2
Если используется динамический диск (thin-provision), возможно уменьшить его размер за счёт неиспользуемого пространства без компрессии. Для этого выполняем следующую команду (утилита входит в состав guestfs-tools):
$ virt-sparsify image1.qcow2 image1-discard.qcow2
Вместе с компрессией (только QCOW2):
$ virt-sparsify --compress image1.qcow2 image1-discard-compressed.qcow2