Централизованная установка Linux
Среда, 01 августа 2018 11:06

Централизованная установка Linux

Автор
Оцените материал
(10 голосов)

Установка ОС на большое количество рабочих станций - достаточно муторная процедура. Особенно, если требуется устанавливать однотипные ПК с одинаковыми набором программ и различных настроек. У Microsoft для этих целей есть замечательный инструмент: System Center Configuration Manager. Но у нас же импортозамещение. А значит нужно любыми способами обходиться без продуктов Microsoft. В среде Linux инструмента, содержащего такие же широчайшие возможности, как у SCCM нет. Но можно приблизиться к нему, собирая систему по "кирпичикам". В этой статье рассмотрим как реализовать установку ОС Linux, используя сетевую загрузку.

Выполнение установки по сети позволяет производить установку на большом количестве ПК одновременно. Не нужно подходить к каждому ПК с загрузочным носителем, содержащим дистрибутив ОС. Можно настроить процесс установки таким образом, что достаточно будет только выбрать тип ОС, которую необходимо установить, запустить установку и забыть про этот процесс. На выходе получаем готовый ПК со всеми необходимыми настройками и набором ПО. Системы будут загружаться при помощи PXE (Preboot Execution Environment) с использованием загрузочного образа, расположенного на сервере, после чего будет запущена программа установки.

Для того, что бы настроить такую систему нужно произвести три основных шага:

  1. Настроить сервер (NFS, HTTPS, HTTP, FTP), на котором размещается установочная структура (сам дистрибутив ОС)
  2. Настроить сервер TFTP, который будет отвечать за PXE загрузку.
  3. Настроить сервер DHCP, для того, что бы клиенты знали, где находится PXE сервер.

Для решения поставленной задачи будем использовать сервера с ОС CentOS 7. В принципе все можно сделать на одном сервере, но т.к. у нас в сети уже есть DHCP сервер (о его настройках рассказывалось здесь), то нам останется только поднять сервер, на котором будут храниться дистрибутивы ОС и настроить TFTP и HTTP сервисы.

Сервер хранения дистрибутивов.

Дистрибутивы ОС могут раздаваться различными способами : NFS, HTTP или FTP. В случае использования NFS дистрибутив достаточно хранить в виде ISO файла. Но здесь мы рассмотрим способ раздачи по HTTP. Т.к. для этих целей не требуется каких-либо "навороченных" настроек web-сервера, я решил использовать в NGINX с самыми простыми настройками.

Создаем корневой каталог web-сервера:

# mkdir -p /opt/PXE/www

Устанавливаем ПО:

# yum install nginx

Редактируем файл конфигурации /etc/nginx/nginx.conf. Файл должен будет иметь примерно такой вид:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /opt/PXE/www; # Корневая папка web-сервера

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                autoindex on; # включаем просмотр каталога через браузер
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

Запускаем сервис и разрешаем его автозапуск:

# systemctl start nginx
# systemctl enable nginx

Далее необходимо поместить установочные файлы в папку на вновь созданном web-сервере. Допустим у на имеется iso файл с ОС Centos centos.iso. Необходимо смонтировать его и скопировать содержимое в указанное место неа web-сервере.

Создаем папку, куда поместим содержимое установочного диска:

# mkdir /opt/PXE/www/CentOS

Смонтируем iso файл в папку /mnt:

# mount mount -o loop,ro -t iso9660 /путь/к/centos.iso /mnt

Копируем содержимое iso в папку на web-сервере. После этого не забываем отмонтировать iso файл:

# cp -r /mnt/ /opt/PXE/www/CentOS/
# umount /mnt

Теперь при заходе браузером на сервер дистрибутивов http://server/CentOS мы сможем увидеть все содержимое установочного диска.

Настраиваем TFTP сервер.

Следующитй шаг - настройка TFTP-сервера. Его можно так же назвать PXE-сервером. Этот сервер предназначен для того, что бы выдавать загрузочные образы клиентам, выбравшим сетевую загрузку ПК.

Устанавливаем ПО TFTP-сервера:

# yum install tftp-server

Приводим файл /etc/xinetd.d/tftp к виду (если хотим работать посредством xinetd):

service tftp
{
	socket_type		= dgram
	protocol		= udp
	wait			= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= /opt/PXE/tftpboot
	disable			= no
	per_source		= 11
	cps			= 100 2
	flags			= IPv4
}

Т.е. задаем папку, где будут храниться файлы раздаваемые tftp-сервером и разрешаем сервис как таковой.

Мне не очень хочется завязывать на xinetd, поэтому вносим изменения в файл /usr/lib/systemd/system/tftp.service:

[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /opt/PXE/tftpboot
StandardInput=socket

[Install]
Also=tftp.socket

Т.е. так же задаем папку для хранения раздаваемых файлов.

Затем запускаем сервис tftpd и разрешаем его автозапуск при старте системы.

# systemctl start tftp.socket
# systemctl enable tftp.socket

Далее настраиваем сервер для ответов по PXE.

Нам понадобится файл pxelinux.0 из пакета SYSLINUX, который включен в ISO-образ. Чуть раньше мы скопировали дистрибутив в папку сервера  /opt/PXE/www/CentOS. Копируем файл пакета syslinux в какую-либо папку папку:

# cp -pr /opt/PXE/www/CentOS/Packages/syslinux-версия-архитектура.rpm /рабочая_папка

Распаковываем пакет:

# cd /рабочая_папка
# rpm2cpio syslinux-версия-архитектура.rpm | cpio -dimv

Копируем файл pxelinux.0 в корневую папку tftp-сервера

# cp /рабочая_папка/usr/share/syslinux/pxelinux.0 /opt/PXE/tftpboot/

Для создания меню выбора загрузки PXE понадобятся еще некоторые файлы. Они находятся в той же папке распакованного пакета SYSLINUX. Копируем их в корень TFTP-сервера:

# cp /рабочая_папка/usr/share/syslinux/menu.c32 /opt/PXE/tftpboot/
# cp /рабочая_папка/usr/share/syslinux/memdisk /opt/PXE/tftpboot/
# cp /рабочая_папка/usr/share/syslinux/mboot.c32/opt/PXE/tftpboot/
# cp /рабочая_папка/usr/share/syslinux/chain.c32 /opt/PXE/tftpboot/
# cp /рабочая_папка/usr/share/syslinux/vesamenu.c32 /opt/PXE/tftpboot/

Если необходимо использовать в меню кирилицу, то так же понадобиться файл кирилических шрифтов. Можно использовать например этот: Cyr_a8x16.psf.gz. Распаковываем и копируем в корень TFTP-сервера.

Так же понадобятся загрузочные файлы ядра, находящиеся в папке images/pxeboot установочного диска ОС. Создаем в корне TFTP-сервера папку CentOS и коипруем туда соответствующие файлы:

# mkdir /opt/PXE/tftpboot/CentOS
# cp /opt/PXE/www/CentOS/images/pxeboot/{vmlinuz,initrd.img} /opt/PXE/tftpboot/CentOS/

Создаем файл конфигурации в pxelinux.cfg/(именно там сервер будет искать свою конфигурацию). Имя файла может быть определено как default или сформировано на основе IP-адреса системы. Например, компьютеру с адресом 10.0.0.1 будет соответствовать файл 0A000001. Создаем папку конфигурации в корне tftp-сервера и помещаем туда файл примерно со следующего содержания:

default vesamenu.c32
FONT Cyr_a8x16.psf
prompt 0
timeout 300
ONTIMEOUT local

MENU TITLE PXE Menu
#Local HHD0 Boot
LABEL local
    MENU LABEL Boot From Local HDD0
    LOCALBOOT 0

LABEL CentOS 7 x86_64
        MENU LABEL Установка CentOS 7 x86_64 (интерактивный режим)
        KERNEL CentOS/vmlinuz
        APPEND initrd=CentOS/initrd.img ramdisk_size=100000 ip=dhcp inst.repo=http://ip_адрес_сервера_tftp/CentOS

В получившемся конфиге указано, что надо подгружать файл кирилических шрифтов и два пункта меню: загрузка с локального HDD и "Установка CentOS 7 x86_64". Если в течении задонного таймаута не происходит нажатия клавиш, то загружается пункт меню, отвечающий за загрузку ПК с локального диска без установки ОС.

Настраиваем DHCP сервер

Для того, что бы новый ПК смог увидеть PXE сервер и, соответственно, смог запустить установку ОС, необходимо в настройках DHCP сервера указать соответствующие параметры.

Предусмотрим, что ПК имеют два типа Firmware: классический BIOS и UEFI. Соответственно DHCP сервер по разному определяет эти ПК. В файл /etc/dhcp/dhcpd.conf вносим соответствующие строки (в глобальные настройки или в раздел, отвечающий за конкретный диапазон IP):

allow booting;
allow bootp;
  option space pxelinux;
  option pxelinux.magic code 208 = string;
  option pxelinux.configfile code 209 = text;
  option pxelinux.pathprefix code 210 = text;
  option pxelinux.reboottime code 211 = unsigned integer 32;
     class "pxeclients" {
       	match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
       	next-server 172.28.130.148;  #Адрес сервера PXE
	if substring (option vendor-class-identifier, 15, 5) = "00000" {
		# BIOS client 
		filename "pxelinux.0";
	}
	elsif substring (option vendor-class-identifier, 15, 5) = "00006" {
		# EFI client 32 bit
		filename   "UEFI/shim.efi";
	}
	else {
		# default to EFI 64 bit
		filename   "UEFI/shimx64.efi";
	}
     }

О том где взять и куда положить файл pxelinux.0 говорилось чуть выше в разделе настройки TFTP сервера. Сейчас поговорим о том, где взять файлы для UEFI.

Понадобятся файлы shim.efi, shimx64.efi (из пакета shim) и grubx64.efi (из пакета grub2-efi). Эти пакеты включены в ISO-образ. Мы уже имеем развернутый образ дистрибутива на нашем сервере. Поэтому просто копируем необходимые пакеты в рабочую папку и извлекаем необходимые файлы:

# rpm2cpio shim-x64-версия-архитектура.rpm | cpio -dimv
# rpm2cpio grub2-efi-версия-архитектура.rpm | cpio -dimv

Создаем в папке TFTP сервера еще одну папку UEFI и копируем в нее файлы shim.efi, shimx64.efi и grubx64.efi.

# mkdir /opt/PXE/tftpboot/UEFI
# cp рабочий_каталог/boot/efi/EFI/centos/shim.efi /opt/PXE/tftpboot/UEFI
# cp рабочий_каталог/boot/efi/EFI/centos/shimx64.efi /opt/PXE/tftpboot/UEFI
# cp рабочий_каталог/boot/efi/EFI/centos/grubx64.efi /opt/PXE/tftpboot/UEFI

Создаем в этом же каталоге создаем файл конфигурации grub.cfg приблизительно такого содержания:

set timeout=1
  menuentry 'CentOS' {
  linuxefi uefi/vmlinuz ip=dhcp inst.repo=http://ip_адрес_сервера_tftp/CentOS
  initrdefi uefi/initrd.img
}

Копируем загрузочные образы в папку uefi/:

# cp /opt/PXE/www/CentOS/images/pxeboot/{vmlinuz,initrd.img} /opt/PXE/tftpboot/UEFI/

Далее перезапускаем TFTP сервер и загружаем ПК при помощи PXE.

При данном методе установки ОС можно автоматизировать процесс до нажатия одной кнопки (выбор ОС в меню загрузки PXE). Т.е. все параметры ПК, список устанавливаемого ПО и т.д. можно задать в файле автоответов. Как это зделать - в одной из следующих статей.

Дополнительная информация

Прочитано 9720 раз Последнее изменение Понедельник, 15 октября 2018 17:25
Авторизуйтесь, чтобы получить возможность оставлять комментарии
Madwavenew
Top
Этот шаблон Joomla был скачан с сайта ДжуМикс.