Реализация бездисковой рабочей станции на базе NetBSD

"Тонкий клиент" можно сделать не только на базе Linux или WinCE.

[DreamCatcher]

Реализация бездисковой рабочей станции на базе NetBSD

Введение

Применение бездисковых рабочих станций оправдано практически в любой организации. Рассмотрим несколько аспектов их применениия:
  • Удешевление стоимости рабочей станции
  • Увеличение срока службы рабочей станции
  • Повышение информационной безопасности
  • Снижение времени простоя рабочей станции вследствие отказа
  • Легкость и централизованность администрирования
Применение NetBSD в качестве операционной системы, используемой конечным пользователем, позволит отказатся от коммерческого ПО, косвенным образом увеличит коэффициент полезного использования работниками служебного времени, исключит возможность несанкционированной установки программ или использование съемных носителей, позволит своевременно и централизованно обновлять версии программного обеспечения, сократит время развертывания нового рабочего места, предоставит администратору возможность удаленного управления рабочей станцией с использованием защищенных протоколов.

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

Рабочая станция

Большинство современных материнских плат имеют встроенную сетевую карту и поддерживают возможность загрузку по сети. Вам просто потребуется выставить соответствующую опцию в BIOS. Если материнская плата не имеет такой возможности, то есть другие способы реализации загрузки по сети, которые более подробно описаны здесь.

Сервер

В данной статье мы не будем рассматривать вопросы установки и первоначальной настройки сервера, для получения дополнительной информации я советую вам обратиться к соответствующей главе руководства пользователя NetBSD.

Настройка сервера будет включать в себя:
  • настройку сервера DHCP
  • настройку сервера NFS
  • создание клиентской файловой системы

Настройка сервера DHCP

Протокол DHCP(Dynamic Host Configuration Protocol) используется для назначения рабочей станции сетевых параметров и передачи ей начального загрузчика. Служба DHCP, как правило, запускается в качестве демона. Большинство серверов DHCP поддерживают запросы BOOTP. Перед началом работы необходимо удостовериться, что на сервере не запущен сервер bootpd, поскольку он будет препятствовать нормальной работе dhcpd.

Существует две основные реализации dhcpd, от ISC и CMU. NetBSD использует вариант от ISC, так как он в настоящее время активно разрабатывается и применяется в различных операционных системах.

Файл конфигурации /etc/dhcpd.conf легко читаем и одинаково выглядит на всех платформах. В настоящей статье мы будем использовать конфигурацию для клиента с предопределенным адресом, но ее легко изменить и дополнить, прочитав страницы руководства man dhcpd(8), dhpcpd.conf(5) и dhcpd-options(5).

