Перед тем, как создать облачный сервер из образа, образ необходимо подготовить — это нужно для того, чтобы установка была выполнена корректно и полноценно работал функционал панели управления.
Ниже рассмотрим, какие проверки и настройки потребуется выполнить для успешного создания сервера.
В нашем репозитории на GitHub вы можете найти примеры конфигов сборочной системы Packer для автоматической сборки образов ВМ.
Основные настройки
Таблица разделов
 Проверьте разбивку разделов на диске. Мы рекомендуем использовать для разбивки MBR или GPT; они обе поддерживаются большинством Linux-дистрибутивов командами fdisk, gdisk и аналогичными.
gdisk -l /dev/vdaПример вывода:
GPT fdisk (gdisk) version 1.0.5
Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not presentЕсли используется иная разметка, потребуется создать образ заново, с корректной разметкой.
Разметка диска
Если на диске размечен всего один раздел (корневой) и он имеет файловую систему ext3 или ext4, то при установке сервера из образа будет выполнен ресайз файловой системы. ФС будет расширена до заданного в конфигурации сервера размера диска.
Например, если размер блочного устройства в образе 10 ГБ, то при установке сервера с диском 15 ГБ блочное устройство и ФС будут расширены до 15 ГБ.
Ресайз файловой системы не будет выполнен, если задействован LVM (Logical Volume Manager).
Загрузчик ОС
Мы используем для запуска виртуальных машин SeaBIOS, поэтому в ОС должен быть установлен обычный загрузчик для BIOS. Если установлен UEFI-загрузчик, его необходимо удалить и установить загрузчик для BIOS.
Если вы используете GRUB2, cмотрите инструкции по установке и настройке здесь.
Настройка /etc/fstab
 Для стабильного запуска системы в файле /etc/fstab для корневого раздела указывайте монтирование по UUID, например:
UUID=f19002a1-6e7a-45ac-91cd-24b7cc0e4cd9 / ext4 defaults 0 1Посмотреть UUID раздела можно, например, командой:
blkidПример вывода:
/dev/vda1: UUID="f19002a1-6e7a-45ac-91cd-24b7cc0e4cd9" TYPE="ext4" PARTUUID="f7a1fae1-01"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"Наличие qemu-guest-agent
 Убедитесь, что установлен и запущен сервис qemu-guest-agent — он необходим для выполнения определенных операций из панели, например, для создания бэкапов.
