Участник:Korotyshev/Подготовка образов для OpenNebula: различия между версиями

Материал из ALT Linux Wiki
Метка: отменено
Нет описания правки
 
(не показано 13 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{stub}}
{{stub}}
OpenNebula хоть и позволяет использовать ВМ с полной инсталляцией через livecd на каждом инстансе, однако всё же рассчитана на разворачивание уже установленной ОС, которая в зависимости от настроек будет загружать публичные ключи SSH, настраивать пароли локальных учетных записей, а также выполнять пользовательские скрипты и выставлять IP-адреса. Всё это возможно благодаря службе контекстуализации, которая встраивается в систему при создания образа.
Подготовить образ можно двумя способами:
Подготовить образ можно двумя способами:
# Загрузить готовый 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;
# Загрузить готовый 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;
Строка 17: Строка 16:
# Расширяем раздел <syntaxhighlight lang="bash"># parted /dev/sda resizepart 1 100%</syntaxhighlight>
# Расширяем раздел <syntaxhighlight lang="bash"># parted /dev/sda resizepart 1 100%</syntaxhighlight>
# Расширяем ext4 на увеличенном разделе <syntaxhighlight lang="bash"># resize2fs /dev/sda1</syntaxhighlight>
# Расширяем ext4 на увеличенном разделе <syntaxhighlight lang="bash"># resize2fs /dev/sda1</syntaxhighlight>
# Монтируем раздел вместе с proc и dev <syntaxhighlight lang="bash"># mount /dev/sda1 /mnt
# Монтируем раздел вместе с proc, dev и sys <syntaxhighlight lang="bash"># mount /dev/sda1 /mnt
# mount --bind /proc /mnt/proc
# mount --bind /proc /mnt/proc
# mount --bind /dev /mnt/dev
# 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 --bind /etc/resolv.conf /mnt/etc/resolv.conf</syntaxhighlight>
#* Альтернативный вариант - команда mount-system. После её выполнения все обнаруженные root-разделы будут находиться в /mnt/systemN.
# Делаем chroot до точки монтирования <syntaxhighlight lang="bash"># chroot /mnt /bin/sh</syntaxhighlight>
# Делаем chroot до точки монтирования <syntaxhighlight lang="bash"># chroot /mnt /bin/sh</syntaxhighlight>
:: {{note|Если необходимо подключение к сети внутри окружения, перед входом в chroot необходима [[Etcnet_start|'''настройка интерфейса'''.]]}}
:: {{note|Если необходимо подключение к сети внутри окружения, перед входом в chroot необходима [[Etcnet_start|'''настройка интерфейса'''.]]}}


На данном этапе доступна консоль, в которой можно сделать нужные изменения, например:
На данном этапе доступна консоль, в которой можно сделать нужные изменения, например:
Обновить систему, установить утилиты nano,tmux <syntaxhighlight lang="bash"># apt-get update && apt-get -y install nano tmux && apt-get clean</syntaxhighlight>
Обновить систему, установить утилиты nano,tmux <syntaxhighlight lang="bash"># apt-get update && apt-get -y install nano tmux</syntaxhighlight>


== Установка системы с нуля ==
== Установка системы с нуля ==
*...


== Установка службы контекстуализации ==
== Установка службы контекстуализации ==
Строка 33: Строка 36:


