воскресенье, 22 января 2012 г.

NFSRoot

Делаем загружаемую по сети удаленную машину. Удобно для создания миникластеров или просто тонких клиентов


Требуемые роли и пакеты для этих ролей
Службы могут быть размещены как на одном сервере, так и на нескольких. Я обычно выделяю отдельную виртуальную машину с компилятором, чтобы не ставить среду разработки и зависимости на рабочих серверах.
  • DHCP
    • dhcpd
  • TFTP\pxe
    • atftpd
    • syslinux
  • NFS
  • Compiler
    • build-essentials
    • linux-source-2.6
Настройка DHCP
В файл настройки /etc/dhcp/dhcpd.conf прописываем
allow bootp; allow booting;
И создаем зону c записью хоста
subnet 10.0.0.0 netmask 255.255.255.192 {
  range 10.0.0.15 10.0.0.62;
  option domain-name         "home.net";
  option domain-name-servers 10.0.0.2;
  option routers 10.0.0.1;

  host pxe {
    hardware ethernet 52:54:00:ED:89:19;
    fixed-address 10.0.0.10;
    option host-name "pxe0";
    next-server 10.0.0.2;     #адрес tftp сервера
    filename "pxelinux.0";    #имя загрузчика
    }
}


Строго говоря опция fixed-address не обязательна. После настройки перезагружаем службу DHCP.
Настройка TFTP
Создаем директорию с файлами для загрузки. Это обычно или /tftpboot или /var/tftpboot. Туда складываем необходимый минимум файлов, обычно это базовая версия установки. В debian установка производится через утилиту debootstrap, которая собирает дистрибутив.
mkdir /tftpboot

Для работы демона tftp через inet.d(самый простой вариант) в файле /etc/inetd.conf изменяем конфиг tftp на
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot
и перезапускаем inetd.
Для загрузки через pxe проще всего использовать syslinux, с настройкой grub будет необходимо разбираться. Копируем загрузчик и делаем конфигурацию
mkdir /tftpboot/pxelinux.cfg
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/


И создаем конфиг для загрузки в папке /tftpboot/pxelinux.cfg/. Это может быть или файл конфигурации по умолчанию default или индивидуально в формате 01-MAC(как показано ниже).
$ /tftpboot/pxelinux.cfg/01-01-23-45-67-89-ab
IPAPPEND 2 # I don't know :)
# SERIAL 0 115200 # show on serial console

PROMPT 1 # show boot: prompt
TIMEOUT 10 # boot default after 1 second
DEFAULT linux
label linux
kernel vmlinuz-diskless
append rw netdev=irq=11,name=eth0 root=/dev/nfs ip=::::pxe0:eth0:dhcp nfsroot=10.0.0.2:/var/nfsroot/pxe0 panic=30


На данном этапе уже возможно загрузка, но необходимо подготовить ядро и корневой раздел новой системы

Настройка NFS
Для начала настроим NFS сервер и сделаем директорию для экспорта
mkdir /var/nfsroot
mkdir /var/nfsroot/pxe

apt-get install nfs-server
echo "/var/nfsroot/pxe 10.0.0.0/24(rw,no_root_squash,no_subtree_check)" >> /etc/exports
exportfs -av


Теперь подготовим собственно саму корневую систему. Понадобится debootstrap
debootstrap --include=nfsbooted,dhcp3-client,procps,passwd,vim,less,configure-debian lenny /nfsroot/pxe http://10.0.0.2/debian

Последний параметр - локальное зеркало дебиана. Установка занимает некоторое время.
Входим в новую систему и правим некоторые конфиги.
  • в /etc/hosts прописываем минимальный конфиг
    127.0.0.1 localhost
  • /etc/hostname прописываем имя системы
    pxe
  • /etc/resolv.conf прописываем параметны нашей сети.
  • /etc/nfsbooted/mountfix.conf
    NFSROOTDIR=/.nfsroot
  • /etc/fstab
    / /.nfsroot none bind,ro 0 0
    proc /proc proc defaults 0 0

    # copied from /etc/nfsbooted/fstab
    /dev/ram /tmp ramfs defaults,rw,auto,dev 0 0
    /dev/ram1 /var/run ramfs defaults,rw,auto,dev 0 0
    /dev/ram2 /var/state ramfs defaults,rw,auto,dev 0 0
    /dev/ram3 /var/lock ramfs defaults,rw,auto,dev 0 0
    /dev/ram4 /var/account ramfs defaults,rw,auto,dev 0 0
    /dev/ram5 /var/log ramfs defaults,rw,auto,dev 0 0
    /dev/ram6 /var/lib/gdm ramfs defaults,rw,auto,dev 0 0
    /dev/ram7 /var/tmp ramfs defaults,rw,auto,dev 0 0
  • заканчиваем инсталляцию финальной конфигурацией из chroot окружения
    configure-debian --all

Настройка ядра
Устанавливаем необходимый ToolChain и исходники ядра
apt-get install build-essentials linux-source-2.6
Конфигурируем ядро со следующими параметрами
CONFIG_E1000=yEthernet (1000 Mbit) ---> Intel(R) PRO/1000 Gigabit Ethernet support
CONFIG_IP_PNP=yNetworking options ---> IP: kernel level autoconfiguration
CONFIG_IP_PNP_DHCP=yNetworking options ---> IP: DHCP support
CONFIG_NFS_FS=yNetwork File Systems ---> NFS file system support
CONFIG_ROOT_NFS=yNetwork File Systems ---> Root file system on NFS
Компилируем ядро и ставим в соответствующую директорию загружаемой системы
make -j2 bzImage modules
make INSTALL_MOD_PATH=/var/nfsroot/pxe modules_install
make INSTALL_PATH=/var/nfsroot/pxe/boot install
И последнне и самое важное. Ссылка на загружаемое ядро
ln -s /nfsroot/diskless/boot/vmlinuz* /tftpboot/vmlinuz
Вроде всё, ничего не забыл, должно работаь.

(С)перто отсюда

  • http://www.jukie.net/bart/blog/nfsroot-on-debian
  • http://onesis.sourceforge.net/NFSroot-HOWTO.php#configpxelinux
  • http://wiki.bolay.net/doku.php?id=operating_systems:linux:debian:nfsboot
  • Комментариев нет:

    Отправить комментарий