Инсталляция Linux по сети с Windows-машины. Грабли и сложности

Немножко философских размышлений

Понятие "инсталляционный диск" постепенно уходит в прошлое. Действительно, зачем нужен инсталляционный диск, если есть скоростной безлимитный Интернет, позволяющий, не сходя с места, скачать самую последнюю версию программы и тут же ее установить? А поскольку скоростной Интернет потихоньку становится явлением уже почти повсеместным, то и онлайн-дистрибутивы набирают все бо́льшую и бо́льшую популярность, вытесняя диски в коробочках.

Немножко особняком здесь стоят операционные системы. Действительно, скачать и установить обычную программу несложно: компьютер с работающей операционной системой и сайт покажет, и инсталлятор скачает, и установит. Пользователю нужно только кнопочки Yes да Next нажимать время от времени. А вот как установить саму операционку, да еще и на чистый компьютер? Раньше без специальной загрузочной дискеты было не обойтись. Причем даже когда операционки стали распространяться на компакт-дисках, все равно нужна была работающая операционка, которая могла бы создать загрузочную дискетку с образа, расположенного на компакт-диске. Потом появились загрузочные компакт-диски, и процесс установки стал значительно легче: всунул диск, включил компьютер, инсталлятор сам запустился, нашел все диски, спросил, куда будем ставиться - и понеслась...

Но диски тоже потихоньку сходят с арены, уступая более компактным и надежным (а в последнее время еще и более объемным) USB-флешкам.
И хотя сейчас CD/DVD-привод пока еще есть практически в каждом компьютере, многие ноутбуки (а в особенности - нетбуки) уже жертвуют этой громоздкой железякой для экономии места. Действительно, а зачем он нужен, если все необходимое можно скачать через Интернет, в крайнем случае - передать через флешку?

Вопрос кажется риторическим - но ровно до тех пор, пока на такой ноутбук не потребуется поставить операционку. И первыми, надо полагать, с этой проблемой сталкиваются производители и продавцы - в самом деле, надо же как-то на продаваемые ноутбуки ставить предустановленную Windows операционную систему, и хотелось бы делать это с минимальными трудозатратами. Вот тут на помощь и приходит технология инсталляции по сети.

На самом деле, технология запуска рабочей станции по программе, загружаемой из локальной сети, не так уж и нова - ей уже лет тридцать, но до сих пор она использовалась преимущественно коммуникационными железками вроде маршрутизаторов или мини-АТС. Видимо, как раз нетбуки и стали тем спусковым крючком, который породил спрос на включение в материнские платы возможность установки операционной системы путем скачивания инсталлятора с сервера. А что - удобно: подключил к специальному загрузочному серверу несколько десятков ноутбуков (на сколько портов хватило), сервер раздал каждому по загрузчику, операционка сама поставилась, ноутбуки готовы к продаже, подключаем следующую партию. Вот оно, массовое производство.

Эволюция материнских плат

А раз уж такая функция появилась на ноутбучных материнках, то почему бы ей не появиться и на обычных - чипсеты-то везде одинаковые. Вообще, эволюция материнских плат - прелюбопытнейшая вещь. Первые материнки, которые я застал, без дополнительных устройств могли подключать разве что только клавиатуру и мышь. Даже жесткий диск к ним подключать напрямую было нельзя - нужно было ставить специальную плату с дисковыми контроллерами, называемую "мультипортовой платой". Но это было настолько давно, что неудивительно, что нынешний пятнадцатилетний мальчик, перерыв весь Интернет, так и не смог найти внятное объяснение, что же такое "мультяшка - байты растеряшка" - еще бы, явление прекратило существовать примерно в первый год его жизни, поскольку к этому времени практически все материнки содержали встроенный контроллер дисков.

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

И вот, современные материнки уже настолько умны, что они в момент включения могут сами отыскать в локальной сети сервер, который скажет им, что нужно запустить. Причем на компьютере может не быть ни одного диска - все необходимые инструкции и программы будут также получены по сети.

От теории к практике