Будьте осторожны при использовании директивы next-server, когда используете сервер tftp в качестве следующего этапа загрузки, так как клиент предполагает, что next-server использует и tftp и nfs. Если в сети не планируется наличие старых станций, которые для загрузки будут использовать tftp, то удалите соответствующие строки из файла конфигурации. Процесс найстройки сервера dhcpd выглядит следующим образом:
  • удостоверьтесь, что ядро содержит опцию
      
        pseudo-device   bpfilter       4
      
  • создадим файл, где будут храниться записи о аренде адресов
      
      # touch /var/db/dhcpd.leases
      
  • создаем файл конфигурации, откорректировав его под свои параметры
        
      # global dhcpd parameters
      deny unknown-clients;                   #disallow unknown connections
      ddns-update-style none;			    #disallow dynamic DNS updates
      
      allow bootp;                            #allow bootp requests, thus the dhcp
                                              #server will act as a bootp server
      
      # which network interface the server will listen on
      subnet 192.168.1.0 netmask 255.255.255.0 { #the zeros indicate which range
      }                                          #of addresses are allowed to connect
      
       #set of parameters common to all clients
       group {                                
        option broadcast-address 192.168.1.255;
        option domain-name "test.net";
        option domain-name-servers dns.test.net;
        option routers router.test.net;
        option subnet-mask 255.255.255.0;
      
        #set of parameters specific to one particular host
        host client.test.net {
         hardware ethernet CC:CC:CC:CC:CC:CC;
         fixed-address 192.168.1.10;
         option host-name "client";           #name of the host (if the fixed address
                                              #doesn't resolve to a simple name)
         filename "ofwboot.xcf";              #name of the bootloader or kernel to
                                              #download via tftp
         next-server tftpserver.test.net;     #which machine to tftp filename from
         option root-path "/export/client/root"; #the path on the NFS server.
                                                 #typically the client assumes the
                                                 #nfsserver = tftpserver
         #always-reply-rfc1048 true;          #this is needed if your client isn't
                                              #getting the options you set and
                                              #the log says "(non-rfc1048)"
      					#next68k machines require this to be
      					#set false
        }
      
        #you may paste another "host" entry here for additional clients on this network
      
  • Запускаем демон dhcpd в режиме отладки
      
      # /usr/sbin/dhcpd -d -f 
      
Когда сервер получит запрос, мы должны увидеть примерно следующее:
    
    BOOTREQUEST from CC:CC:CC:CC:CC:CC via le0 (non-rfc1048)
    BOOTREPLY for 192.168.1.10 to client.test.net
    (CC:CC:CC:CC:CC:CC) via le0
    DHCPDISCOVER from CC:CC:CC:CC:CC:CC via le0
    DHCPOFFER on 192.168.1.10 to CC:CC:CC:CC:CC:CC via le0
    DHCPREQUEST for 192.168.1.10 from CC:CC:CC:CC:CC:CC via le0
    DHCPACK on 192.168.1.10 to CC:CC:CC:CC:CC:CC via le0
    
Обычно, загрузчик не имеет функций обратной связи, но он будет искать файловую ситему, что приведет к следующим сообщениям:
    
    boot device: 
    nfs_boot: trying DHCP/BOOTP
    nfs_boot: DHCP server: 0xC0A80105
    nfs_boot: my_name=client
    nfs_boot: my_domain=test.net
    nfs_boot: my_addr=0xC0A8010A
    nfs_boot: my_mask=0xffffff00
    nfs_boot: gateway=0xC0A80101
    root on :/export/client/root
    

Настройка сервера NFS

NFS является стандартной сетевой файловой системой UNIX. Обычно, загрузчик рабочей станции ищет ядро на сервере nfs, загружает его в память и передает ему управление. Клиенту необходим доступ на чтение/запись на сервере nfs с правами root, поэтому обратите внимание на разграничение доступа к каталогам. К следующим каталогам доступ с правами root необходим:
    
    /
    /var
    /etc
    /dev
    
Самым простым, будет экспортировать /home и /usr отдельно от /export/client/root и без привилегий root. Обратите внимание, что /swap должен быть примонтирован как файл.
Сервер (экспортируемые каталоги) Клиент
/export/client/root /
/export/client/swap (file) /swap (file)
/export/client/usr /usr
/export/client/home /home
Настройка сервера будет включать в себя следующие шаги:
  • Удостоверимся, что ядро содержит опцию
      
        options         NFSSERVER
      
  • Выполним
      
      # mkdir -p /export/client/root/dev 
      
  • Выполним
      
      # mkdir /export/client/usr 
      
  • Выполним
      
      # mkdir /export/client/home 
      
  • Выполним
      
      # touch /export/client/swap 
      
  • Выполним
      
      # cd /export/client/root 
      
  • Выполним
      
      # tar -xvpzf /export/client/NetBSD-release/binary/sets/kern.tgz 
      
  • Выполним
      
      # mknod /export/client/root/dev/console c 0 0 
      
  • Добавим следующие строки в /etc/exports:
      
      #/etc/exports
      /export/client/root -maproot=root:wheel    client.test.net
      /export/client/swap -maproot=root:wheel    client.test.net
      /export/client/usr  -maproot=nobody:nobody client.test.net
      /export/client/home -maproot=nobody:nobody client.test.net
      
  • Выполним
      
      # ps -aux | grep mountd
      
    Если сервер mountd запущен, выполним kill -HUP для повторного считывания файла конфигурации /etc/exports. В противном случае, запустим его:
      
      # /usr/sbin/mountd
      
  • Выполним
      
      # ps -aux | grep nfsd
      
    Если демон nfsdaemons не запущен, запустим его:
      
      # /usr/sbin/nfsd -tun 4 
      
В случае, когда NFS сервер не запущен, клиент получит следующее сообщение:
    
    le(0,0,0,0): Unknown error: code -1
    boot: Unknown error: code -1
    
Если NFS запущен, но не может экспортировать корневой каталог, то клиент получит сообщение:
    
    boot: no such file or directory
    
Если у вас все получилось правильно, то вы увидете на экране несколько строк и вращающийся курсор. Так как клиентская файловая система у нас еще не создана, то мы получим панику на старте init.

Внесем изменения в /etc/rc.conf
    
    nfs_server=YES                             # enable server daemons
                            mountd_flags=""
                            nfsd_flags="-6tun 4"
    
    dhcpd=YES               dhcpd_flags="-q"
    

Создание клиентской файловой системы

Для создания файловой системы необходимо выполнить следущие действия:
  •  
      
      # cd /export/client/root
      
  • Распакуем наборы из дистрибутива NetBSD:
      
      # tar [--numeric-owner] -xvpzf /export/client/NetBSD-release/binary/sets/base.tgz
      # tar [--numeric-owner] -xvpzf /export/client/NetBSD-release/binary/sets/etc.tgz
      
  •  
      
      # mkdir /export/client/root/kern 
      
  • Создадим раздел подкачки в 16 Мб:
      
      # mkdir /export/client/root/swap
      # dd if=/dev/zero of=/export/client/swap bs=4k count=4k 
      
  • Создадим файл /etc/ifconfig.le0, где le0 является именем сетевого интерфейса в клиентской системе NetBSD. Создаем файл /export/client/root/etc/ifconfig.le0, содержащий следующую строку:
      
      inet client netmask 255.255.255.0 broadcast 192.168.1.255
      
    В данном примере, маску 255.255.255.0 необходимо заменить на маску, используемую в вашей сети, также, как широковещательный адрес 192.168.1.255
  • Создадим файл /export/client/root/etc/fstab, содержащий следующие строки:
      
      #/etc/fstab
      nfsserver:/export/client/swap   none  swap  sw,nfsmntpt=/swap
      nfsserver:/export/client/root   /     nfs   rw 0 0
      nfsserver:/export/client/usr    /usr  nfs   rw 0 0
      nfsserver:/export/client/home   /home nfs   rw 0 0
      
  • Откроем файл /export/client/root/etc/rc.conf и внесем в него следующие изменения:
      
      hostname="client"
      defaultroute="192.168.1.1"
      nfs_client=YES
      auto_ifconfig=NO
      net_interfaces=""
      
  • Внесем изменеия в /export/client/root/etc/hosts:
      
      #/etc/hosts
      192.168.1.10 client.test.net client
      192.168.1.5  nfsserver.test.net nfsserver
      
  •  
      
      # mv /export/client/root/usr/* /export/client/usr/ 
      

Завершение

Первую свою загрузку клиентская машина осуществит в однопользовательском режиме, после чего необходимо будет создать устройства в каталоге /dev:
    
    Enter pathname of shell or RETURN for sh:
    # mount /usr 
    # cd /dev
    # /bin/sh MAKEDEV all
    
Проверить работу swap:
    
    # swapctl -A
    swapctl: adding nfsserver:/export/client/swap as swap device at priority 0
    # swapctl -l
    Device      512-blocks     Used    Avail Capacity  Priority
    /dev/??          32768        0    32768     0%    0
    
И внести очередное изменеие в /etc/rc.conf:
    
    #vi /etc/rc.conf
    rc_configured=YES 
    
После чего можно перейти в многопользовательский режим и использовать рабочую станцию в обычном порядке. После перезагрузки работа станции ничем не будет отличаться от загрузки с жесткого диска.

Статья взята с сайта DreamCatcher

[ опубликовано 09/11/2005 ]

DreamCatcher - Реализация бездисковой рабочей станции на базе NetBSD   Версия для печати