CentOS 8 наконец-то увидела свет и, хотим мы этого или нет но, в ближайшей перспективе адептам корпоративной операционной системы от коммьюнити придется с ней подружиться.
Решив испытать восьмерку в «дикой природе», я обнаружил, что мои хостинг провайдеры не спешат с изготовлением образа виртуального сервера на CentOS 8. А идея с «собственным ISO» и «VNC консолью» не вселяла уверенности из-за скромных характеристик VDS и прожорливости современной анаконды (anaconda).
Оставалось скопировать развернутый образ новой CentOS сразу на жесткий диск VDS, загрузив сервер «по сети». Способ не блещет новизной, однако найти подробную и законченную инструкцию по его реализации я, например, не смог. Поэтому захотелось поскорее восполнить этот пробел и рассказать об установке CentOS 8 на такой VDS:
Кстати, таким способом можно установить или переустановить не только CentOS и не обязательно в виртуальном окружении.
Как и было сказано в начале статьи:
К слову, хостинг провайдеры сейчас в своих самых бюджетных тарифах предлагают VDS с более могучими характеристиками. Предустановленной операционной системой пусть будет CentOS 7. Думаю, что сейчас это возможно практически у всех поставщиков виртуализации.
Прежде всего, понадобится «донор» — дополнительный сервер с установленной CentOS 8. Хотя это и не важно, но если технические характеристики донора будут соответствовать таковым у VDS, то мороки с настройкой будет значительно меньше.
Объем памяти и размер диска донора не важны, главное установить на него операционную систему. Категорически советую разметить диск донора одним корневым разделом.
Так как в рассматриваемом случае имеется KVM VDS, то донора можно испечь в домашних условиях — на любом дистрибутиве Linux с libvirt. Я предпочитаю экстра минимальную начальную установку, что в условиях задачи будет весомым подспорьем. В этой статье я рассказал о стандартном способе изготовления крошечного образа CentOS. Под спойлером соответствующий kickstart файл и способ его применения:
Обращаю внимание на пароль root-а: настоятельно рекомендую сделать его архисложным, дабы на последующих этапах не поиметь проблем с хулиганами, сканирующими Интернет в поисках развлечений.
После изготовления донора, нужно забрать с его диска все файлы в один архив, скажем, centos8.tgz. Сделать это можно разными способами: подключить диск донора к другой виртуальной машине, примонтировать к гипервизору, либо в самом доноре запаковать все его файлы, исключив виртуальные каталоги (/dev, /proc и т.п.)
Далее, от донора понадобятся еще два файла: ядро (vmlinuz) и модифицированный рамдрайв (initrd). Ядро можно взять в каталоге /boot донора (vmlinuz-что-то-там), а рамдрайв нужно изготовить особенный, включив в него возможность загрузки по сети с NFS-сервера. Для этого в работающей операционной системе донора нужно выполнить:
и забрать из корня диска необходимый initrd.
В итоге три файла, которые понадобятся в дальнейшем:
Донор теперь больше не нужен, хотя может и пригодиться (см. далее)
Для загрузки VDS по сети без использования локального диска потребуется сервер с NFS-ресурсом. Такой сервер может быть любым, главное его сетевая доступность с IP-адреса VDS. Можно попробовать домашнее оборудование (с возможным «пробросом портов на роутере») или любой другой VDS, взятый, например, на тест. Наконец, использовать «донора», если суметь на нем NFS (шутка). После установки CentOS 8, NFS-сервер, как и донор, больше не понадобятся.
Экспортируемый NFS-ресурс должен содержать в своем корне файл centos8.tgz и его распакованное содержимое. Вот краткая инструкция по изготовлению на примере CentOS 7:
100.100.100.100 — это, разумеется, IP-адрес VDS с будущей CentOS 8.
Прежде всего, нужно скопировать в корень VDS файлы рамдрайва (initrd) и ядра (vmlinuz), полученные на первом шаге. Затем, настроить GRUB:
/etc/grub.d/40_custom
200.200.200.200 — IP-адрес NFS-сервера.
/etc/default/grub
И перезагрузить VDS:
Если все пройдет без ошибок, то VDS загрузит CentOS 8 донора, а локальный диск будет полностью отмонтирован:
Теперь можно переразметить и отформатировать локальный диск VDS, скопировать на него файлы ОС, установить загрузчик и настроить сеть. Краткое описание необходимых действий:
На крохотных VDS я предпочитаю такую конфигурацию диска:
Форматирование, удаление резервации и установка значения UUID равному «донорскому»:
Копирование файлов операционной системы и установка загрузчика:
Так как Network Manager понимает legacy, то для настройки сети можно создать соответствующий ifcfg-файл. Имя интерфейса можно узнать:
Вот и все, можно перезагрузить VDS с его локального диска.
VDS с установленной минимальной CentOS 8:
Полезные ссылки:
www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
access.redhat.com/documentation
Решив испытать восьмерку в «дикой природе», я обнаружил, что мои хостинг провайдеры не спешат с изготовлением образа виртуального сервера на CentOS 8. А идея с «собственным ISO» и «VNC консолью» не вселяла уверенности из-за скромных характеристик VDS и прожорливости современной анаконды (anaconda).
Оставалось скопировать развернутый образ новой CentOS сразу на жесткий диск VDS, загрузив сервер «по сети». Способ не блещет новизной, однако найти подробную и законченную инструкцию по его реализации я, например, не смог. Поэтому захотелось поскорее восполнить этот пробел и рассказать об установке CentOS 8 на такой VDS:
KVM, 256MB RAM, 2GB HDD, без консоли и ISO
Кстати, таким способом можно установить или переустановить не только CentOS и не обязательно в виртуальном окружении.
0. Характеристики VDS
Как и было сказано в начале статьи:
К слову, хостинг провайдеры сейчас в своих самых бюджетных тарифах предлагают VDS с более могучими характеристиками. Предустановленной операционной системой пусть будет CentOS 7. Думаю, что сейчас это возможно практически у всех поставщиков виртуализации.
1. Три заветных файла
Прежде всего, понадобится «донор» — дополнительный сервер с установленной CentOS 8. Хотя это и не важно, но если технические характеристики донора будут соответствовать таковым у VDS, то мороки с настройкой будет значительно меньше.
Объем памяти и размер диска донора не важны, главное установить на него операционную систему. Категорически советую разметить диск донора одним корневым разделом.
Так как в рассматриваемом случае имеется KVM VDS, то донора можно испечь в домашних условиях — на любом дистрибутиве Linux с libvirt. Я предпочитаю экстра минимальную начальную установку, что в условиях задачи будет весомым подспорьем. В этой статье я рассказал о стандартном способе изготовления крошечного образа CentOS. Под спойлером соответствующий kickstart файл и способ его применения:
CentOS 8 Tiny
Разместить этот файл можно на любом доступном Web-ресурсе и указать в начале установки:
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-ресурсе и указать в начале установки:
Обращаю внимание на пароль 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 по сети без использования локального диска потребуется сервер с 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.
3. Загрузка VDS «по сети» (NFSroot)
Прежде всего, нужно скопировать в корень 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 донора, а локальный диск будет полностью отмонтирован:
4. «Установка» 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 с его локального диска.
5. Заключение
VDS с установленной минимальной CentOS 8:
Полезные ссылки:
www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
access.redhat.com/documentation