Установка CentOS 8 на VDS 256

CentOS 8 наконец-то увидела свет и, хотим мы этого или нет но, в ближайшей перспективе адептам корпоративной операционной системы от коммьюнити придется с ней подружиться.

Решив испытать восьмерку в «дикой природе», я обнаружил, что мои хостинг провайдеры не спешат с изготовлением образа виртуального сервера на CentOS 8. А идея с «собственным ISO» и «VNC консолью» не вселяла уверенности из-за скромных характеристик VDS и прожорливости современной анаконды (anaconda).

Оставалось скопировать развернутый образ новой CentOS сразу на жесткий диск VDS, загрузив сервер «по сети». Способ не блещет новизной, однако найти подробную и законченную инструкцию по его реализации я, например, не смог. Поэтому захотелось поскорее восполнить этот пробел и рассказать об установке CentOS 8 на такой VDS:

KVM, 256MB RAM, 2GB HDD, без консоли и ISO


l5zmc2h1zzjcjslrer3htiixyue.jpeg
Кстати, таким способом можно установить или переустановить не только CentOS и не обязательно в виртуальном окружении.
Как и было сказано в начале статьи:
qtspjyvr6oqxdik5vk7j-ebcx00.jpeg

К слову, хостинг провайдеры сейчас в своих самых бюджетных тарифах предлагают VDS с более могучими характеристиками. Предустановленной операционной системой пусть будет CentOS 7. Думаю, что сейчас это возможно практически у всех поставщиков виртуализации.


Прежде всего, понадобится «донор» — дополнительный сервер с установленной CentOS 8. Хотя это и не важно, но если технические характеристики донора будут соответствовать таковым у VDS, то мороки с настройкой будет значительно меньше.

Объем памяти и размер диска донора не важны, главное установить на него операционную систему. Категорически советую разметить диск донора одним корневым разделом.

Так как в рассматриваемом случае имеется KVM VDS, то донора можно испечь в домашних условиях — на любом дистрибутиве Linux с libvirt. Я предпочитаю экстра минимальную начальную установку, что в условиях задачи будет весомым подспорьем. В этой статье я рассказал о стандартном способе изготовления крошечного образа CentOS. Под спойлером соответствующий kickstart файл и способ его применения:

CentOS 8 Tiny
install
text

url --url="https://mirror.yandex.ru/centos/8/BaseOS/x86_64/os/"

eula --agreed
firstboot --disable

keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
timezone Africa/Abidjan

auth --enableshadow --passalgo=sha512
rootpw --plaintext very-strong-password-see-below

#ignoredisk --only-use=vda

zerombr
bootloader --location=mbr
clearpart --all --initlabel

part / --fstype="ext4" --size=1 --grow

network --bootproto=dhcp --hostname=localhost --onboot=on --activate

#reboot
poweroff

%packages --nocore
dnf
NetworkManager
openssh-server

%end

%addon com_redhat_kdump --disable

%end

Разместить этот файл можно на любом доступном Web-ресурсе и указать в начале установки:

image


Обращаю внимание на пароль root-а: настоятельно рекомендую сделать его архисложным, дабы на последующих этапах не поиметь проблем с хулиганами, сканирующими Интернет в поисках развлечений.

После изготовления донора, нужно забрать с его диска все файлы в один архив, скажем, centos8.tgz. Сделать это можно разными способами: подключить диск донора к другой виртуальной машине, примонтировать к гипервизору, либо в самом доноре запаковать все его файлы, исключив виртуальные каталоги (/dev, /proc и т.п.)

Далее, от донора понадобятся еще два файла: ядро (vmlinuz) и модифицированный рамдрайв (initrd). Ядро можно взять в каталоге /boot донора (vmlinuz-что-то-там), а рамдрайв нужно изготовить особенный, включив в него возможность загрузки по сети с NFS-сервера. Для этого в работающей операционной системе донора нужно выполнить:

# dnf install dracut-network nfs-utils
# echo 'add_dracutmodules+="nfs"' >> /etc/dracut.conf
# dracut -f /initrd


и забрать из корня диска необходимый initrd.

В итоге три файла, которые понадобятся в дальнейшем:

  • centos8.tgz — архив со всеми файлами установленной CentOS 8
  • initrd — временная файловая система с поддержкой NFS
  • vmlinuz — ядро ОС
# ls -l | awk '{print $9,$5}'
centos8.tgz 320712609
initrd       21916741
vmlinuz       7876856


