четверг, 10 октября 2013 г.

Клонируем пингвинов или как быстро сделать много одинаковых рабочих окружений с синхронизацией.


У меня задача была такой: есть несколько школьников(до 10 человек) со своими ноутбуками. На них винда разных версий и степени рабочести. Хотелось как-то задешево сделать им всем одинаковое рабочее окружение на их компьютерах, ничего им не сломав. И совсем хорошо потом иметь между этими окружениями какую-то синхронизацию. Решал я это так:
Вообще ничего сверъестественного я не делал, пост больше как подтверждение возможности реализации такой идеи.
А что делал-то:
1. Купил флешки kingston на 8GB.
2. Поставил на одну из них Xubuntu через VirtualBox(можно и обычным методом, но это нужно выключать компьютер и внимательно выбирать диск при разметке. Установка через VB таких проблем лишена)
3. Загрузился снова через VirtualBox, поставил обновления и нужный софт, настроил синхронизацию.
4. С помощью dd клонировал эту флешку на все остальные.
Собственно всё. Теперь немного подробнее.

Вот флешки:


Для теста взял 4 штуки, если проблем не выявится, докуплю еще.

Ставим линукс.

Качаем образ нужного линукса:
wget http://mirror.yandex.ru/ubuntu-cdimage/xubuntu/releases/12.04.3/release/xubuntu-12.04.3-desktop-i386.iso
Создаём виртуальную машину
Подключаем флешку.
Немного отмечу процесс разбивки диска. Сейчас в компьютерах относительно много ОЗУ(от 1ГБ), и восьмигиговая флешка по сравнению с этим не такая большая. Поэтому я предпочитаю отдавать всё под / и не делать swap. Если так почему-то вообще нельзя делать никогда, расскажите мне почему.

Включаем и настраиваем.

Поставился, теперь попробуем в него загрузиться. По умолчанию VirtualBox так не умеет, но несложно его научить. Хотя официальный представить Oracle и уверяет, что это невозможно. Нужно добавить своего пользователя в группу disk
usermod -aG disk triklozoid
После этого перелогиниться и выполнить такую команду:
sudo VBoxManage internalcommands createrawvmdk -filename ~/temp/usbdisk.vmdk -rawdisk /dev/sdb
где
~/temp/usbdisk.vmdk это где создать файла диска
а
/dev/sdb устройство вашей флешки
В настойках виртуальной машины добавляем диск:
На этом этапе могут появиться какие-нибудь ошибки доступа, нужно проверять права на свежесозданный файл ~/temp/usbdisk.vmdk
Теперь включаем машину, она должна нормально загрузиться с флешки.
Делаем sudo apt-get update && sudo apt-get upgrade(yum, pacman, emerge или что там у вас).
Устанавливаем нужные приложения, настраиваем что нужно.

Про синхронизацию

Для синхронизации я использовал клиент Яндекс.Диска под линукс.
Качаем cтавим настраиваем по официальным докам.
Я использовал такую схему: Зарегистрировал один новый аккаунт на яндексе. Сделал папку у себя и дал доступ на чтение новому аккаунту. И авторизовался в линукс клиенте новым аккаунтом.
Можно конечно как-то усложнить схему и сделать на каждой флешке отдельный аккаунт, но мне лень. :-)

Клонирование.

После того, как настройка всего закончена, можно приступить к магии dd.
Хотя команда очень простая, совсем не магическая, если кто знает магические ключи, которые улучшают всё в миллион раз, делитесь.
КОМАНДУ ЗАПУСКАТЬ АККУРАТНО, С УСТРОЙСТВАМИ НЕ ОШИБАТЬСЯ
А то всё потрёте нафиг.
dd if=/dev/sdb of=/dev/sdc bs=16M
if - откуда
of - куда
bs - размер блока

Конец

Собственно на этом всё, всё работает, можно пробовать. Работает достаточно шустро(особенно питоновая консоль :-)), проблем с железом пока не было. Кроме синхронизации папки с файлами, хотелось бы конечно и набор пакетов тоже синхронизировать, например, через puppet, но на первое время хватит и такого.

3 комментария:

Murz комментирует...

А можно попопробнее про синхронизацию, что именно синхронизируется и как?
Просто меня очень волнует вопрос что будет если один и тот же файл изменился сразу на двух компах, как тогда пойдет синхронизация?
А ведь если сихронизировать папку home, то там есть файлы которые меняются постоянно, например кеш браузера, файлы с базой писем thunderbird, kwallet и т.п. Потерять или рассинхронизить синхронизацию как-то не очень хочется.

То же и с системными файлами...

Как решение можно конечно синхронизировать отдельную общую папку, но тогда теряется преимущество в синхронизации настроек интерфейса и программ ;(

Ну либо не включать одновременно более чем один компьютер из связки ;)

ЗЫ: Для синхронизации можно ещё использовать btsync - она не привязана к серверу и работает пошустрее.

triklozoid комментирует...

Не-не, синхронизируется общая папка. С home мне кажется будет сложнее, да и это не особенно нужно. Предполагается, что флешки я раздам, и каждый сможет подкрутить свою среду под себя.
Смысл в том, чтобы сэкономить время на начальном этапе и у всех была хотя бы одинаковая версия питона.

btsync всё никак не соберусь попробовать, уже много про него слышал и читал.
А там можно делать RO папки, чтобы я туда мог добавлять файл, а никто не мог его изменить?

Anton Yakutovich комментирует...

Согласен с Murz. btsync просто напрашивается в эту схему. Единственное, у него синхронизация не всегда мгновенно происходит.
Read-only поддерживает.