Установка NetBSD 1.6.2 по com-порту


Mikhail E. Zakharov zakharov@ipb.redline.ru
________________________________________
Началось все с того, что однажды разбираясь на складе, я откапал грязно-серого цвета потрепанный ноутбук Toshiba, который был брошен среди всякого компьютерного хлама еще в те времена, когда процессор Intel Pentium I считался верхом производительности. Такое неожиданное богатство не могло пройти мимо меня, и лэптоп был извлечен на свежий воздух.
Через некоторое время на столе передо мной лежал отмытый Toshiba T2130CS, у которого на борту имелись: дисковод 3.5'', один LPT-порт и один 9-и пиновый COM-порт, VGA выход для внешнего монитора, PS/2 разъем для подключения клавиатуры и трэкбол, выполенный в виде зеленой пимпочки (не знаю, как она точно называется) посередине клавиатуры. PCMCI-контроллер, некогда рассчитанный на установку двух карт, носил следы насильственной смерти и явной не работал. Вероятно, именно этот факт и послужил главной причиной заточения нашего героя в подвал. Аккумуляторная батарея в настоящее время уже естественно не заряжалась, но машинка вполне заработала и от сети переменного тока напряжением 220 вольт.
При включении питания на дисплее четко обозначились мутные разводы, характеризующие прежнего владельца как человека чистоплотного. Прошел POST, в результате которого система благополучно определила наличие 16Мб оперативной памяти. Затем довольно шустро загрузился MS-DOS.
Через некоторое время я научился попадать в BIOS: при включении питания надо нажать кнопу Escape и держать ее пока на экран не выскочит надпись "Check system. Then press [F1] key.", сопровождающаяся жалобным писком. Проще способа я не нашел, зато это позволило мне выяснить, что BIOS имеет версию 5.00, а ноутбук, кроме 16 Мб ОЗУ, еще оснащен процессором неустановленной тактовой частоты (в меню ничего кроме CPU Cache = Enabled и Processing Speed = High не значилось), и VGA-совместимой видеокартой. Дальше шло что-то не совсем понятное: встроенный дисплей был расчитан на работу в режиме 4096 или 222K цветов, в зависимости от установок (конечно, если "K" означает "kilo-", то это вполне приличные результаты).
Чтобы разобраться с процессором, видеокартой и вообще со всем на свете, требовалось что-то предпринять. И я отправился на http://www.toshiba.com/. После некоторых мытарств по ссылкам, я догадался что, по всей видимости, мой T2130CS является представителем линейки моделей Satellite. Поэтому я скачал несколько показавшихся мне полезными вещей:
" прошивку BIOS версии 5.20 http://cdgenp01.csd.toshiba.com/content/support/downloads/t213v510.exe
" руководство пользователя http://cdgenp01.csd.toshiba.com/content/support/downloads/t2130ug.exe
" и диагностическую утилиту http://cdgenp01.csd.toshiba.com/content/support/downloads/tdiags.exe
Естественно, руководство пользователя работает исключительно под MS Windows и требует для своей инсталляции на жесткий диск две чистые дискеты. Кроме того, оно нахально без спроса устанавливает всякое барахло в директорию C:WINDOWSSYSTEM. Прочитав это руководство я узнал, что:
" процессор в T2130CS установлен Intel 486DX4-75Mhz;
" объем винчестера должен быть 500Mb;
" цветной дисплей STN с диагональю 10.4'' совершенно точно работает с разрешением 640х480 пикселей при 256 цветах. Впрочем, путаница с количеством цветов так и осталась: в документации встречаются как и 4096, 256, 222К, так и все 256К.
" PCMCI позволяет устанавливать одну карточку Type III или до 2-х карт Type I или Type II.
" при габаритах 199x226x53мм вес устройства составляет 3.17 Кг;
" устройство может быть подключено к порт-репликатору, который на складе обнаружен не был, или был не опознан.
" и еще множество всякой полезной и не очень информации.
Покончив с документацией, я решил обновить BIOS. Для этого тоже потребовалась дискета, хорошо не две. Программа установки потребовала вставить дискету в дисковод ноутбука, перезагрузиться и следовать указаниям, что я и сделал. Если бы эта операция провалилась, писать дальше было бы не о чем, но поскольку все прошло гладко, то на ноутбуке теперь стоит обновленный BIOS версии 5.20. Кроме появления вышеуказанного номера, других заметных изменений, не обнаруживалось и остается только надеяться, что они таки были и затрагивали очень важные, но невидимые грани BIOS.
Весьма довольный собой, я для очистки совести, решил на всякий случай запустить на ноутбуке диагностическую утилиту tdiags, которая, как оказалось, впечатляет убогостью своих возможностей. Другими словами, утилита тестирует то, что и так работает. Естественно, что тест прошел успешно, да иначе и быть не могло.
Первый подход
MS-DOS это конечно здорово, но не будет же, в самом деле, пользоваться им настоящий юниксоид. Кстати, в руководстве пользователя ноутбуком Toshiba несколько раз мелькало упоминание о MS Windows 3.x/95, но это, как вы уже поняли, не мой путь. И поэтому, ставить будем *NIX. И, разумеется, это будет.... нет, не угадали, не Linux, а тот, клон UNIX, который заведомо точно заработает на моем очень скромном железе. Действительно, и без того тяжелые условия работы с медленным компьютером при нехватке дискового пространства и оперативной памяти отягощались еще и невозможностью подключения CD-ROM или сетевой карты. Таким образом, установка ОС должна проходить, по всей видимости, при помощи комплекта дискет или по одному из портов LPT или COM. В этом случае пригодится какой-нибудь компактный, быстрый и нетребовательный к ресурсам дистрибутив как, например, NetBSD. Действительно, не пропадать же даром девизу "Of course it runs NetBSD". И я решил ставить NetBSD, и не беда, что NetBSD не мой конек.
Установку дискетами, как не актуальную в XXI веке, я отверг сразу. Оставался выбор между COM и LPT. Параллельный порт обеспечит лучшую пропускную способность, но для этого потребуется специальный кабель. В ближайшем магазине такого кабеля не наблюдалось, я проверял, а паять что-либо самому мне не хотелось. К тому же нуль-модемный кабель у меня был уже заготовлен. В общем - COM.
Итак , вооружившись энтузиазмом и диском со стабильным дистрибутивом NetBSD-1.6.2, ISO-образ которого был скачан с ftp://ftp.netbsd.org/, я благополучно установил ОС на моей персоналке. Эту машину я решил называть "сервер" поскольку в дальнейшем именно к ней, через единственный COM-порт, мой лэптоп для связи с внешним миром будет подключаться по нуль-модемному кабелю. Кстати, из каких соображений на новенькие материнские платы теперь стали делать только один COM-порт?
Успех с установкой "сервера" меня окрылил, и я с воодушевлением принялся за ноутбук: бодро подсоединил нуль-модемный кабель и включил питание. Дальше вышла заминка: поскольку загрузка с CD-ROM на моем лэптопе не возможна в принципе (о причинах см. выше), мне пришлось вернуться на сервер и заняться подготовкой установочных дискет, образы которых в изобилие имеются на дистрибутиве NetBSD в каталоге /i386/installation/floppy. Как выяснилось, меня вполне удовлетворяют обычные boot1.fs и boot2.fs. Поэтому, вооружившись двумя дискетами, оставшимися от злополучного руководства пользователя, я одну из них воткнул в дисковод на "сервере" и выполнил следующие команды:
server# mount /cdrom
server# cd /cdrom/i386/installation/floppy
server# dd if=boot1.fs of=/dev/rfd0a bs=64k
Аналогичную операцию я выполнил для boot2.fs и второй дискеты. Теперь стандартные инсталляционные дискеты NetBSD были готовы, и можно было загрузить с них ноутбук. Что я и сделал.
Далее, последовала стандартная процедура установки NetBSD с разбиением диска на партиции, созданием файловых систем и выбором distribution sets. Разумеется, я выбрал минимальный вариант установки: kernel, base, system. И приготовился к установки дистрибутива по nfs, поскольку боялся, что на диске не хватит места, если данные будут сначала загружаться по ftp а затем распаковываться в нужные директории.
И тут меня постигло жестокое разочарование, суть которого представлена на screen shot'е:

После девиза "Of course it runs NetBSD", я такого просто не ожидал. Не найдено сетевых интерфейсов, а чем com-порт хуже, не пойму? Обидно, тем более, что PPP, не говоря уже про SLIP, поднимаются на NetBSD элементарно (см. NetBSD Guide).
Что ж, не отступать ведь на полпути, и потому, let's google! И я углубился в недра архивов мэйл-листов, форумы и how-to. В Интернет, время от времени, вопросы по теме установки NetBSD по COM-порту у некоторых энтузиастов тоже возникали, но ответов на них я не заметил. Может быть, я нитуда смотрел, но промаявшись так пару дней, я решил взять дело в свои руки, и, потрясаясь собственной самоуверенности, полез в исходные коды.
Патч
Выяснилось, что программа установки NetBSD называется sysinst, и ее исходные тексты располагаются в каталоге /usr/src/distrib/utils/sysinst. Разумеется, пакеты исходных текстов сначала надо было установить, что я и сделал, скачав их с ftp://ftp.netbsd.org/. Конечно, прежде чем что-либо компилировать, мне потребовалось собрать tools:
server# mkdir /usr/obj
server# cd /usr/src
server# ./build.sh tools
Не буду вдаваться в подробности того, как я разбирался во внутренностях sysinst, и как нашел описание массива с красноречивым названием ignored_if_names[], где перечислялись названия тех сетевых интерфейсов, которые не будут инициализированы на этапе установки системы. Разумеется, интерфейсы SLIP и PPP ("sl" и "ppp"), попали в этот массив, и потому sysinst'ом честно игнорировались, вызывая появление того самого screen shot'а.
После некоторого копания в исходных кодах установочных дискет (/usr/src/distrib/i386/floppies) выяснилось, что демон pppd на них вообще отсутствует. Все мои попытки перегенерации дискет так, чтобы включить в них pppd к успеху не привели: получаемые образы каждый раз превышали размеры дискет. Не знаю, может быть у вас с pppd все получится, но я в какой-то момент обнаружил наличие /sbin/slattach в списках инсталлируемых на дискеты программ. Что ж, это был выход, поскольку для моих целей SLIP ничем не хуже PPP. И я приступил к редактированию исходных текстов sysinst'а. Через некоторое время, у меня получился этот sysinst.patch, который добавляет в англоязычный sysinst простую поддержку sl-интерфейса. Кстати, поскольку в current-ветке я не заметил изменений в sysinst, то этот патч должен успешно сработать и на NetBSD 2.0.
Чтобы его наложить на sysinst на "сервере" мне пришлось выполнить следующие 2 команды:
server# cd /usr/src/distrib/utils/sysinst
server# patch < /full/path/to/sysinst.patch
Теперь оставалось скомпилировать sysinst для проверки. Для этого в каталоге /usr/src/distrib/utils/sysinst я выполнил:
server# make
И поскольку все прошло удачно, то в каталоге /usr/src/distrib/utils/sysinst/arch/i386 появился свежескомпилированный sysinst. Теперь можно было пересобрать и сами инсталляционные дискеты. Для начала я скомпилировал ядро INSTALL, так как это было описано в NetBSD Guide:
server# cd /usr/src/sys/arch/i386/conf
server# config INSTALL
server# cd /usr/src/sys/arch/i386/compile/INSTALL
server# make depend && make
Затем я снова вернулся в /usr/src/distrib/i386/floppies и сгенерировал дискеты:
server# cd /usr/src/distrib/i386/floppies
server# cd ramdisk-big
server# make
server# cd ../kernel-ramdisk
server# make netbsd.INSTALL.gz
server# cd ../bootfloppy
server# make
После чего, в каталоге /usr/src/distrib/i386/floppies/bootfloppy/obj появились образы двух установочных дискет boot1.fs и boot2.fs, которые при помощи dd я записал на все те же две дискеты, оставшиеся от руководства пользователя:
server# cd /usr/src/distrib/i386/floppies/bootfloppy/obj
server# dd if=boot1.fs of=/dev/rfd0a bs=64k
server# dd if=boot2.fs of=/dev/rfd0a bs=64k
Все, дискеты готовы, теперь снова можно включать ноутбук.
Дубль два
Загрузившись с дискет и удачно разметив партиции, я выбрал интересующие меня distribution sets, указал источник дистрибутива как nfs и снова добрался до злосчастного места, правда сетевой интерфейс теперь совершенно справедливо определился как sl0. На следующих экранах, благодаря патчу, предоставляется возможность его сконфигурировать. Например, "серверу" я выделил IP-адрес 192.168.10.10, а ноутбуку присвоил IP-адрес 192.168.10.100 и hostname t2130cs. В заключении сетевой настройки, sysinst для того чтобы поднять на интерфейсе SLIP, предлагает выставить нужные флаги для slattach. В принципе, их можно оставить по дефолту:

Теперь требовалось настроить "сервер", а именно:
" смонтировать, допустим, в каталог /cdrom, обычный инсталляционный дистрибутив NetBSD;
" поднять nfs-сервер;
" настроить sl-интерфейс.
Поэтому, я вставил в привод CD-ROM "сервера" дистрибутив NetBSD и принялся за дело. Самым простым было смонтировать /cdrom:
server# mount /cdrom
Затем я настроил экспорты nfs и стартовал необходимые демоны:
server# echo "/cdrom -ro -alldirs" >> /etc/exports
server# nfsd
server# mountd
server# rpcbind -l
И наконец сконфигурировал SLIP-интерфейс:
server# ifconfig sl0 inet 192.168.10.10 192.168.10.100
server# slattach -s 115200 -l /dev/tty00
Теперь только оставалось проверить, работу интерфейса:
server# ping 192.168.10.100
PING 192.168.10.100 (192.168.10.100): 56 data bytes
64 bytes from 192.168.10.100: icmp_seq=0 ttl=255 time=20.564 ms
64 bytes from 192.168.10.100: icmp_seq=1 ttl=255 time=19.730 ms
64 bytes from 192.168.10.100: icmp_seq=2 ttl=255 time=20.750 ms
64 bytes from 192.168.10.100: icmp_seq=3 ttl=255 time=20.737 ms
^C
----192.168.10.100 PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 19.730/20.445/20.750/0.484 ms
Убедившись в наличии откликов от моего t2130cs, я обрадовался этой маленькой победе и вернулся к ноутбуку, где меня ожидало продолжение установки. Мне оставалось указать хост и директорию, откуда по nfs требуется проводить установку. Здесь я указал хост 192.168.10.10 (мой "сервер") и каталог, с дистрибутивом /cdrom/i386/binary/sets.
От последнего доказательства меня отделял один шаг, и я, затаив дыхание, нажал Enter. Однако ничего страшного не произошло: лэптоп медленно, но верно начал стягивать и распаковывать distribution sets:

Естественно, что процесс установки был весьма не быстрым, но все же и он когда-то закончился, и теперь на моем заслуженном Toshiba Satellite T2130CS вполне сносно работает NetBSD 1.6.2. Как выяснилось позже, XFree86 на лэптопе тоже без проблем конфигурируется и даже замечательно работает в режиме 640х480 пикселей при 256 цветах. Но это уже совсем другая история.

Обновлено: 13.03.2015