Как можно просто и быстро установить Linux по сети на примере установки CentOS 5
А вот kickstart Linux by Yeti:
В серверной все чаще попадаются сервера без внешних CD/DVD-приводов. Время от времени на них нужно ставить операционную систему и в этом может сильно помочь установка по сети. Вы просто включаете сервер и начинаете установку. Сетевая карта должна поддерживать технологию PXE. PXE – Pre-Boot Execution Environment, позволяет осуществлять загрузку по сети.
Но PXE не достаточно для полного счастья, технология которая позволит полностью автоматизировать установку – kickstart (разработчиком которой является компания Red Hat). Суть ее проста, мы заранее составляем файл содержащий значения всех опций которые могут понадобиться в ходе установки. Более того мы можем выполнять свои скрипты до установки и после. Тем самым задавая настройки будущей ОС.
Установка с помощью kickstart типового комплекта Linux занимает 5-7 минут.
Для Install-сервера нужно 3 службы и 1 пакет.
- DHCP – предоставляет клиентам сетевые реквизиты
- TFTP – простой способ предоставить доступ к файлам по сети
- Syslinux – пакет содержит загрузчик pxelinux.0 и некоторые другие файлы
- NFS – предоставляет доступ к файловой системе по сети
Процесс установки можно разбить на этапы:
- pxe – прошивка pxe начинает свою работу, когда мы в BIOS выставляем установку по сети или когда на HDD не найдена MBR
- DHCP фаза 1 – клиент получает сетевые реквизиты и адрес tftp-сервера а также название файла-загрузчика (pxelinux.0). По умолчанию TFTP-сервер это DHCP-сервер.
- TFTP – загрузчик pxelinux.0 обращается к TFTP-серверу и запрашивает у него initrd.img (Initial RAM disk, временная файловая система) ядро Linux.
- Kernel – передача управления ядру Linux DHCP фаза 2 – ядро Linux далет запрос к DHCP-серверу чтобы получить сетевые реквизиты и в дальнейшем адрес NFS-сервера
- NFS – этап когда монтируется NFS-раздел
- Init – происходит запуск /sbin/init и управление передается ему. Init – это главный процесс в системе, другие процессы являются родительскими процессами init.
В свободном изложение:
DHCP-сервер ожидает bootp-запросы в своей сети, после того как он получает запрос он смотрит MAC-адрес источника, и если о таком MAC-адресе у него имеется соответствующая запись он начинает с ним работать. DHCP — сервер выдает клиенту сетевые реквизиты (ip-адрес, gateway, DNS-сервера,...) и по протоколу TFTP, с помощью TFTP-сервера отправляет загрузочный образ pxelinux.0. Этого образа хватает чтобы вывести меню выбора ОС.
Выбрав ОС вы начинаем загрузку ядра и начинаем инсталляцию, в процессе выбрав источник установки — NFS-сервер. На NFS-сервер нужно выложить подготовленный контент будущей операционной системы и убедиться, что соответствующие каталоги экспортированы.
DHCP
Устанавливаем DHCPD и добавляем его в автозагрузку
# yum -y install dhcp
# chkconfig dhcpd on
Файл /etc/dhcpd.conf делаем такой:
ddns-update-style interim;
ignore client-updates;
subnet 192.168.146.0 netmask 255.255.255.0 {
option routers 192.168.146.2;
option subnet-mask 255.255.255.0;
option domain-name «company.ru»;
option domain-name-servers 192.168.146.2;
default-lease-time 21600;
max-lease-time 43200;
Allow bootp;
Allow booting;
host unixbox {
hardware ethernet 00:0c:29:77:9c:9c;
fixed-address 192.168.146.129;
filename «pxelinux.0»;
option subnet-mask 255.255.255.0;
option routers 192.168.146.2;
option domain-name «company.ru»;
option host-name «unixbox»;
next-server 192.168.146.130;
}
}
Запускаем DHCPD или перезагружаем если он был запущен
# service dhcpd restart
TFTP
Устанавливаем пакет tftp-server из репозитория
# yum -y install tftp-server
Теперь необходимо включить tftp в конфигурации xinetd, для этого в файле
/etc/xinetd.d/tftp
Меняем “disable = yes” на “disable = no” и включаем xinetd
# service xinetd start
Проверяем что порт tftp-сервера прослушивается (tftp работает на порту 69)
# netstat -nlp | grep :69
udp 0 0 0.0.0.0:69 0.0.0.0:* 3105/xinetd
Syslinux
Пакет содержит набор файлов для загрузки по сети. Нам нужны pxelinux.0 который как загрузочный образ мы будем отдавать через DHCP и menu. c32, с помощью этого файла будет рисоваться более привлекательное меню пользователя.
# cp $(rpm -ql syslinux | grep menu.c32) /tftpboot/
# cp $(rpm -ql syslinux | grep pxelinux.0) /tftpboot/
NFS
По умолчанию в системе скорее всего есть NFS, если нету то поставьте с помощью yum.
# chkconfig nfs on
В файл /etc/exports добавляем запись
echo “/var/install-server/ *(ro,no_root_squash)” >> /etc/exports
Запускаем nfs-сервер
# service nfs start
Проверяем что каталог экспортирован
# exportfs
/var/install-server
<world>
Создаем структуру tftp-сервера добавляем контент на сервер
# mkdir -p /tftpboot/{pxelinux.cfg,centos5_x86}
# mkdir -p /var/install-server/centos5_x86
Монтируем наш DVD с CentOS 5 и закачиваем содержимое в /var/install- server/centos5_x86
# mount /dev/cdrom /mnt/
# cp -r /mnt/* /var/install-server/centos5_x86/
#cp /var/install-server/centos5_x86/images/pxeboot/* /tftpboot/centos5_x86/
В каталоге /tftpboot/pxelinux.cfg создаем файл default и заполняем его как ниже:
default menu.c32
menu title Linux Install Server. Please choose OS to install.
prompt 0
timeout 100
label CentOS 5 x86 Custom install
kernel /centos5_x86/vmlinuz
append initrd=/centos52_x86/initrd.img
label Quit
localboot 0
Устанавливаем ОС по сети
После всех сделанных манипуляций которые описаны выше, можем приступить к установке ОС. Стартуем нашу машину с MAC-адресом 00:0c:29:77:9c:9c включив в BIOS загрузку по сети. Когда начнется установка все делаем стандартным образом, кроме как в списке откуда будет ставить ОС нужно выбрать NFS, далее когда попросят, указать:
NFS server name : 192.168.146.130
CentOS directory: /var/install-server/centos5_x86
Дальше устанавливаем ОС и пользуемся на здоровье
Автоматизация установки с помощью Kickstart
Для автоматизации нужно создать файл содержащий всю нужную информацию, которая может потребоваться в процесс установки. Такой файл создается программой system-config-kickstart (GUI tool) в любой CentOS с X Window
# yum -y install system-config-kickstart
# system-config-kickstart
После того как мы создали файл с помощью system-config-kickstart его нужно перенести на Install-сервер и сделать доступным по одному из протоколов – http, nfs или ftp. Поскольку в работе Install-сервера активно используется NFS то и будем использовать ее.
В моем случае kickstart-файл лежит в /var/install-server/centos5_x86/centos5_x86_ks.cfg
В файл /tftpboot/pxelinux.cfg/default нужно всего лишь добавить директиву ks с указанием местоположения kickstart-файла. Пример с kickstart-файлом.
default menu.c32
menu title Linux Install Server. Please choose OS to install.
prompt 0
timeout 100
label CentOS 5 x86 Custom install
kernel /centos5_x86/vmlinuz
append initrd=/centos5_x86/initrd.img
label CentOS 5 x86 Kickstart Install
kernel /centos52_x86/vmlinuz
append initrd=/centos5_x86/initrd.img ks=nfs:192.168.146.135:/var/install-server/
centos5_x86/centos5_x86_ks.cfg
label Quit
localboot 0
Теперь выбрав «CentOS 5 x86 Kickstart Install» в меню выбора ОС нам останется только подождать сервера с установленной на нем ОС.
Ниже пример моего Kickstart-файла. Мне захотелось чтобы в установленной ОС в настройках sshd была опция «PermitRootLogin yes». Kickstart-файл позволяет не только задавать параметры установки ОС но и выполнять скрипты, до инсталляции (%pre) и после (%post). Таким образом можно написать массу скриптов по тюнингу и за 5-10 минут инсталляции получить полностью готовую ОС.
#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --disabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Installation logging level
logging --level=info
# Use NFS installation media
nfs --server=192.168.146.130 --dir=/var/install-server/centos5_x86
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
#Root password
rootpw --iscrypted $1$Bz09jb2I$hfzh2vApqMjG0sEPsAwNr/
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Europe/Moscow
# Install OS instead of upgrade
install
# Disk partitioning information
part swap --bytes-per-inode=4096 --fstype=”swap” --size=512
part / --bytes-per-inode=4096 --fstype=”ext3” --grow --size=1
%post --interp /bin/bash
PATH=/somework
/bin/mkdir $PATH
/bin/sed -e ‘s/#PermitRootLogin yes/PermitRootLogin yes/g’ /etc/ssh/sshd_config >
$PATH/sshd_config_edited
/bin/cp $PATH/sshd_config_edited /etc/ssh/sshd_config
/bin/rm -rf $PATH

(15 голосов, средний: 4.33 из 5)

Сентябрь 27th, 2009 at 0:00
# Init – происходит запуск /sbin/init и управление передается ему. Init – это главный процесс в системе, другие процессы являются родительскими процессами init.
Мне одному кажется эта фраза неправильной?
Сентябрь 27th, 2009 at 12:07
Замечательная статья. Разжевано все хорошо
Сентябрь 28th, 2009 at 10:49
#Init – это главный процесс в системе, другие процессы являются родительскими процессами init.
)) не родительскими а дочерними
Сентябрь 28th, 2009 at 11:15
Откройте для себя Cobbler.
З.Ы. Статью не читала(только просмотрела), это все красиво, конечно, делать руками, что бы понимать что делаешь, но готовые решения все равно получаются лучше
Конечно, для новичков очень полезно.
Сентябрь 28th, 2009 at 17:39
>Мне одному кажется эта фраза неправильной?
Очевидно, все процессы будут ему дочерними.