Подготовка и установка 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! При загрузке установщик не будет спрашивать дополнительное подтверждение, диски сразу же затрутся.
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/