Skip to main content

Автоустановка систем на базе Linux по сети (RHEL-Based и Deb-based) Ч.1 - Подготовка и установка CentOS

Автоустановка систем на базе Linux по сети (RHEL-Based и Deb-based) Ч.1 - Подготовка и установка CentOS

Понадобилось мне на работе реализовать автоматическую установку серверов, чистых, без дополнительного ПО, на базе ОС Ubuntu, CentOS и Debian, однако инфы по этому довольно мало. Еще одна статья не помешает.

Подготовка

Настраивать PXE сервер будем на базе Ubuntu 20.04.

Для установки потребуются следующие пакеты:

    DHCP сервер (isc-dhcp-server), чтобы сказать биосу, что грузить по сети и выдать адрес TFTP (tftp-hpa) сервер, чтобы подать биосу файлы загрузчика PXELinux (pxelinux) - PXE загрузчик ОС (файлы по пути /usr/lib/PXELINUX) Nginx (или Apache), чтобы подавать файлы ядра, системы, репозитории и т.д.

    В случае с CentOS/Ubuntu необходимо также примонтировать ISO образ в папку (пусть будет /srv/tftp/iso), откуда будет грузиться ОСЬ. В случае с дебианом надо распаковать netboot установщик в папку.

    У нас к серверу подключается 2 линка - один с выходом в интернет и без DHCP, а второй для загрузки по PXE и установке ОС. Впринципе можно адаптировать и под другую конфигурацию.

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

    Указываем путь до файла загрузчика, указываем подсеть, из которой надо выдавать IP адреса:

    $ cat /etc/dhcp/dhcpd.conf 
    allow bootp;
    allow booting;
    max-lease-time 1200;
    default-lease-time 900;
    log-facility local7;
    
    option ip-forwarding    false;
    option mask-supplier    false;
    
       subnet 10.0.1.0 netmask 255.255.255.0 {
    
           option routers 10.0.1.30;
           option domain-name-servers 127.0.0.1;
           range 10.0.1.20 10.0.1.26;
           next-server 10.0.1.1;
           filename "pxelinux.0";
       }
    

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

    Указываем путь до папки TFTP:

    $ cat /etc/default/tftpd-hpa 
    # /etc/default/tftpd-hpa
    
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/srv/tftp"
    TFTP_ADDRESS=":69"
    TFTP_OPTIONS="--secure"
    

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

    Надо, чтобы он отдавал файлики по IP адресу PXE сервера, создаем конфиг:

    $ cat /etc/nginx/sites-enabled/default 
    server {
    	listen 80 default_server;
    	listen [::]:80 default_server;
    
    	root /srv/tftp;
    
    	index index.html;
    
    	server_name _;
    
    	location / {
                    autoindex on;
                    try_files $uri $uri/ =404;
    	}
    
    }
    

    Настраиваем загрузчик

    Копируем файл загрузчика по пути /usr/lib/PXELINUX/pxelinux.0 в /srv/tftp. Создаем конфиг для загрузчика по пути /srv/tftp/pxelinux.cfg/default. Можно также создавать файлы для конкретного MAC адреса (/srv/tftp/pxelinux.cfg/01-88-99-aa-bb-cc-dd). Конфиг:

    $ cat pxelinux.cfg/default 
    timeout=1
    default 1
    
    LABEL 1
        kernel http://10.0.1.1/CentOS-7/images/pxeboot/vmlinuz
        initrd http://10.0.1.1/CentOS-7/images/pxeboot/initrd.img
        append ip=::::server::dhcp inst.ks=http://10.0.1.1/centos.cfg inst.repo=http://10.0.1.1/iso ---
    

    Где inst.ks - путь до Kickstart конфига, а inst.repo - путь до репозитория (примонтированного образа).

    Готовим CentOS 7/8

    На деле самая простая и дружелюбная в автодеплое ОСь. Необходимо примонтировать в /srv/tftp/iso полный DVD образ установщика и создать Kickstart файл /srv/tftp/centos.cfg. Kickstart:

    $ cat centos.cfg 
    #version=Centos7
    auth --enableshadow --passalgo=sha512
    install
    reboot --eject
    eula --agreed
    url --url="http://10.0.1.1/iso"
    
    # Use graphical install
    #graphical
    # Use text mode install
    text
    
    keyboard --vckeymap=us --xlayouts='ru','us' --switch='grp:alt_shift_toggle'
    lang en_US.UTF-8 --addsupport=ru_RU.UTF-8
    timezone Europe/Moscow  --isUtc --ntpservers=ntp2.stratum2.ru,ntp5.stratum2.ru
    firstboot --disable
    
    # Внешний мир
    network  --bootproto=static --device=00:11:22:33:44:55 --gateway=192.168.100.1 --ip=192.168.100.252 --nameserver=8.8.8.8 --netmask=255.255.255.0 --activate
    # Интерфейс PXE
    network  --bootproto=dhcp --device=55:66:77:88:99:00 --ipv6=auto --activate
    network  --hostname=coolserver
    
    # Users
    #dedic
    rootpw --iscrypted PASSWORD
    sshkey --username=root "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3b......"
    
    
    ### Partitioning
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    
    ignoredisk --only-use=sda,sdb
    clearpart --all
    part raid.sda1 --size 512 --asprimary    --ondrive=sda
    part raid.sdb1 --size 512 --asprimary    --ondrive=sdb
    
    part raid.sda2 --size 10240 --grow    --ondrive=sda
    part raid.sdb2 --size 10240 --grow    --ondrive=sdb
    
    raid /boot     --fstype ext4  --device md0  --level=RAID1 raid.sda1 raid.sdb1
    raid /     --fstype ext4  --device md1  --level=RAID1 raid.sda2 raid.sdb2
    
    ### Packages
    
    %packages
    @^minimal
    @core
    %end
    
    %addon com_redhat_kdump --disable --reserve-mb='auto'
    %end
    
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    

    Обратить внимание следует на настройку сети и реквизиты. Будет создано 2 раздела: /boot на 512 Мб и / на все оставшееся место. Также можно добавить в конце дополнительные команды в раздел %post, например:

    %post
    /usr/bin/sed -i "s%#Port 22%Port 43389%g" "/etc/ssh/sshd_config"
    /usr/bin/sed -i "s%#PermitRootLogin yes%PermitRootLogin no%g" "/etc/ssh/sshd_config"
    %end
    

    Пароль можно сгерерировать таким образом: python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

    Готово!

    ACHTUNG! ACHTUNG! При загрузке установщик не будет спрашивать дополнительное подтверждение, диски сразу же затрутся.

    pxeboot

    SRC

      http://www.bog.pp.ru/work/kickstart.html https://www.golinuxhub.com/2018/05/sample-kickstart-partition-example-raid/ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/sect-kickstart-howto https://docs.centos.org/en-US/centos/install-guide/Kickstart2/