Донор теперь больше не нужен, хотя может и пригодиться (см. далее)
Для загрузки VDS по сети без использования локального диска потребуется сервер с NFS-ресурсом. Такой сервер может быть любым, главное его сетевая доступность с IP-адреса VDS. Можно попробовать домашнее оборудование (с возможным «пробросом портов на роутере») или любой другой VDS, взятый, например, на тест. Наконец, использовать «донора», если суметь на нем NFS (шутка). После установки CentOS 8, NFS-сервер, как и донор, больше не понадобятся.

Экспортируемый NFS-ресурс должен содержать в своем корне файл centos8.tgz и его распакованное содержимое. Вот краткая инструкция по изготовлению на примере CentOS 7:

# mkdir /nfsroot
# cp .../centos8.tgz /nfsroot
# tar xzf /nfsroot/centos8.tgz -C /nfsroot

# yum install nfs-utils
# systemctl enable rpcbind nfs-server

# echo '/nfsroot 100.100.100.100/32(rw,sync,no_root_squash,no_all_squash)'>/etc/exports

# systemctl restart rpcbind nfs-server


100.100.100.100 — это, разумеется, IP-адрес VDS с будущей CentOS 8.
Прежде всего, нужно скопировать в корень VDS файлы рамдрайва (initrd) и ядра (vmlinuz), полученные на первом шаге. Затем, настроить GRUB:

/etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "NFSRoot" {
    linux  /vmlinuz root=/dev/nfs rw nfsroot=200.200.200.200:/nfsroot \
           ip=100.100.100.100::100.100.100.1:255.255.255.0:::off
    initrd /initrd
}


200.200.200.200 — IP-адрес NFS-сервера.

/etc/default/grub

. . .
GRUB_TIMEOUT=0
. . .
GRUB_DEFAULT="NFSRoot"
. . .


И перезагрузить VDS:

# grub2-mkconfig --output=/boot/grub2/grub.cfg
# reboot


Если все пройдет без ошибок, то VDS загрузит CentOS 8 донора, а локальный диск будет полностью отмонтирован:

5tdsq2uayekzfml6cqgxcyhbi6u.jpeg


Теперь можно переразметить и отформатировать локальный диск VDS, скопировать на него файлы ОС, установить загрузчик и настроить сеть. Краткое описание необходимых действий:

# dnf install parted tar

# parted /dev/vda unit s print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 4194304s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start    End       Size      Type     File system     Flags
        63s      2047s     1985s              Free Space
 1      2048s    526335s   524288s   primary  linux-swap(v1)
 2      526336s  4194303s  3667968s  primary  xfs             boot

# dd if=/dev/zero of=/dev/vda count=3000


На крохотных VDS я предпочитаю такую конфигурацию диска:

# parted /dev/vda unit s print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 4194304s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start  End       Size      Type     File system  Flags
        2s     2047s     2046s              Free Space
 1      2048s  4194303s  4192256s  primary               boot


Форматирование, удаление резервации и установка значения UUID равному «донорскому»:

# mkfs.ext4 /dev/vda1
# cat /etc/fstab | grep UUID
UUID=1f944e86-c590-4af7-b651-3c1783c15d79  /  ext4  defaults  1  1
# tune2fs -m 0 -U 1f944e86-c590-4af7-b651-3c1783c15d79 /dev/vda1
tune2fs 1.44.3 (10-July-2018)
Setting reserved blocks percentage to 0% (0 blocks)
Setting UUID on a checksummed filesystem could take some time.
Proceed anyway (or wait 5 seconds to proceed) ? (y,N) y


Копирование файлов операционной системы и установка загрузчика:

# mount /dev/vda1 /mnt
# tar xzf /centos8.tgz -C /mnt
# grub2-install --boot-directory=/mnt/boot /dev/vda
Installing for i386-pc platform.
Installation finished. No error reported.


Так как Network Manager понимает legacy, то для настройки сети можно создать соответствующий ifcfg-файл. Имя интерфейса можно узнать:

# ls /sys/class/net/
enp1s0  lo
# cat > /etc/sysconfig/network-scripts/ifcfg-enp1s0 << EOF
> DEVICE=enp1s0
> NAME=enp1s0
> TYPE=Ethernet
> ONBOOT=y
> BOOTPROTO=none
> IPADDR=100.100.100.100
> NETMASK=255.255.255.0
> GATEWAY=100.100.100.1
> EOF


Вот и все, можно перезагрузить VDS с его локального диска.
VDS с установленной минимальной CentOS 8:

1ie0dcirzhs-ed5leak3akec1m4.jpeg

Полезные ссылки:

www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
access.redhat.com/documentation

© Habrahabr.ru