{{note|Для ОС Альт необходимый пакет присутствует в официальном репозитории [https://packages.altlinux.org/ru/p10/binary/opennebula-context/noarch/ opennebula-context]}}
{{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.}}


== Графическое окружение рабочего стола ==
== Графическое окружение рабочего стола ==
* [[KDE#Установка_KDE | KDE]]
Здесь приведены инструкции по установке стандартных окружений рабочего стола:
* [[ 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]}}


{{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"># exit
<syntaxhighlight lang="bash"># apt-get clean
# exit
# umount -R /mnt
# umount -R /mnt
# poweroff</syntaxhighlight>
# poweroff</syntaxhighlight>


== Уменьшение размера образа ==
== Уменьшение размера образа ==
Образы QCOW2 поддерживают компрессию. Это сильно уменьшит размер, однако производительность I/O будет снижена.
Образы QCOW2 поддерживают компрессию. Это сильно уменьшит размер, однако производительность I/O будет снижена:
<syntaxhighlight lang="bash">$ qemu-img convert -O qcow2 -c image1.qcow2 image1-compressed.qcow2</syntaxhighlight>
<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]):
Если используется динамический диск (thin-provision), возможно уменьшить его размер за счёт неиспользуемого пространства без компрессии. Для этого выполняем следующую команду (утилита входит в состав [https://packages.altlinux.org/ru/p10/binary/guestfs-tools/ guestfs-tools]):
<syntaxhighlight lang="bash">$ virt-sparsify image1.qcow2 image1-discard.qcow2</syntaxhighlight>
<syntaxhighlight lang="bash">$ virt-sparsify image1.qcow2 image1-discard.qcow2</syntaxhighlight>
{{note|Если MBR/GPT раздел был увеличен, это может привести к обратному эффекту - размер образа увеличится.}}
Вместе с компрессией (только QCOW2):
Вместе с компрессией (только QCOW2):
<syntaxhighlight lang="bash">$ virt-sparsify --compress image1.qcow2 image1-discard-compressed.qcow2</syntaxhighlight>
<syntaxhighlight lang="bash">$ virt-sparsify --compress image1.qcow2 image1-discard-compressed.qcow2</syntaxhighlight>

Текущая версия от 15:06, 13 февраля 2024

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Подготовить образ можно двумя способами:

  1. Загрузить готовый cloud-образ и настроить под свои нужды;
    Примечание: Для OpenNebula выпускаются голые образы Альт с уже встроенной службой opennebula-context, а также с cloud-init (альтернативный инструмент инициализации системы, подробнее на отдельной странице).
  2. Создать голый образ диска, установить систему с 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)

Кастомизация готового образа

Примечание: Все действия будут проводиться в Live-окружении Alt Regular Rescue


  1. Загружаем облачный образ для opennebula
    $ wget http://ftp.basealt.ru/pub/distributions/ALTLinux/images/Sisyphus/cloud/x86_64/alt-sisyphus-opennebula-x86_64.qcow2
    
  2. Увеличиваем максимальный размер диска на 1G
    $ qemu-img resize alt-sisyphus-opennebula-x86_64.qcow2 +1G
    
  3. Запускаем 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
    
  4. Расширяем раздел
    # parted /dev/sda resizepart 1 100%
    
  5. Расширяем ext4 на увеличенном разделе
    # resize2fs /dev/sda1
    
  6. Монтируем раздел вместе с 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.
  7. Делаем chroot до точки монтирования
    # chroot /mnt /bin/sh
    
Примечание: Если необходимо подключение к сети внутри окружения, перед входом в chroot необходима настройка интерфейса.


На данном этапе доступна консоль, в которой можно сделать нужные изменения, например:

Обновить систему, установить утилиты nano,tmux

# apt-get update && apt-get -y install nano tmux

Установка системы с нуля

  • ...

Установка службы контекстуализации

Инструкция по установке для большинства систем доступна в документации к OpenNebula

Примечание: Для ОС Альт необходимый пакет присутствует в официальном репозитории opennebula-context
Внимание! Контекстуализация OpenNebula несовместима с Etcnet. Требуется его замена на systemd-networkd или NetworkManager


Пример установки службы на p10 (если отсутствует):

  1. Устанавливаем основную службу one-context:
    # apt-get update && apt-get -y install opennebula-context
    
  2. Устанавливаем systemd-networkd и timesyncd:
    # apt-get -y install systemd-networkd systemd-timesyncd
    
  3. Меняем настройки автозапуска в 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.


Графическое окружение рабочего стола

Здесь приведены инструкции по установке стандартных окружений рабочего стола:

Внимание! Рекомендуется использовать официальные релизы p10 или community-сборки Starterkit для установки системы вместе с желаемым окружением во избежание проблем
Примечание: При установке минимального графического окружения (напр. xorg-server вместе с оконным менеджером openbox) потребуется установка device-dependent X (DDX) драйвера. Так как OpenNebula по умолчанию эмулирует Cirrus Logic, необходим xorg-drv-cirrus


Пример установки LXDM+Openbox на p10:

  1. Устанавливаем пакеты для X11, LXDM/Openbox, а также открытый шрифт Liberation:
    # apt-get update && apt-get -y install xorg-drv-cirrus lxde-lxdm openbox fonts-ttf-liberation
    
  2. Меняем настройки автозапуска в systemd:
    # systemctl set-default graphical.target
    # systemctl enable lxdm
    
  3. Меняем путь к исполняемому файлу для 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