Розгортання різних дистрибутивів 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:

  • тип інсталяції: встановлення або оновлення;
  • вибір мови та розкладки клавіатури;
  • автентифікація;
  • конфігурація завантажувача;
  • розбиття на розділи;
  • набори пакетів;
  • постінсталяційні дії.

linux
Графічна утиліта для створення файлів 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-образу

Для перевірки відповідності формату можна використовувати команду

Щоб установка була повністю автоматичною, необхідно також задати деякі параметри завантаження - оскільки не всі параметри debconf можуть бути прочитані інсталятором з файлу preseed на ранніх стадіях завантаження. Параметри можуть дублювати аналогічні рядки у файлі preseed. Для цього необхідно в розпакованому образі ISO відредагувати файл isolinux/txt.cfg , додавши до нього новий пункт меню. У мене вийшло приблизно таке:

Якщо тобі потрібна повністю автоматичне завантаження, зміни default install на default oem-install.

Запаковуємо образ і за необхідності записавши його на диск, завантажуємося з нього.

linux
Конфіг isolinux для preseed-установки Ubuntu

Оновлення Debian до нової версії за допомогою preseed

Існує можливість оновити новий дистрибутив зі старої гілки до нової, використовуючи firstboot-скрипт. Для цього необхідно мати, по-перше, у локальній мережі веб-сервер, з якого скрипти завантажуватимуться, а по-друге, самі скрипти і трохипідправлений файл preseed. В останньому необхідний приблизно такий рядок:

Скрипт postinstall містить наступне:

А ось, власне, і сам скрипт firstboot - в нього можна записати будь-що, але нижче буде розглянуто тільки скрипт оновлення до Wheezy.

Preseed та віртуальні машини

Можна встановити Debian за допомогою virt-install, повністю автоматично:

Ця команда, хоч і виглядає жахливо, робить наступне: вантажить інсталятор, інжектить файл preseed.cfg (він повинен називатися саме так) в initrd і передає аргумент auto інсталятору. Інші опції опису не потребують.

До речі, можна легко клонувати вже існуючу ВМ KVM, використовуючи таку команду:

Розгортання SUSE Linux Enterprise

Як корпоративний дистрибутив SUSE також підтримує автоматичне розгортання. Стисло опишу процес.

У найпростішому випадку потрібно створити профіль autoyast і при завантаженні за допомогою PXE вказати у файлі MARKDOWN_HASHf16a93e4b496631740212f97e1926536MARKDOWN_HASH приблизно таке:

У більш складних випадках, наприклад, для розгортання в гетерогенній мережі, потрібно створити файл правил MARKDOWN_HASHdf8349fb8855426b967bf1c00a5dbf80MARKDOWN_HASH з описом умов вибору профілю. Файл цей дозволяє дуже гнучко конфігурувати ті чи інші умови, але саме ця гнучкість робить розгортання SUSE досить складним.

UDPCast - розсилаємо файли по мережі

  • На один комп'ютер встановлюємо ОС, яку потім буде клоновано.
  • Готуємо флешку з UDPCast.
  • Усі комп'ютери – і клонований, і чисті – підключаємо до мережі. Рекомендовано використовувати DHCP.
  • Завантажуємо клонований комп'ютер із флешки. При цьому вибираємо пристрій, що клонується, а UDPCastПереводимо в режим передавача (sender).
  • З цієї ж флешки завантажуються всі інші машини, але замість режиму передавача потрібно вибрати режим приймача (receiver) - при цьому на екрані передавача видно, як до неї підключаються приймачі.
  • Після завантаження всіх приймачів для запуску процесу клонування потрібно натиснути пропуск на передавачі.

Висновок

У статті було розглянуто два засоби розгортання дистрибутивів Linux. Обидва ці інструменти дозволяють гнучко налаштовувати підсумкову систему, обидва практично повністю автоматизують процес. Вибір за тобою.