Разворачиваем рабочий образ linux с минимальным интерактивом
Эта публикация может быть интересна тем ленивым системным администраторам, которые используют что-то из нижеперечисленнго:
- Linux — based систему на машинах-клиентах;
- Тонкие/толстые однотипные клиенты на различном железе;
- Сетевое хранилище клиентских данных;
- Предустановленный регламентированный софт;
- Openvpn/rdp к серверам приложений.
- Плюшевый (мягкий и пушистый) мониторинг linux клиентов типа Nagios.
Речь пойдет о том, как с минимальными усилиями со стороны пользователя или штатного «эникейщика» установить на компьютер пользователя готовую систему с набором софта, настроенными сетевыми службами, предопределенными конфигами и т.д. Статья ориентирована в первую очередь на энтузиастов и начинающих линуксоидов, но приемы и скрипты вполне могут использоваться в боевом развёртывании группы из десятков машин ежедневно.
Для начала определимся с дистрибутивом. Это, конечно, зависит прежде всего от задач. Я выбрал xubuntu 14.04 по трем простым причинам:
1. ubuntu — deb based система с широчайшей поддержкой и огромным количеством форумов;
2. xubuntu — легковесный вариант без рюшек и понтов, который не тормозит на машинах от 512Мб ОЗУ (есть в моём парке и такие динозаврики);
3. 14.04 — это LTS (Long Term Support) вариант c поддержкой до 2019 года.
Есть, конечно, варианты быстрее и поменьше, но по ряду тех или иных причин выбор был сделан и сожалений на протяжении года с небольшим не вызывает.
Забегая вперед, отмечу: чтобы повторить описанное потребуется настроенный vpn сервер или «конфиг-мониторинг-сервер» в локальной сети, пара виртуальных или реальных машин, пара часов свободного времени и внимание к деталям.
Итак, первое, подготовка образа. Все этапы важны, но первый — это фундамент. Устанавливаем систему с cd/dvd/usb/сети и выбираем разметку дисков. Важно понимать, что наш образ не будет поддерживать динамического ресайза ДО развёртывания. А после, скорее всего такой ресайз и не потребуется. Под корень имеет смысл отдать 6-10 Гб.
Больший объем оправдан в случае, когда заведомо известно, что а) диски на клиентских машинах не будут меньше этого объема и б) действительно будет установлено много разных нужных пакетов.
Разметим /home и, наконец, swap разделы. В совокупности все три раздела у автора не вылезают за 30Гб (чтобы спокойно разместиться на ssd 30 Gb, это минимальная конфигурация по диску для моих клиентов). В случае, если заранее известен минимальный объём диска — приемника, имеет смысл подгонять разделы под него. Своп рекомендую размечать сразу за корнем диска, /home сразу за свопом, чтобы в случае ресайза не «возить их по диску в консоли», а сделать изящно одной командой. Устанавливаем локаль, имя пользователя, пароль, hostname и заходим в новоиспеченный Linux. Для продолжения потребуются пакеты x11vnc, ssh, rsync, openvpn, mc (обожаю mcedit, он мне родной, как нортон из девяностых).
sudo apt-get install x11vnc ssh rsync openvpn mc ntp
В базу я на свой вкус добавил skype, icedove (thunderbird), iceweasel(firefox), chromium-browser, rdesktop калькулятор, монитор ресурсов, viber, libre office, wine и пару windows-приложений (гореть мне, конечно, за это в аду, но аналогов нет и не предвидится). Настраиваем медленно и неторопливо всё это дело. Проверяем, что всё запускается и работает.
Настраиваем vpn. У меня сеть распределенная, по два-три компьютера на одну геолокацию, больше 50 локаций по России, не наездишься. Создаем ssh-ключ к серверу и на сервере к клиенту (кому надо вводить эти пароли, подробности, к примеру, тут). На сервере создаем каталог безусловной синхронизации (для меня это рабочие скрипты, ключи openvpn, клиентский cron, служебные скрипты на python, бинарники С++). В рабочем примере это /var/sync/in, /var/sync/in/cron, /var/sync/out. В out будут логи и любая нужная нам информация с клиентов: скриншоты, отчеты по процессам, итд. В in как раз и будут скрипты синхронизации, задания cron, скрипты хартбитов для мониторинга, многочисленные конфиги системных служб (того же cups или openvpn).
Подготовка всего этого дела к тиражированию займет не многим больше времени, чем установка системы одному пользователю, но тщательная проработка деталей может существенно уменьшить время, которое админ в будущем потратит на скрипты «допиливающие» все образы в бою. Настроим openvpn на клиенте и убедимся, что пользовательский ключ[и] работа[ею]т. Не лишним будет и настроить grub2.
- Хинт1: Хорошо, когда хостнейм, ip в openvpn и сертификат юзера содержат свой уникальный id, к примеру user10.key, x.y.z.10 и vladivostok_10 в качестве хостнейма;
- Хинт2: Хорошо, когда копии этих файлов лежат под рукой, скажем /var/sync/hostname, /var/sync/id, /var/sync/location;
- Хинт3: Зарезервировать 5-10 адресов под незарегистрированных пользователей тоже будет полезным.
Файлы из Хинт2 мы создавать не будем сознательно, по их отсутствию будет понятно, когда «новенькие» подключатся к нашему vpn.
Итак, всё шуршит, офис работает, калькулятор запускается, для rdp с сервером приложений уже есть ярлычок на рабочем столе.
Пришло время делать образ.
Разрешу себе отвлечься. Способов сделать образ с готовой системой под тираж я перепробовал немало. Данная статья не претендует на звание лучшего способа, скажу лишь, что способ лучший для меня и очень кратко прокомментирую другие способы и их минусы.
Clonezilla — отличная вещь, но в интерактивном режиме вводит в ступор любого эникейщика за триста миль от админа.
dd if=/dev/sda of=img.img — волшебная вещь, но вместе с данными мы получим мусор с пустой части диска, объём и скорость метода ужасают.
Norton ghost — не поддерживает ext4.
Partition copy из gparted — классная вещь, но, увы, тоже не для начинающих.
Я долго спрашивал себя, каким я вижу идеальное развертывание. Тут мы подходим к теме статьи, от которой уже порядком отвлеклись.
- Образ должен помещаться на небольшой (в моем случае 2Гб) флешке;
- Образ должен ставиться нажатием одной-двух кнопок;
- После развертывания образ сам должен синхронизироваться и «докладывать» админу, что новая машина «в строю»;
- Регистрация новой машины не должна занимать много времени;
- (Важно!) Образ скорее всего будет записан на флешку из-под windows непрофессионалом по инструкции;
- (АрхиВажно!) Образ скорее всего будет развиваться версионно, и его нужно периодически доделывать и быстро распространять.
Пришлось изобретать маленький велосипед, а точнее — писать разворачивающий скрипт. Для вышеупомянутых задач был выбран дистрибутив PartedMagic. Для заворачивания образа потребуется unetbootin+partedmagic или любой live-cd(usb) с линуксом и tar+b[g]zip на борту. Будем считать, что образ мы загрузили PartedMagic «run from ram» и флешка монтирована в /media/sdb1 (FAT32).
Пара напоминалок про fat/ntfs на флешках
- Ахтунг1 Напоминаю, раздел файла в fat32 не должен быть более 4Гб, следите за объёмом образа или выбирайте ext4 раздел.
- Ахтунг2 NTFS раздел флешки под linux хоть и работает, но забирает огромное кол-во процессорного времени.
После загрузки монтируем наш диск (скорее всего /dev/sda1) и жмём прямо с него всю нашу систему, не забываем и про /home раздел:
mount /dev/sda1 /media/sda1
Затем сделаем архив со всем содержимым нашего диска:
tar -czvpf /media/sdb1/image.tgz /media/sda1
Тоже самое и для /home раздела:
mount /dev/sda5 /media/sda5
tar -czvpf /media/sdb1/home.tgz /media/sda5
Затем дампим таблицу разделов в файл на нашу суперфлешку:
sfdisk /dev/sda1 -d >parts.txt
Таким образом, на флешке у нас появятся архивы и файл с таблицей разделов эталонного образа.
Ну и на сладкое. Ниже скрипт c говорящим названием, который собирался по частям с разных уголков интернета буквально по строчке.
Комментарии автора прямо в тексте скрипта. Ничего сверхъестественного, просто как на уроке информатики, однако отлаживался с кровавыми слезами, разок даже убил домашнюю систему флешкой с этим скриптом. Не рекомендую оставлять как есть, т.к. это его безусловная неинтерактивная версия.
cat /pmagic/pmodules/scripts/kill_your_hdd_data.sh (путь для автозагрузочного скрипта в PartedMagic)
!
dd if=/dev/zero of=/dev/sda bs=512 count=1
sleep 1s
sfdisk /dev/sda < /media/sdb1/parts.txt
sleep 1s
mkfs.ext4 -L "" /dev/sda1 -F
sleep 1s
mkdir /media/sda1
fsck.ext4 /dev/sda1
sleep 5s
mount /dev/sda1 /media/sda1
sleep 1s
mkdir /media/sda1/tmp
tar -xzvpf /media/sdb1/image.tgz -C /
sleep 5s
echo "This script damn work!"
mount --bind /dev /media/sda1/dev
mount --bind /sys /media/sda1/sys
mount --bind /proc /media/sda1/proc
chroot /media/sda1/ /bin/bash -c 'grub-install /dev/sda'
chroot /media/sda1/ /bin/bash -c 'update-grub2'
sleep 5s
umount /dev/sda1
umount /dev/sdb1
echo 'done, remove media, system will reboot in 30s'
sleep 30s
reboot
exit 0
Вместо эпилога:
Lанный метод используется в Urban Software для заливки информационных сенсорных киосков c веб-приложениями под управлением linux. Чаще всего это бесклавиатурные машины, которые разворачиваются десятками вдали от цивилизации нашей техподдержки, поэтому важно изначально не создать проблем при их мониторинге и вводе в работу.
P.S. Статья получилась большая. О том, как «встречать» только что развернутые компьютеры, управлять удаленным cron, синхронизировать скрипты и получать хартбиты мониторинга, будет написана вторая часть, если, конечно, первая когда-нибудь вылезет из песочницы.
http://habrahabr.ru/post/253193/
|