Устанавливаем Linux и BSD удаленно

Мы все привыкли думать, что для установки новой ОС на машину требуются как минимум две составляющие: сама машина и физический носитель, на котором записан инсталлятор операционной системы. К счастью, это не всегда так. В тех ситуациях, когда физический доступ к компу невозможен, вполне можно обойтись и без второго компонента.

Традиционно, для установки операционной системы на комп принято использовать специальные установочные диски или другие носители, которые умеют самостоятельно загружаться и передавать управление записанному на них установщику. Это простой, удобный и эффективный способ водрузить ОС на машину, однако он применим далеко не всегда. Иногда мы оказываемся в такой ситуации, когда физический доступ к машине просто невозможен. Это может быть удаленный сервер, машина друга, живущего в другом городе, или что угодно еще. Главное в такой ситуации то, что подопытный комп доступен только по сети, и на нем обычно уже установлена какая-то операционка (например, Windows). А вопрос заключается в том, как заменить ее на нечто другое (например, Linux), причем сделать это без участия третьих лиц.

Области применения OCS Inventory NG: 

  • Инвентаризация оборудования;
  • Инвентаризация программного обеспечения;
  • Проведение анализа активов;
  • Обеспечение централизованного распространения ПО;
  • Управление обновлениями ПО;
  • Управление конфигурацией рабочих мест.

Архитектура системы

Хитрые трюки

Самый простой вариант установить ОС без использования физического носителя – воспользоваться возможностями виртуальной машины. Практически любая из них позволяет подсунуть в качестве виртуального настоящий жесткий диск, тем самым открывая поистине безграничные возможности для экспериментов. Это абсолютно безопасный и проверенный временем прием, который мы во всех подробностях рассмотрим позднее. Более предпочтительный сценарий – использовать инструменты быстрой установки Linux, которые предоставляют возможность инсталлировать пингвина прямо из Windows без какого-либо вмешательства со стороны пользователя. Наиболее известный из таких инструментов носит имя UNetbootin (unetbootin.sourceforge.net) и первоначально разработан для создания загружаемых USB-флешек с пингвином на борту, но позднее научился устанавливать полноценные дистрибутивы прямо на жесткий диск. Подобные утилиты есть в арсенале таких дистрибутивов, как Ubuntu (www.ubuntu.com/desktop/get-ubuntu/windows-installer) и OpenSUSE (en.opensuse.org/Instlux), но до возможностей UNetbootin им далеко (последний умеет ставить несколько вариантов Linux, BSD, легко поддается настройке и может работать в Linux). Те, кто любят все делать руками, могут воспользоваться grub4dos и ISO-образами соответствующих дистрибутивов. Этот вариант мы тоже рассмотрим.

Еще проще все это проделать в том случае, когда на машине уже установлена UNIX-подобная ОСь, а задача состоит в том, чтобы заменить ее другим представителем семейства UNIX (например, установить BSD или другой Linux-дистрибутив). Для этого подойдет все тот же UNetbootin, либо вариант с загрузкой ISO-образа или минимального образа initrd-средствами Grub (его можно установить из портов BSD).

От Windows к Linux. Виртуальная машина

Как я уже упоминал, самый простой и очевидный способ удаленной установки ОС заключается в использовании виртуальной машины. Он сработает в любой ОС, где может быть запущена ВМ, поэтому даже если на удаленной стороне стоит Solaris или еще большая экзотика, выход есть.

В своей работе мы будем использовать прекрасную ВМ VirtualBox, которую можно абсолютно бесплатно скачать из Сети (www.virtualbox.org). Нас интересует версия для Windows, поэтому файлом для скачивания будет VirtualBox-3.2.10-66523-Win.exe.
Сразу после установки запускать виртуальную машину не нужно, сначала следует подготовить псевдо-образ жесткого диска, который будет ссылаться на настоящий диск. Сделать это можно только с помощью консольных утилит, поэтому открываем командую строку и пишем:

Образ realhd.vmdk, расположенный в корне диска C:, будет ссылаться на физический диск (\\.\PhysicalDrive0 в нотации Windows), опция ‘-register’ позволяет сразу добавить его в «Менеджер виртуальных носителей» VirtualBox. Забегая вперед, скажу, что то же самое в Linux можно проделать с помощью похожей команды:

Теперь можно скачать ISO-образ устанавливаемого Linux-дистрибутива и выделить для него место на диске. Сделать это можно, уменьшив размер NTFS-раздела с помощью Partition Magic в WinXP/Win2k3 или оснастки diskmgmt.msc в Vista/Seven. После этого запускаем VirtualBox и создаем новую виртуальную машину, указав подготовленный ранее образ в качестве первого жесткого диска. Далее открываем свойства виртуальной машины, вкладку «Носители», и указываем в качестве CD-ROM реальный привод компа. Запускаем ВМ и благополучно устанавливаем Linux в свободную область диска.

