Установку ОС из iso образа можно произвести с помощью загрузчика grub и веб консоли. Для примера будет использоваться образ Ubuntu server 16.10.
1) Устанавливаем сервер с Ubuntu 16.04.
2) Увеличиваем объём оперативной памяти на размер iso образа.
3) Сохраняем содержимое следующих файлов и директорий.
mkdir /backup
cp -r /etc/udev/rules.d /backup
cp /etc/network/interfaces /backup
cp /etc/resolv.conf /backup
cat /proc/cmdline > /backup/cmdline.txt
4) Загружаем образ в корень ФС.
wget http://releases.ubuntu.com/16.10/ubuntu-16.10-server-amd64.iso -O /image.iso
5) Монтируем образ и находим расположение исполняемого файла ядра и образа initrd.
mkdir /mnt/iso_image && mount -o loop /image.iso /mnt/iso_image
find /mnt/iso_image/ -iname "*vmlinuz*"
/mnt/iso_image/install/vmlinuz
find /mnt/iso_image/ -iname "*initrd*"
/mnt/iso_image/install/initrd.gz
6) Добавляем в конец /etc/grub.d/40_custom
menuentry "Ubuntu Server 16.10" {
set root=(hd0,2)
loopback loop /image.iso
linux (loop)/install/vmlinuz iso-scan/filename=/image.iso console=ttyS0,9600n8 noeject noprompt --
initrd (loop)/install/initrd.gz
}
и выполняем
update-grub
7) Перезагружаем сервер и в меню загрузчика (в веб консоли) выбираем пункт Ubuntu Server 16.10.
8) Следуем инструкциям инсталятора до момента подключения cdrom.
9) На вопрос Retry mount the CD-ROM отвечаем No -> Continue -> Execute a shell -> Continue.
10) Создаём рамдиск для хранения образа.
mkdir /mnt/ramdisk && mount -t tmpfs -o size=700m tmpfs /mnt/ramdisk
11) Монтируем корневую ФС базового образа (Ubuntu 16.04) и копируем image.iso на рамдиск.
mkdir /mnt/old_fs && mount /dev/vda2 /mnt/old_fs
cp /mnt/old_fs/image.iso /mnt/ramdisk
#Копируем сохраненные ранее файлы конфигурации
cp -r /mnt/old_fs/backup /mnt/ramdisk
12) Монтируем image.iso в /cdrom.
mount -o loop -t iso9660 /mnt/ramdisk/image.iso /cdrom
13) Отмонтируем /mnt/old_fs.
umount /mnt/old_fs
Выходим из шела (exit) и выбираем пункт Detect and mount CD-ROM.
14) Далее установка может быть произведена обычным образом до момента вывода сообщения о необходимости конфигурирования пакетного менеджера.
Для сохранения возможности автоматического увеличения раздела необходимо повторить разметку установленной ОС
Затем необходимо установить grub (т.е. выбрать пункт Install the GRUB boot loader on a hard disk).
На данном этапе необходимо выбрать Go Back, затем Execute a shell -> Continue:
15) На данном этапе необходимо настроить передачу установленному ядру параметров net.ifnames=0 biosdevname=0 console=ttyS0,9600n8. Для этого необходимо:
15.1)
mkdir /mnt/new_root && mount /dev/vda1 /mnt/new_root
cp -r /mnt/ramdisk/backup /mnt/new_root
15.2)
mount -o bind /proc /mnt/new_root/proc
mount -o bind /sys /mnt/new_root/sys
mount -o bind /dev /mnt/new_root/dev
chroot /mnt/new_root
15.3) В переменную GRUB_CMDLINE_LINUX файла /etc/default/grub необходимо добавить параметры net.ifnames=0 biosdevname=0 console=ttyS0,9600n8:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=ttyS0,9600n8"
15.4)
update-grub
cp /backup/udev/rules.d/* /etc/udev/rules.d
cp /backup/interfaces /etc/network/interfaces
exit
umount /mnt/new_root/proc
umount /mnt/new_root/sys
umount /mnt/new_root/dev
reboot
16) Логинимся через веб-консоль и выполняем следующие команды:
cp /backup/resolv.conf /etc/resolv.conf
echo "deb http://archive.ubuntu.com/ubuntu/ yakkety main" > /etc/apt/sources.list
apt-get update && apt-get install openssh-server && service ssh start
17) Подключаемся к серверу по ssh и устанавливаем flops-mon-agent (отвечает за сбор статистики, изменение ключей и т.п.)
wget http://repo.flops.ru/ubuntu/pool/free/f/flops-mon-agent/flops-mon-agent_1.2.2~2_i386.deb
apt-get install libglib2.0-0
dpkg -i flops-mon-agent_1.2.2~2_i386.deb
service flops-mon-agent start