Недавно мне довелось попробовать это все на личном опыте. Я устанавливал Debian Linux на свой домашний сервер. И, поскольку материнка поддерживает старт через сеть, я решил, что этим грех не воспользоваться. В теории все выглядит очень заманчиво: при включении компьютера крохотный инсталлятор скачивается с соседнего компьютера, после чего инсталлятор выходит в Интернет и скачивает последнюю-распоследнюю версию операционки (т.е. не надо никаких сервиспаков, обновлений, драйверов и прочей фигни). Пользователю остается только выбрать режим установки, указать, куда поставить систему, какие компоненты ставить - в общем, стандартный набор простейших действий.

В конечном итоге у меня все получилось, хотя грабли я собрал, кажется, все, какие только возможно - в процессе даже возникала крамольная мысль: "а не проще ли скачать образ DVD и поставить с него?". Но в итоге все трудности были успешно преодолены, а о встреченных граблях мне хотелось бы рассказать - вдруг кому будет полезно.

Итак, топология сети проста и незатейлива, как и в большинстве домов, где больше одного компьютера: роутер, раздающий интернет, к нему подключены два компа (мой и Юлькин), и туда же был воткнут сервер. Теперь задача: один из компов (очевидно, мой) должен стать устройством, с которого сервер получит инсталлятор Линукса.

Почитав мануалы, я узнал, что загрузка осуществляется по протоколу TFTP. TFTP - это упрощенный FTP, там нет авторизации и есть только две команды: get и put. Гугл мне подсказал, что в винде встроенного TFTP-сервера нет, но его можно установить в виде отдельной приблуды под названием Tftpd32. Скачал, установил. Убедился, что команда tftp localhost put aaa.txt действительно заливает файлик aaa.txt из текущего каталога в рабочий каталог Tftp32. "Полдела сделано", - подумал я оптимистично и распаковал в рабочий каталог файлы инсталлятора Debian.

А дальше началось самое веселое - нужно было как-то дать понять стартующему серверу, куда лезть за загрузчиком. Сначала я наивно подумал, что он сам просканирует сеть и найдет там TFTP-сервер. Надо ли говорить, что ничего подобного не случилось. Включившись, сервер некоторое время показывал мне вот такую надпись:

DHCP....(/)

после чего добавил:

PXE-E53: No boot filename received.

На этом загрузка по сети закончилась.

Ну, логично, подумал я. В настройках Tftp32 есть вкладка DHCP, и там есть поле Boot File - куда, очевидно, надо вписать pxelinux.0 (это имя загрузчика, я узнал об этом из мануала по установке Debian). Но вот что меня смущало: то, что это поле находится во вкладке DHCP означает, что Tftpd32 должен выступать еще и в роли DHCP-сервера? Так у меня уже есть один, на роутере, зачем мне еще один?

Но поскольку поле Boot File попросту не прописывалось без прочих настроек, очевидно было, что Tftpd32 все-таки придется сделать DHCP-сервером. Получается, "кто девушку ужинает, тот ее и танцует" - т.е. кто айпишник выдал, тот и инструкции по загрузке выдает, иначе никак.

Мне очень не хотелось отключать DHCP на роутере, поэтому я попробовал прямо так - а вдруг не подерутся? Но они, естественно, подрались. Ладно, выставил на всех компах статические адреса, отключил DHCP на роутере, попробовал заново. Включаю опять сервер - кажется, дело сдвинулось с мертвой точки. Tftp32 даже написал, что у него запросили файлик pxelinux.0, и показал прогресс-бар загрузки... который замер на нуле и больше не двигался.

Еще поползал по Интернету, покурил различные мануалы. Осознал, что старт происходит не просто по протоколу TFTP, а по некоей его модификации под названием PXE. Нашел в настройках Tftpd32 неприметную галочку PXE Compatibility. Поставил. Еще раз стартовал сервер. Опять ничего не грузится: No boot filename received.

Оказывается, Tftpd32 после каждого изменения настроек сбрасывает рабочий каталог на каталог по умолчанию (тот, куда он сам установился). Я выругался, вернул каталог на место и снова стартовал сервер. Помогло. Пискнув, сервер гордо отобразил экран инсталлятора Debian Linux.
Главный экран инсталлятора Debian Linux

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

Mirror does not support the specified release (squeeze)

