CentOS 8 наконец-то увидела свет и, хотим мы этого или нет но, в ближайшей перспективе адептам корпоративной операционной системы от коммьюнити придется с ней подружиться.
Решив испытать восьмерку в «дикой природе», я обнаружил, что мои
Оставалось скопировать развернутый образ новой CentOS сразу на жесткий диск
KVM, 256MB RAM, 2GB HDD, без консоли и ISO
Кстати, таким способом можно установить или переустановить не только CentOS и не обязательно в виртуальном окружении.
0. Характеристики VDS
Как и было сказано в начале статьи:
К слову,
1. Три заветных файла
Прежде всего, понадобится «донор» — дополнительный сервер с установленной CentOS 8. Хотя это и не важно, но если технические характеристики донора будут соответствовать таковым у
Объем памяти и размер диска донора не важны, главное установить на него операционную систему. Категорически советую разметить диск донора одним корневым разделом.
Так как в рассматриваемом случае имеется KVM
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-сервер
Для загрузки
Экспортируемый 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-адрес
3. Загрузка VDS «по сети» (NFSroot)
Прежде всего, нужно скопировать в корень
/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"
. . .
И перезагрузить
# grub2-mkconfig --output=/boot/grub2/grub.cfg
# reboot
Если все пройдет без ошибок, то
4. «Установка» CentOS 8
Теперь можно переразметить и отформатировать локальный диск
# 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
На крохотных
# 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
Вот и все, можно перезагрузить
5. Заключение
Полезные ссылки:
www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
access.redhat.com/documentation
Автор: aliend