Развертывание различных дистрибутивов Linux в корпоративной среде
Содержание статьи
Способов развертывания Linux-систем существует достаточно много — начиная от простого клонирования и заканчивая установкой по сети. Для каждого семейства дистрибутивов также существуют свои способы, которые заметно облегчают установку на множество машин.
Введение
Как правило, на один-два компьютера Linux устанавливают вручную. Однако для большего числа компьютеров это неэффективно — слишком уж много времени уходит на развертывание и настройку необходимых параметров. Есть несколько способов, которые помогут эту процедуру упростить.
- Клонирование итоговой установки одного компьютера на несколько дисков с помощью dd/Clonezilla. Плюс у этого метода очевиден — он универсален и не надо заморачиваться с изучением дистроспецифичных методов развертывания. Минусы, тем не менее, тоже имеют место. Во-первых, конфигурация железа должна совпадать. Во-вторых, при клонировании мы получаем абсолютно точную копию системы — копируются в том числе пароли/SSH-ключи. В случае компрометации одной системы будут скомпрометированы и все остальные.
- Клонирование по сети. Преимущество перед первым методом — не надо отключать и подключать жесткие диски к клонируемой системе или бегать с флешкой, содержащей клонируемый образ, что для большого числа компьютеров довольно монотонно и смысла не имеет. Минус же, помимо тех, что у предыдущего способа, — сеть может отвалиться, что приведет к простою в развертывании. Впрочем, время простоя всяко меньше, чем если бы устанавливали вручную.
- Наконец, дистроспецифичные методы. Плюсы — возможно установить по сети, в том числе используя PXE, возможность гибкой конфигурации (в случае разных классов компьютеров, например компы для офиса, компы разработчиков, сервер) — для этого необходимо указать другой файл конфигурации, различие данных, которые клонироваться не должны. Минусы — для каждого дистрибутива способ развертывания свой и синтаксис конфигурационных файлов, соответственно, разный.
В этой статье мы рассмотрим третий метод для RHEL/Fedora и Debian/Ubuntu — эти дистрибутивы, в общем-то, самые распространенные в корпоративной среде, и в них предусмотрены средства автоматизации развертывания.
Развертывание Fedora/RHEL с помощью Kickstart
Средство автоматической установки Kickstart в Red Hat появилось очень давно — во всяком случае, в Red Hat Linux 6.2 (не Enterprise!) оно уже присутствовало. Существует три способа создания конфигурационного файла, и их можно комбинировать:
- Использовать готовый файл, который создается по завершении каждой установки дистрибутивов, основанных на RHEL/Debian.
- Использовать графический инструмент system-config-kickstart.
- Наконец, написать ручками.
Самым правильным будет комбинирование всех трех способов, но далее я опишу только структуру и конфиг — не весь, конечно, а только наиболее важные его части.
Структура конфигурационного файла kickstart и пример
Условно можно выделить следующие части конфигурационного файла kickstart:
- тип инсталляции: установка или обновление;
- выбор языка и раскладки клавиатуры;
- аутентификация;
- конфигурация загрузчика;
- разбиение на разделы;
- наборы пакетов;
- постинсталляционные действия.
Вот и пример конфига kickstart (anaconda-ks.cfg) с комментариями:
Графическая утилита для создания файлов kickstart
Хакер #178. Mesh-сети или строим свой интернет
Еще раз хочу отметить, что это всего лишь простейший пример, — в файлах kickstart можно использовать целые сценарии, которые будут выполняться перед установкой и после нее — %pre и %post. В %pre-скрипте, к примеру, можно разметить диск более гибко, чем это позволяют делать штатные методы kickstart, а в %post — совершить некоторые действия по конфигурированию.
Создание хешей паролей
Для хеширования паролей можно использовать несколько методов. Наиболее универсальный из них — применение следующего скрипта-однострочника:
Вместо password необходимо задать свой пароль, а вместо salt — случайный набор символов. Результатом будет хеш по алгоритму SHA-512, о чем говорит цифра 6 между знаками доллара (если хочется использовать SHA-256 — используй 5, если MD5 — 1).
Сложная разбивка дисков в kickstart
Для разбиения на разделы используются следующие команды kickstart: autopart, part, raid, volgroup и logvol. Если требуется автоматическая разметка, воспользуйся autopart — к тому же ты можешь выправить размеры разделов ручками с помощью команды part. Однако я бы предпочел полностью ручное разбиение. Порядок создания разделов LVM такой: сперва создаем раздел /boot (обязательно вне LVM), затем с помощью part физический том, потом уже поверх него группу томов, для чего применяем volgroup, и, наконец, используем logvol для создания логических томов с файловыми системами. Программный RAID-массив создается примерно по такой же схеме.
Поскольку разбиение дисков довольно сложная тема, имеет смысл привести фрагмент файла kickstart, где описан вариант создания массива RAID5 с одним запасным устройством, поверх которого создан LVM:
Итоговый конфиг ks.cfg
Запуск автоматической установки
Для того чтобы передать установщику, что процедура установки должна производиться с помощью kickstart, нужно указать местонахождение файла kickstart. Для этого используется опция ks= , передаваемая при загрузке с установочного носителя. Варианты местоположения могут быть следующими:
- Какой-либо накопитель. Указывается так: hd: :/ks.cfg . Например, ks=hd:sda1:/ks.cfg . Также допустимо размещение на CD/DVD ks=cdrom:/ks.cfg , что, впрочем, имеет смысл только в случае самосборного образа.
- NFS. В данном случае указывается через nfs: :/ .
- HTTP/HTTPS. ks=http://192.168.0.1/ks.cfg .
Инфраструктура для развертывания виртуальных машин
Kickstart можно использовать и для развертывания ВМ. Далее я опишу их развертывание на примере VirtualBox и Scientific Linux. Создаем VM из командной строки:
512 Мб — минимальный объем памяти, необходимый для установки Scientific Linux:
Изменяем тип сетевого адаптера — тот адаптер, который стоит по умолчанию, не поддерживает загрузку по сети:
Установим порядок загрузки:
Не станем рассматривать процесс конфигурирования TFTP. Конфиг pxelinux.cfg/default будет выглядеть следующим образом:
Изменения в файле ks-vm.cfg минимальны:
Установка пакета debconf-utils для получения файла ответов на свежеустановленной системе
Preseed в Ubuntu
В системах на основе Debian есть свое средство автоматизации установки под названием preseed. Существует три способа загрузки файла с заданными параметрами установки:
- файл в initrd (наиболее сложный способ);
- файл на самосборном CD или флешке;
- по сети.
В последнем случае необходимо указать как файл, так и его MD5-сумму. Опишем кратко, как грузить файл по сети, а затем создадим самосборный CD со своим файлом preseed. Для загрузки файла по сети в параметрах загрузчика необходимо указать параметр preseed/url= , который можно сократить до url= . Файл рекомендую размещать на внутреннем веб-сервере. Конечный набор параметров будет выглядеть примерно так:
А вот для загрузки файла preseed с локального установочного носителя необходимо, во-первых, чтобы он там присутствовал. Во-вторых, нужно опять же указать путь к файлу. И если второе проще простого — для этого используем опцию file=/cdrom/seed/oem.seed в случае установки с CD или file=/media-hd/preseed.cfg в случае установки с флеш-накопителя, — то первое требует более подробного описания. Расскажу, как подготовить ISO-образ с файлом автоматической установки.
Для того чтобы это сделать, нужно перепаковать уже готовый ISO-образ.
Ну а теперь самое время перейти к описанию файла preseed.cfg .
preseed.cfg — структура и пример
Технология preseed основана на debconf — то есть фактически можно управлять не только процессом установки, но и некоторыми другими вещами. Каждая инструкция preseed вмещается, как правило, в одну строку и состоит обычно из четырех частей, разделенных пробелами: владельца параметра, его имени, типа параметра и его значения. В большинстве случаев в первой части будет стоять d-i, то есть debian installer. А вот вторая часть, собственно, и является, в терминологии debconf, «вопросом», на который в четвертой части задается ответ. Третья же часть инструкции указывает тип вопроса/ответа:
- string — самый распространенный тип вопроса; строка, содержащая (относительно) произвольные данные;
- boolean — ответ может быть либо true, либо false;
- select и multiselect — поскольку вопросы фактически те же самые, что задает программа установки, то среди них могут быть вопросы на выбор одного или нескольких вариантов. Ответ в случае multiselect разделяется запятой и пробелом;
- password — используется для паролей;
- note — предупреждение пользователя. Установщик иногда выводит информационные сообщения данного типа. В общем-то, это некритичные предупреждения, но если их проигнорировать в файле ответов, то на них придется отвечать ручками. В данном типе параметра ответа не предусмотрено.
Необходимо учесть также, что стандартный live-дистрибутив для создания своего образа не подходит, поскольку в нем запускается графический установщик ubiquity, а нам необходим Debian Installer. Для этой цели необходимо использовать ISO-образ с постфиксом alternate. Я использовал Xubuntu 12.04.3.
Переупаковываем содержимое ISO-образа
Далее будет приведен урезанный пример файла preseed.cfg с комментариями (файл должен быть в кодировке UTF-8):
Для проверки соответствия формату можно использовать команду
Чтобы установка была полностью автоматической, необходимо также задать некоторые параметры загрузки — поскольку не все параметры debconf могут быть прочтены установщиком из preseed-файла на ранних стадиях загрузки. Параметры могут дублировать аналогичные строки в файле preseed. Для этого необходимо в распакованном ISO-образе отредактировать файл isolinux/txt.cfg , добавив в него новый пункт меню. У меня получилось примерно следующее:
В случае если тебе нужна полностью автоматическая загрузка, измени default install на default oem-install.
Запаковываем образ и, по необходимости записав его на диск, загружаемся с него.
Конфиг isolinux для preseed-установки Ubuntu
Обновление Debian до новой версии с помощью preseed
Существует возможность обновить свежеустановленный дистрибутив со старой ветки до новой, используя firstboot-скрипт. Для этого необходимо иметь, во-первых, в локальной сети веб-сервер, с которого скрипты будут загружаться, а во-вторых, сами скрипты и немного подправленный файл preseed. В последнем необходима примерно такая строка:
Скрипт же postinstall содержит следующее:
А вот, собственно, и сам скрипт firstboot — в него можно записать что угодно, но ниже будет рассмотрен только скрипт обновления до Wheezy.
Preseed и виртуальные машины
Можно установить Debian с помощью virt-install, при этом полностью автоматически:
Данная команда, хоть и выглядит устрашающе, делает следующее: грузит инсталлятор, инжектит файл preseed.cfg (он должен называться именно так) в initrd и передает аргумент auto инсталлятору. Остальные опции в описании не нуждаются.
К слову, можно легко клонировать уже существующую ВМ KVM, используя следующую команду:
Она создает точный клон (за исключением MAC-адреса) машины vm1, именует ее vm2 и копирует образ диска. Замечу, что, во-первых, гостевая система должна быть остановлена, а во-вторых (и это крайне важно!), на гостевой системе нужно перегенерировать SSH-ключи.
Развертывание SUSE Linux Enterprise
Как корпоративный дистрибутив, SUSE также поддерживает автоматическое развертывание. Кратко опишу процесс.
В самом простом случае нужно создать профиль autoyast и при загрузке с помощью PXE указать в файле MARKDOWN_HASHf16a93e4b496631740212f97e1926536MARKDOWN_HASH примерно следующее:
В более сложных случаях, например для развертывания в гетерогенной сети, нужно создать файл правил MARKDOWN_HASHdf8349fb8855426b967bf1c00a5dbf80MARKDOWN_HASH с описанием условий выбора профиля. Файл этот позволяет очень гибко конфигурировать те или иные условия, но именно эта гибкость и делает развертывание SUSE достаточно сложным.
UDPCast — рассылаем файлы по сети
Утилита UDPCast предназначена для одновременной рассылки файлов в локальной сети, для чего используется multicast-рассылка. Эта утилита может быть использована для клонирования систем. Вкратце опишу основные шаги для клонирования:
- На один компьютер устанавливаем ОС, которая затем будет клонирована.
- Подготавливаем флешку с UDPCast.
- Все компьютеры — и клонируемый, и чистые — подключаем к сети. Рекомендуется использовать DHCP.
- Загружаем клонируемый компьютер с флешки. При этом выбираем клонируемое устройство, а UDPCast переводим в режим передатчика (sender).
- С этой же флешки загружаются все остальные машины, но вместо режима передатчика нужно выбрать режим приемника (receiver) — при этом на экране машины-передатчика видно, как к ней подключаются приемники.
- После загрузки всех приемников для запуска процесса клонирования нужно нажать пробел на передатчике.
Заключение
В статье были рассмотрены два средства развертывания дистрибутивов Linux. Оба этих инструмента позволяют гибко настраивать итоговую систему, оба практически полностью автоматизируют процесс. Выбор за тобой.