Хабрахабр

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

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

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

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

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


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

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

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

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

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

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-а: настоятельно рекомендую сделать его архисложным, дабы на последующих этапах не поиметь проблем с хулиганами, сканирующими Интернет в поисках развлечений.

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

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

# 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 ''
centos8.tgz 320712609
initrd 21916741
vmlinuz 7876856

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

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

# 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 донора, а локальный диск будет полностью отмонтирован:

Теперь можно переразметить и отформатировать локальный диск 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:

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть