Итак, есть задачка: нужно грузится по сети (чтобы не таскать по офисам кучку загрузочных устройств) и при этом иметь 2 варианта: установка по сети CentOS 7 (для периодических заливок серверов и вируалок) и для работы (проверка антивирусом, работы с жёсткими дисками, да и просто выйти в интернет или подредактировать документ). В наличии машинки, зачастую даже без на мёка на наличие жёстких дисков (бывают же бюджетные организации).

Статью разобьём на 3 части: настройка того, что нужно и для установочника и для live, а потом уже установочник и live-система отдельно. Сразу оговорюсь, что ставить всё будем в /home раздел — в нём тучка места, к тому же так исторически сложилось, что корневой раздел небольшой и /var отдельно не вынесен.

Ставим загрузку по сети

Ставим нужные пакеты

  • yum -y install syslinux xinetd tftp-server dracut-network nfs-utils

  • mkdir /home/lib/tftpboot/pxelinux.cfg

Копируем pxelinux.0

  • cp /usr/share/syslinux/pxelinux.0 /home/lib/tftpboot/

Настраиваем и запускаем TFTP:

  • vi /etc/xinetd.d/tftp

  • disable = no (меняем это на 14 строке)

не забываем поменять в пути /var на /home

Сохраняем и запускаем:

  • systemctl start xinetd

  • systemctl enable xinetd

Конфигурируем DHCP

У нас DHCP на Win-платформе, поэтому добавил только 066 и 067 пункты. Но для полноты инструкции добавим настройку этого дела на CentOS 7.

Редактируем конфиг:

  • vi /etc/dhcp/dhcpd.conf

Добавляем сервер загрузки и файл, который надо загружать:

  • option domain-name-servers IP;

  • filename “pxelinux.0”;

  • next-server 10.0.0.30;

Рестартуем этот сервер:

  • systemctl restart dhcpd

Оговорюсь сразу: в другой сети я реализовал это на dnsmasq — небольшой офис, смысла не было ставить что-то «помощнее».

Теперь настраиваем загрузку установочного образа по сети:

Скачиваем образ диска в /home/iso (или куда удобнее). После этого создаём некоторые папки:

  • mkdir -p /home/pxe/centos7_install

  • mkdir /home/lib/tftpboot/centos7_install

Монтируем образ и копируем файлы:

  • mount -t iso9660 -o loop /home/iso/CentOS-7-x86_64-DVD-1503-01.iso /var/pxe/centos7_install

  • cp /home/pxe/centos7/images/pxeboot/vmlinuz /home/lib/tftpboot/centos7_install/

  • cp /home/pxe/centos7/images/pxeboot/initrd.img /home/lib/tftpboot/centos7_install/

  • cp /usr/share/syslinux/menu.c32 /home/lib/tftpboot_install/

Теперь создаём конфиг для загрузочника (не забываем поменять IP):

  • vi /home/lib/tftpboot/pxelinux.cfg/default
1
2
3
4
label install
  menu label ^1) Install CentOS 7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img root=nfs:10.0.0.30:/home/lib/tftpboot/centos7_install/ rw selinux=0 

Подредактируем NFS конфиг

  • vi /etc/exports

  • /var/lib/tftpboot/centos7_install 10.0.0.0/24(rw,no_root_squash)

И рестартуем сервис:

  • systemctl start rpcbind nfs-server

  • systemctl enable rpcbind nfs-server

Третья часть: настраиваем загрузку живой системы по сети:

Проверим, чтобы у нас стояли нужные пакеты

  • yum -y install dracut-network nfs-utils

Делаем папку для системы (корневая)

  • mkdir -p /home/lib/tftpboot/centos7/root

И устанавливаем туда всё и вся. Для начала смотрим группы:

  • yum groups list

И выбираем нужную группу:

  • yum groups -y install “Server with GUI” —releasever=7 –installroot=/home/lib/tftpboot/centos7/root/

(В дальнейшем взял список пакетов из рабочей системы и с помощью yum установил всё, что есть и у меня.)

Для рута устанавливаем пароль (можно скопировать свой из /etc/shadow)

  • vi /home/lib/tftpboot/centos7/root/etc/shadow
1
root:ваш пасс в зашифрованном виде:.....

Редактируем fstab

  • vi /home/lib/tftpboot/centos7/root/etc/fstab
1
2
3
4
none    /tmp        tmpfs   defaults   0 0
tmpfs   /dev/shm    tmpfs   defaults   0 0
sysfs   /sys        sysfs   defaults   0 0
proc    /proc       proc    defaults   0 0

Скопируем пару нужных файлов

И редактируем конфиг загрузчика

  • vi /home/lib/tftpboot/pxelinux.cfg/default

Например

1
2
3
label centos7
   kernel centos7/vmlinuz
   append initrd=centos7/initrd.img root=nfs:IP:/home/lib/tftpboot/centos7/root rw selinux=0 

Ну и допишем доступ к файлам по сети в NFS:

  • vi /etc/exports

добавляем:

  • /home/lib/tftpboot/centos7/root 10.0.0.0/24(rw,no_root_squash)

рестартуем:

  • systemctl start rpcbind nfs-server

  • systemctl enable rpcbind nfs-server

Всё, выставляем загрузку по сети на любом свободном компьютере и смотрим, какие есть ошибки и есть ли они. Если всё ок, появится приглашение, где мы указываем install для установки или centos7 для работы в живой сети.