Предупрежу, что сразу перезагружать реальную машину не стоит, иначе мы потеряем к ней сетевой доступ (сеть будет либо вообще не настроена, либо настроена на подключение к виртуальной сети VirtualBox). Сначала необходимо загрузить дистрибутив в виртуальной машине и настроить сеть так, чтобы она была работоспособна после загрузки ОС на реальном железе (то есть скопировать сетевые настройки из работающей в данный момент ОС). Делать это нужно с предельной осторожностью, потому как одна ошибка навсегда отрежет машину от интернета. Большим плюсом будет работающий в локальной сети DHCP-сервер, раздающий настройки для подключения к интернету, в этом случае ничего настраивать не придется и достаточно будет установить SSH-сервер и завести пользователя, с правами которого мы сможем попасть на машину (впрочем, последние две вещи придется сделать в любом случае). Когда все это будет выполнено, машину можно перезагрузить и минут через пять попытаться подключиться к ней по SSH.

От Windows к Linux. UNetbootin

UNetbootin (Universal Netboot Installer) – это графическая программа, предназначенная для создания загружаемых USB-носителей с UNIX-подобными ОС на борту или же установки UNIX на жесткий диск без использования физических носителей. Она может работать как в Windows, так и в Linux, поддерживает несколько десятков различных ОС (дистрибутивы Linux и ОС семейства BSD) и невероятно проста в использовании. Далее мы рассмотрим, как с ее помощью установить Ubuntu.

Для начала необходимо получить саму утилиту. Заходим на страницу unetbootin.sf.net и нажимаем большую синюю кнопку с надписью «Download» («for Windows» или «for Linux»). Запускаем полученный файл (в случае с Linux-версией его сначала необходимо сделать исполняемым). Появится окно UNetbootin, в котором можно выбрать дистрибутив, его версию, тип установки (NetInstall для сетевой установки или HdMedia для установки с заранее подготовленного образа), в самом нижнем поле можно выбрать тип установки, в нашем случае – «Жесткий диск», нажать кнопку ОК и перезагрузить комп.

В обычной ситуации всего этого достаточно для того, чтобы UNetbootin смог установить на диск загрузчик и минимальный Linux-образ, который скачает установочные файлы ОС на диск и запустит инсталлятор. Однако мы имеем дело с удаленной машиной и поэтому не сможем получить доступ к ОС до того момента, пока она не будет полностью установлена (не сможем отвечать на вопросы инсталлятора). Все это приведет к тому, что после перезагрузки машина окажется застопоренной на первом же вопросе.

Чтобы побороть проблему, нам придется создать собственный установочный ISO-образ Ubuntu, который сможет произвести инсталляцию ОС в полностью автоматическом режиме. Для этого нам потребуется образ серверной версии Ubuntu-10.10 (десктопный вариант не поддерживает автоматизацию установки), немного смекалки и файл дефолтовых ответов на вопросы инсталлятора (так называемый preseed-файл). Инструкция:

1. Скачиваем установочный образ Ubuntu 10.10 и распаковываем его в отдельный каталог:

2. Добавляем в образ preseed-файл (пример можно взять на прилагаемом к журналу диске):

В файле прописаны ответы на вопросы инсталлятора, по умолчанию будет выбран русский язык и раскладка us, в качестве места дислокации новой ОС на диске будет выбрана максимальная неразмеченная область, дополнительно будет установлен пакет openssh-server и добавлен пользователь user с паролем resu, так что после загрузки на машину можно будет войти по SSH.
Если для подключения машины к сети используется ручная настройка (а не DHCP), то строку

следует заменить на пять следующих строк, подставив реальные адреса:

3. Редактируем конфиг загрузчика так, чтобы он узнал о существовании нашего preseed-файла:

4. Удаляем старый файл контрольных сумм и создаем новый:

5. Генерируем новый ISO-образ:

Закачиваем получившийся ISO-образ на удаленную машину, запускаем UNetbootin, выбираем пункт «Образ диска», далее – «ISO-образ», находим образ на диске и нажимаем кнопку ОК. После завершения работы UNetbootin заходим в свойства «Моего компьютера», открываем вкладку «Дополнительно», нажимаем кнопку «Параметры» в разделе «Загрузка и восстановление» и выбираем «UNetbootin» в поле «Операционная система, загружаемая по умолчанию». Это позволит машине автоматически загрузить ISO-образ, установленный с помощью UNetbootin. Перезагружаем машину. Через 30 минут пробуем подключиться к серверу, молясь всем богам автоматизации.

Примерно также можно установить Debian, но с другими дистрибутивами все будет иначе. Многие из них вообще не поддерживают автоматизацию процесса установки, другие используют совсем другой ее вариант (например, Kickstart в RedHat).