- Проверьте статус.
Systemd:
systemctl status qemu-guest-agent.serviceOpenRC и init.d:
/etc/init.d/qemu-guest-agent statusили:
service qemu-guest-agent status- Установите агент, если он отсутствует:
Debian/Ubuntu:
apt-get install qemu-guest-agentCentOS / RHEL:
yum install qemu-guest-agentAlpine Linux:
apk add qemu-guest-agent- Добавьте в автозагрузку:
Systemd:
systemctl enable qemu-guest-agent.serviceinit.d:
chkconfig --add qemu-guest-agentOpenRC:
rc-update add qemu-guest-agentДля Windows сервис можно установить с помощью специального ISO-образа, который можно скачать здесь. Также с его помощью можно установить virtio-драйверы, необходимые для поддержки виртуализированных устройств.
Данных настроек достаточно для создания облачного сервера из образа. Остальные настройки рекомендуется выполнить для более удобной работы с сервером.
Дополнительные настройки
Установка Zabbix
Для сбора статистики с серверов мы используем агент Zabbix. Чтобы отображать статистику в панели, рекомендуем установить Zabbix с помощью скрипта командой:
wget -O - http://zabbix.repo.timeweb.ru/zabbix-install.sh | bashСетевые настройки
После запуска сервера необходимо обеспечить его доступность по сети. Для этого потребуется настроить DHCP-клиент для автоматического получения IP- и IPv6-адресов.
В большинстве систем клиент DHCP установлен по умолчанию, мы рекомендуем использовать утилиту dhclient с таким файлом конфигурации:
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
option dhcp6.next-hop code 242 = ip6-address;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers, dhcp6.next-hop;
timeout 300;Доступ по SSH
Так как для доступа к серверу, как правило, используется протокол SSH, проверьте, что он установлен и запускается при загрузке сервера.
- Проверьте статус:
Systemd:
systemctl status ssh.service  OpenRC и init.d:
/etc/init.d/ssh statusили:
service ssh status- Установите SSH, если он отсутствует:
Debian/Ubuntu:
apt-get install openssh-serverCentOS / RHEL:
yum -y install openssh-server openssh-clientsAlpine Linux:
apk add openssh - Добавьте в автозагрузку:
Systemd:
systemctl enable ssh.serviceInit.d:
chkconfig --add sshOpenRC:
rc-update add sshd- Также убедитесь, что в используемом файрволе открыт доступ к порту SSH (по умолчанию — 22).
Отключение swap
Рекомендуем отключить файл подкачки.
- Проверьте информацию о включенном swap:
swapon --showПример вывода:
NAME      TYPE SIZE USED PRIO
/swap.img file 685M   0B   -2- Отключите swap:
swapoff -a
Только что водрузил виртуалку на alpinelinux 3.22 в локации Нидерланды. Generic-образ взял прямо с сайта AlpineLinux (у них есть qcow2 для виртуалок). Пришлось его чуть подправить (установить в образ qemu-guest-agent, разрешить ssh руту и сменить ему пароль). С guest-agent-ом завелась VNC-консоль. Всё ок.
Рады, что всё получилось 🙌
Инструкции только для стандартных типовых ОС. При этом если я хочу установить не типовую ОС, например виртуальный маршрутизатор, ПО не устанавливается, виртуалка зависает.
Здравствуйте! Мне необходимо создать сервер из моего предустановленного и настроенного образа Windows2019. Не нашел у Вас инструкции на этот случай. Она есть у Вас?
Добрый день! Можно посмотреть пример сборки образа у нас на Гитхабе, при такой настройке образ точно «заведется» на нашем сервере.
Если возникнут сложности, напишите в поддержку — постараемся помочь. Отметим, что в образ обязательно должны быть добавлены драйверы VirtIO.
А если у вас уже есть работающий сервер с Windows в Timeweb Cloud, его можно просто клонировать.
Извините, но вы не рассказали самое главное - с чего начать и как закончить. Примерно догадываюсь, что надо создать виртуальную машину, например, на Virtualbox, потом проделать манипуляции описанные в инструкции, выключить виртуалку и взять образ диска. А как IP прописать? Насколько я знаю, сами производители Линуксов предоставляют облачные образы, они будут работать? Почему советуете выключить swap, когда наоборот он спасет в экстренных случаях? swap можно сделать в виде файла на диске, если отдельный раздел сложно. Пожалуста, допишите недостающую информацию.
Ага, хорошее замечание. Апдейт по дополнению статьи не помешает :)
Обычно SWAP рекомендуют отключить для сохранности дисков на серверах из-за ограниченности циклов записи на них :)
Здравствуйте, Александр! Возьмем в работу инструкцию по созданию образов :)
В целом вы все описали корректно. Удобнее будет создать и установить виртуальный сервер на компьютере (например, через virtualbox или virt-manager), установить всё необходимое и выполнить настройки. После этого — выключить виртуалку, чтобы все изменения сохранились на диске, и полученный диск загрузить к нам. Другой вариант — собирать образ самостоятельно через qemu-img, но это будет сложнее.
Облачные образы будут работать, если они в нужных форматах. Мы поддерживаем vmdk, vhd, vhdx, vdi, raw, img, qcow2. Например, у Ubuntu есть образы в .img — такие подойдут.
Swap рекомендуем отключать из-за возможной высокой нагрузки на диски. А что касается IP-адресов, то эти настройки выполним мы после создания сервера в панели.