Настройка сетевой загрузки (PXE) на CentOS7 для загрузки живой системы или загрузочного образа

Материал из Викиадмин
Перейти к навигации Перейти к поиску

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


root:ваш пасс в зашифрованном виде:.....

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

   vi /home/lib/tftpboot/centos7/root/etc/fstab


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

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

   wget -P /home/lib/tftpboot/centos7/ http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img

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

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

Например

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 для работы в живой сети.