Squeeze - это кодовое название версии Debian 6.0 - самой актуальной на данный момент. Ну не может такого быть, чтобы она нигде не поддерживалась! Более того, слазив по адресу ftp://ftp.us.debian.org/debian/dists/squeeze, я убедился, что этот каталог вполне себе существует и доступен. Явно это у меня где-то очередной косяк.

Самое странное, что в Интернете я не нашел четкого описания причин этой проблемы, но, чуть-чуть подумав, допер сам. Ошибка возникает при попытке инсталлятора исполнить команду wget -q http://ftp.uk.debian.org/debian//dists/squeeze/Release -O - | grep -E '^(Suite|Codename):'. Причина ошибки не анализируется, поэтому отсутствие конкретного файла и недоступность всего зеркала целиком трактуются одинаково - т.е. даже если зеркало недоступно целиком, пользователь получит вводящее в заблуждение сообщение, мол, "на данном зеркале твоя версия не поддерживается".

А причиной недоступности, очевидно, было то, что я в настройках DHCP в Tftpd32 забыл указать адрес DNS-сервера - поэтому загрузчик не мог разрешить ни одного доменного имени, и, как следствие, не мог достучаться ни до одного зеркала. После того, как я эту проблему исправил, инсталляция прошла успешно.

P.S. Включить обратно DHCP на роутере я, естественно, забыл - поэтому когда я через несколько дней привычно попытался подключиться к Wi-Fi с мобильника, я получил отлуп. Поскольку дело было как раз в ванной, пришлось подключение отложить - в телефоне статический айпишник прописывать некуда :)

Комментарии

Изображение PiaFraus

Хммм.. интересно, спасибо.

Хотя мне гораздо удобнее было бы скачать нужный дистрибутив и сделать загрузочную флешку. Флешки действительно стали очень удобной заменой дискам. И уже, наверное, не найти материнку, которая бы не умела грузиться с флешки.

Изображение myx

Всегда пожалуйста!

Про флешку я тоже думал - но вот засада, не смог найти софтину, которая бы легко делала загрузочную флешку по образу. Точнее, нашел, и не одну - но все они спотыкались об одну и ту же проблему. Несмотря на то, что 512-мегабайтной флешки за глаза хватает на 450-мегабайтный дистрибутив, все они ругались на то, что флешка меньше 640 метров. Со 180-мегабайтным дистрибутивом была такая же фигня. Т.е. они все воспринимают iso-шники как образы CD-дисков, вне зависимости от их реального размера.

Искать гигабайтную флешку я не стал - это уже было делом принципа :)

Изображение PiaFraus

Ой. Я вчера не послал, оказывается.

512 мегабайтная флешка! Раритет же :)

У нас как-то даже ненужные остаточные микро СД все от 2Гб.
Кстати вот последний раз, пару недель назад, восстанавливал свой нетбук именно с live ubuntu microSD. Она у меня теперь всегда на всякий случай в картридере, вместо заглушки :)

Изображение myx

А у нас что-то полно всякого раритета дома валяется :) Впрочем, от одного как раз на прошлой неделе избавились, отправив с оказией в Самару вместе с фотками.

Ну, в общем, все условия сложились так, чтобы появился этот пост :)

Все эти проблемы из-за недостатка сетевого ПО для виндовс. Вот если бы у тебя была уже одна машинка с линукс, то было все намного проще.

Ну а поставить было бы действительно проще с флешки. Скачать дебианский образ netinstall, записать его на флешку с помощью http://unetbootin.sourceforge.net/. Кстати, можно и не скачивать отдельно. Юнетбутин сам может скачать нужный образ (нажав педальку можно выбрать больше одного-двух десятков).

Изображение myx

Ну дык :) Про то, как все это проделать при наличии работающей линукс-машины, в Интернете полно статей :)

За Unetbootin спасибо! Попробовал, действительно флешку записал безо всяких вопросов! Хотя, докопайся я до него самостоятельно, не собрал бы столько замечательных граблей и не написал бы этот пост :)

Любой опыть - это есть хорошо :-)

Да, было бы за что.
Кстати, решение с юнетбутин тоже попадает под условие "есть только рабочая виндовс-машина" :-) Я его уже очень давно приметил. Пользуюсь, хорошая штука. И обновляется регулярно.