versofate
Введение
Рано или поздно каждой серьезной компании приходится задумываться о легализации своей IT инфраструктуры. Возьмем среднюю по масштабам компанию N. Центральный офис, 30 небольших филиалов. Везде стоят рабочие станции под Windows, в основном XP. На более свежих машинах, ноутбуках, встречаются windows 7 и 8, на серверах 2k3, 2k8, ubuntu-server.
Расширяется компания не слишком большими темпами, и немногочисленный отдел IT успевает новые машины накатывать из заранее созданных образов Acronis'ом. Но в целях уменьшения затрат/легализации инфраструктуры/очистки совести принимается решение перейти на opensource. Тут уже другой масштаб трагедии, переустанавливать руками множество рабочих станций - процесс долгий и неблагодарный. Под катом - один из вариантов решения данной проблемы.
1. Инструменты и установка требуемых пакетов.
Решено было устанавливать Ubuntu 12.04.3 LTS с помощью PXE. В качестве инструментов реализации были выбраны cobbler и puppet.
Сobbler - сервер сетевой установки для Linux, обеспечивающий быстрое построение необходимой среды развертывания и управления процессом инсталляции ОС на новые компьютеры или виртуальные машины (Xen, qemu, KVM или VMware Server), так и последующей переустановки систем.
Написан Сobbler на Python и является связкой для некоторых стандартных для таких случаев компонентов PXE, TFTP, DHCP и других.
Установим нужные нам пакеты:
sudo apt-get install cobbler cobbler-common cobbler-web dhcp3-server xinetd tftpd tftp debmirror
По умолчанию получим cobbler версии 2.2.3, что не совсем хорошо. Почему - узнаем дальше.
Затем проверим, все ли устраивает наш cobbler:
sudo cobbler check
На что в ответ должны увидеть:
No configuration problems found. All systems go.
Синхронизируем конфигурацию:
sudo cobbler sync
Теперь cobbler готов к дальнейшей настройке.
2. Настройка Cobbler
Изменим конфигурацию cobbler, указав сетевые настройки сервера, на котором он установлен:
sudo dpkg-reconfigure cobbler
Укажем адрес сервера в сети, пароль для web-интерфейса cobbler"а.
Настроим cobbler на использование DHCP:
sudo nano /etc/cobbler/settings
изменим
manage_dhcp: 0
на
manage_dhcp: 1
Перезагрузим и синхронизируем конфигурацию cobbler:
sudo service cobbler restart sudo cobbler sync
Изменим шаблон DHCP, который cobbler будет передавать isc-dhcp-server:
sudo nano /etc/cobbler/dhcp.template
Приводим к виду:
subnet 192.168.1.0 netmask 255.255.255.0 { #подсеть option routers 192.168.1.254; #адрес шлюза option domain-name-servers 192.168.1.254; #адрес DNS сервера option subnet-mask 255.255.255.0; #маска range dynamic-bootp 192.168.1.10 192.168.1.20; #диапазон раздаваемых IP
И снова перезагружаем cobbler:sudo service cobbler restart sudo cobbler sync
Теперь cobbler готов к импорту Вашего ISO файла, но тут, как и обещал, объясню ситуацию с некоторыми нюансами cobbler 2.2.3.
Собственно, нюансы.
Первыми граблями, на которые въехал мой велосипед, стал факт, что я не мог импортировать образ desktop версии. После импорта в cobbler его не было видно в списке возможных для установки дистрибутивов. После гугления форумов наших заокеанских друзей - оказалось, что нужно использовать alternate, server, mini версии дистрибов Ubuntu, desktop cobbler попросту не видит(хотя есть какие-то workaround, но мне было проще скачать alternate). Так же, особенностью версии 2.2.3 является то, что он не создает локального дистрибутива с вашего образа, при установке подгружает только ядро, все остальные пакеты качает с репозиториев в интернете. Как минимум так было с образом lubuntu-12.04-alternate-i386. В версии 2.4 создается локальный дистриб, и пакеты ставятся непосредственно с вашего ISO-образа.
Продолжим
Смонитруем наш образ и импортируем его в список дистрибутивов cobbler:
sudo mount -o loop lubuntu1203.iso /mnt sudo cobbler import --name=lubuntu-12-4 --path=/mnt --breed=ubuntu
Пакет cobbler-web мы ставили не зря. Можем обратиться к его web-интерфейсу по адресу: 192.168.1.2/cobbler_web
Тут можно настроить много полезных вещей, добавить свои дистрибутивы, пакеты, репозитории, профили и прочее. Наша задача - настроить импортированный нами профиль. Переходим в Profiles, где видим lubuntu-12-4, жмем Edit. Тут наша задача - добавить kickstart
Уже на последнем этапе, при установке Ubuntu на клиентской машине, наткнулся на ошибку "Bad Archive Mirror An error has been detected while trying to use the specified archive mirror".
Решается копированием и переименованием kickstart файла
/var/lib/cobbler/kickstarts/ubuntu-server.preseed
в
/etc/cobbler/precise.ubuntu.alternate.lan.preseed
В нашем профиле путь к kickstart пропишем в соответствующем месте:
3. Puppet
На puppet была возложена функция тонкой настройки машин. В рассмотренном мной примере будет проверяться наличие некоторых пакетов на клиентской машине, и их установка, в случае отсутствия.
Установим puppet на сервере:
sudo apt-get install puppetmaster
И на клиенте:
sudo apt-get install puppet
Для удобства, кстати, в /etc/cobbler/settings есть параметр puppet_auto_setup, который ставит puppet автоматически, но требует иметь локальную копию EPEL на своем сервере. Либо я не до конца понял, либо затея действительно глупая, но все можно реализовать через post-install script в самом cobbler куда проще.
Подразумевается, что машины получают свои имена от DNS, в ином случае, придется настроить файлы hosts на клиенте и сервере puppet соответственно.
192.168.0.1 puppetmaster.example.com puppetmaster puppet 192.168.0.10 puppetclient.example puppetclient
Создадим манифест /etc/puppet/manifests/site.pp следующего содержания(пакеты выбраны для примера, для детальной настройки puppet следует обратиться к его документации):
$base_packages = [ "gnome", "mc", "openssh-server", "vim" ] package { $base_packages: ensure => installed }
Финальным шагом для этого простого Puppet сервера является перезапуск сервиса:
sudo /etc/init.d/puppetmaster restart
Теперь можем запросить сертификат с клиента:
puppet agent --server puppetmaster --waitforcert 60 --test info: Creating a new SSL certificate request for puppetclient
Просмотрим запрос на подпись сертификата на сервере:
puppet cert --list
Теперь мы должны увидеть запрос от клиента, подпишем:
puppet cert --sign puppetclient
При первой попытке соединения с сервером puppet выдал ошибку, что имя сервера в сертификате не соответствует имени, к которому был запрос, нужно отредактировать/etc/puppet/puppet.conf
[master] certname=puppetmaster
Вот и все, клиентская машина будет ставить указанные в манифесте пакеты.
Заключение
Данный процесс может незначительно отличаться на разных дистрибутивах. Может понадобиться создать недостающую папку, о чем будет явно прописано в консоли. Так же не удалось побороть зависание в начале установки, минут на 15, может показаться, что машина просто зависла. Насколько мне удалось узнать, выполняется deduplicate. Тоже часто встречающийся баг, описанный в баг-трекерах. Почему, отчего - возможно кто-то подскажет именно здесь.