- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

Кстати, таким способом можно установить или переустановить не только CentOS и не обязательно в виртуальном окружении.

0. Характеристики VDS

Как и было сказано в начале статьи:
Установка CentOS 8 на VDS 256 - 2

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

1. Три заветных файла

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

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

Так как в рассматриваемом случае имеется KVM VDS [1], то донора можно испечь в домашних условиях — на любом дистрибутиве Linux с libvirt. Я предпочитаю экстра минимальную начальную установку, что в условиях задачи будет весомым подспорьем. В этой статье [2] я рассказал о стандартном способе изготовления крошечного образа 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

Донор теперь больше не нужен, хотя может и пригодиться (см. далее)

2. NFS-сервер

Для загрузки VDS [1] по сети без использования локального диска потребуется сервер с NFS-ресурсом. Такой сервер может быть любым, главное его сетевая доступность с IP-адреса VDS [1]. Можно попробовать домашнее оборудование (с возможным «пробросом портов на роутере») или любой другой VDS [1], взятый, например, на тест. Наконец, использовать «донора», если суметь на нем 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 [1] с будущей CentOS 8.

3. Загрузка VDS «по сети» (NFSroot)

Прежде всего, нужно скопировать в корень VDS [1] файлы рамдрайва (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 [1]:

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

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

4. «Установка» CentOS 8

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

# 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 [1] я предпочитаю такую конфигурацию диска:

# 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 [1] с его локального диска.

5. Заключение

VDS [1] с установленной минимальной CentOS 8:
Установка CentOS 8 на VDS 256 - 5

Полезные ссылки:
www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt [3]
access.redhat.com/documentation [4]

Автор: aliend

Источник [5]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/centos/336106

Ссылки в тексте:

[1] хостинг: https://www.reg.ru/?rlink=reflink-717

[2] этой статье: https://habr.com/ru/post/457680/

[3] www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt: https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt

[4] access.redhat.com/documentation: https://access.redhat.com/documentation/

[5] Источник: https://habr.com/ru/post/474392/?utm_source=habrahabr&utm_medium=rss&utm_campaign=474392