От Windows к Linux. Grub4dos

Людей с пытливым умом наверняка интересует механизм работы UNetbootin. В этом разделе речь пойдет о том, как вручную сделать то же, о чем мы говорили выше. В качестве основного инструмента будет выступать Grub4dos – вариант Grub, способный грузиться с FAT32 и NTFS-разделов, все тот же переработанный образ Ubuntu и гвоздь программы – WinXP.

Главная задача – установить Grub4dos на системный диск Windows и сделать так, чтобы мы смогли получить к нему доступ. Для этого идем по ссылке sourceforge.net/projects/grub4dos/files/, скачиваем последнюю версию Grub4dos и распаковываем файлы grldr и menu.lst в корень диска C:. Далее снимаем с файла c:/boot.ini атрибут «Только для чтения» и добавляем в конец секции [boot loader] следующую строку:

И эту строку последней:

Сохраняем файл. Открываем c:/menu.lst и пишем в него следующее:

Сохраняем. Помещаем ISO-образ в корень диска C:, перезагружаем ОСь, ждем 30 минут, подключаемся по SSH с именем пользователя «user» и паролем «resu».

От Linux к FreeBSD. Путь джедая

Последний из вариантов удаленной установки ОС не так тривиален, как предыдущие. Мы будем устанавливать FreeBSD на машину, работающую под управлением Linux, причем сделаем это так, что свежеустановленная ОС полностью затрет существующую. Для тех, кого интересует, зачем это нужно, отвечу: многие хостинги сдают в аренду серверы только под управлением Linux, не предоставляя доступа к удаленной консоли и таким образом лишая пользователей выбора. Описанная в статье методика позволит поставить на сервер FreeBSD, имея доступ только по SSH.

Проделать это можно с помощью инструмента под названием mfsBSD (mfsbsd.vx.sk), который позволяет создать минимальный дисковый образ FreeBSD, полностью загружаемый в память. Записав этот образ в начало жесткого диска и перезагрузив машину, мы получим сетевой доступ к полностью рабочей минимальной копии FreeBSD, которую сможем использовать для последующей установки полноценной ОС с помощью стандартного инсталлятора sysinstall. Порядок действий следующий:

1. Скачиваем архив mfsBSD на локальную машину и распаковываем его:

2. Создаем конфигурационный файл rc.conf, который будет использоваться в образе:

Добавляем в конец файла следующие строки:

Здесь re0 используется в качестве примера. В реальной ситуации ты должен узнать, какая сетевая карта установлена на машине (dmesg в помощь), и подобрать к ней соответствующее имя сетевого интерфейса (которое по совместительству является именем драйвера, например, re0 – это сетевая карта RealTek 8139C, драйвер для которой носит имя «re»). Также следует отметить, что если машина получает сетевые настройки по DHCP, то последняя строка должна иметь следующий вид:

3. Создаем мини-образ из установочного ISO-образа FreeBSD (можно скачать с ftp://ftp.freebsd.org, либо ближайшего зеркала):

4. Перекидываем полученный образ на удаленную машину:

5. Заходим на удаленную машину с правами root’а, записываем образ на диск и идем на перезагрузку:

Через пять минут вновь подключаемся к удаленной машине в качестве root’а, вводим пароль mfsroot, запускаем sysinstall и приступаем к обычной установке FreeBSD. В качестве источника установки выбираем FTP или HTTP. Преимущество способа в том, что существующую ОС можно спокойно затереть во время установки новой (хотя это все равно придется сделать, так как мы затерли таблицу разделов), ни один из описанных выше способов не позволяет проделать такое.

 

Заключение

Как видишь, такая, казалось бы, нетривиальная задача, как удаленная установка ОС, на самом деле достаточно проста и может быть выполнена множеством разных способов, начиная с использования виртуальной машины и заканчивая созданием загружаемых в память дисковых образов. Более того, автор совсем не удивится, узнав, что кто-то придумал еще десяток других способов.

 

От FreeBSD к Linux. Путь наименьшего сопротивления

Чтобы установить Linux на FreeBSD-машину, достаточно создать автоустанавливаемый образ Ubuntu, как это было описано в разделе про UNetbootin, затем установить grub, как показано ниже:

И записать следующие строки в menu.lst:

После этого можно перезагружаться.

 

Установка Grub4dos в Vista/Seven

1. В корень диска C: помещаем файлы grldr, grldr.mbr и menu.lst;

2. Добавляем запись в загрузчик Windows:

3. Редактируем запись (ID берем из вывода предыдущей команды):

INFO

В Linux вместо VirtualBox гораздо удобнее использовать qemu:

WARNING

Настоятельно рекомендую тестировать все описанные в статье методы на виртуальной машине перед применением на машине реальной.