Исходные данные: FreeBSD 7.2, Asus Eee PC 900, одна флешка, одна карта памяти
Задача: Установить систему на нетбук с минимальными временными затратами

Недавно появилось дикое желание заменить ОС на нетбуке. До текущего момента там стояла Windows 7. Решил поставить FreeBSD. Я уже экспериментировал с openSUSE и мне не понравилась производительность системы. Думаю, что с FreeBSD все будет иначе.

Первым делом я стал искать в интернете советы как поставить систему. Наткнулся на следующую статью «Ставим FreeBSD на Asus Eee PC» на сайте lissyara.su. Идею установки я понял, но хотелось что-то более простого, без всякого редактирования файлов и т.д. Я нашел три метода поставить FreeBSD на ноутбук без сидюка.

Метод 1

Купить внешний cd-rom

Метод 2

Сетевая установка. Как? PXE! Выдержка из wikipedia:

PXE (англ. Preboot Execution Environment, произносится пикси) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы. Для организации загрузки системы в PXE используются протоколы IP, UDP, DHCP и TFTP.

PXE-код, обычно находящийся в ПЗУ сетевой карты, получает из сети по протоколу TFTP (получив адрес TFTP-сервера по DHCP) исполняемый файл, после чего передаёт ему управление.

Спецификация PXE ограничивает размер загрузчика 32 килобайтами, поэтому иногда используется двухстадийная загрузка, когда первый загрузчик получает и запускает вторичный, который уже получает и запускает образ операционной системы.

Одна из реализаций загружаемого по PXE файла — pxelinux из комплекта программ syslinux. pxelinux умеет показывать пользователю меню, похожее на меню syslinux и загружать по сети и передавать управление ядру Linux и программам, имеющим идентичный формат загрузки (например, Memtest86).

Как сказано выше, для установки по сети нам понадобится сервер с DHCP и TFTP. Такой сервер есть у меня. Суть данной установки заключается в том, что в ноутбуке в биосе необходимо включить опцию, которая позволяла бы грузиться через сетевую карту. Далее, надо настроить dhcp. А именно, указать в настройках, чтобы ноутбуку с таким-то MAC-адресом выдавался такой-то IP-адрес и подгружался указанный файл, который в свою очередь грузил бы загрузчик FreeBSD. На примере это выглядит вот так:

....

# объявляем хост
host setup_server {
   # указываем корневую директорию с нашим загрузчиком и необходимыми файлами
   option root-path "/usr/tftpboot";
   # файл, который надо загружать (относительно корневой директории)
   filename "boot/pxeboot";
   # название сервера
   server-name "192.168.1.1";
   # какой сервер использовать, если текущий не сработал
   next-server "192.168.1.1";
   # mac-адрес сетевой карты ноутбука
   hardware ethernet "00:22:1c:8b:fa:11";
   # присваиваем вот этот адрес ноутбуку
   fixed-address "192.168.1.4";
}

....

Все! Вот это часть конфига DHCP, отвечающая за подгрузку файла pxeboot указанной нами машине. Далее, необходимо активировать TFTP. TFTP — Trivial File Transfer Protocol — протокол, который используется как раз для загрузки бездисковых машин. TFTP висит на 69 порту и не имеет никакой защиты (авторизации пользователей). Активируем его в файле /etc/inetd.conf, раскомментируем строку:

tftp   dgram   udp   wait   root   /usr/libexec/tftpd   tftpd -l -s /usr/tftpboot

добавляем в /etc/rc.conf строчки:

inetd_enable="YES"
nfs_server_enable="YES"

в файл /etc/exports строчку:

/usr/tftpboot -alldirs -ro

и запускаем

# /etc/rc.d/inetd start

Ах да, чуть не забыл! Нам же еще нужно создать необходимые файлы!!! А их и не надо создавать. Просто скопируйте содержимое диска с дистрибутивом FreeBSD в папку /usr/tftpboot. Файл pxeboot можно создать на уже имеющейся системе:

# rm -rf /usr/obj/*
# cd /usr/src/sys/boot
# make
# cp /usr/src/sys/boot/i386/pxeldr/pxeboot /usr/tftpboot

Метод 3

Данный метод чуть более ресурсоемок, но не требует никаких серверов. Суть примерно та же, что и в статье с сайта lissyara.su. Но, используем мы две флешки. Первое, что необходимо сделать — это создать загрузочную флешку. Опять же, есть два варианта:

Вариант 1. Делаем все сами.

Создаем загрузочную флешку:

# fdisk -I /dev/ad2
# fdisk -B /dev/ad2
# bsdlabel -w /dev/ad2s1 auto
# bsdlabel -B /dev/ad2s1
# newfs -U /dev/ad2s1a
# mount /dev/ad2s1a /mnt

Вариант 2. Используем утилиты.

Существует утилита, которая называется UNetbootin (http://unetbootin.sourceforge.net/). Она позволяет создать загрузочную флешку для многих дистрибутивов, в том числе и FreeBSD. Очень удобная утилита. Скачиваем ее, выбираем в качестве дистрибутива FreeBSD версии 7.0, тип USB диск, диск I (в моем случае). Дальше там все происходит автоматически.

После любого из этих двух вариантов надо создать еще одну флешку, отформатированную в FAT32. На ней должен быть диск FreeBSD. Все что останется сделать — это загрузиться с первой флешки, начать установку, а в качестве источника установки выбрать DOS-раздел (если дистрибутив находится на SD-карточке, то раздел будет da1s1). Все, установка медленно, но верно завершиться.

Полезные ссылки

1. Информация по настройке оборудования в FreeBSD на EeePC (ссылка)
2. Дистрибутив UNetbootin (ссылка)
3. Инструкция с сайта lissyara.su (ссылка)