31.7 ÎÞÅ̲Ù×÷

¸üУº Jean-François Dock¨¨s. ÖØÐÂ×éÖ¯¼°ÔöÇ¿£ºAlex Dupre. ÖÐÎÄ·­Ò룺ÕŠѩƽ ºÍ Ô¬ ËÕÒå.

¡¡¡¡FreeBSD Ö÷»ú¿ÉÒÔ´ÓÍøÂçÆô¶¯¶øÎÞÐè±¾µØ´ÅÅ̾ͿɲÙ×÷£¬ ʹÓõÄÊÇ´Ó NFS ·þÎñÆ÷×°ÔØµÄÎļþϵͳ¡£ ³ýÁ˱ê×¼µÄÅäÖÃÎļþ£¬ÎÞÐèÈκεÄϵͳÐ޸ġ£ ºÜÈÝÒ×ÉèÖÃÕâÑùµÄϵͳÒòΪËùÓбØÒªµÄÔªËØ¶¼ºÜÈÝÒ׵õ½£º

¡¡¡¡ÉèÖÃÎÞÅ̹¤×÷Õ¾ÓÐÐí¶à·½·¨¡£ ÓкܶàÏà¹ØµÄÔªËØ´ó²¿·Ö¿ÉÒÔ×Ô¶¨ÒåÒÔÊʺϱ¾µØÇé¿ö¡£ ÒÔϽ«½éÉÜÒ»¸öÍêÕûϵͳµÄ°²×°£¬Ç¿µ÷µÄÊǼòµ¥ÐÔºÍÓë±ê×¼ FreeBSD Æô¶¯½Å±¾µÄ¼æÈÝ¡£½éÉܵÄϵͳÓÐÒÔÏÂÌØÐÔ£º

СÐÄ: ÈçÉÏËùÊö£¬Õâ¸öϵͳÊDz»°²È«µÄ¡£ ËüÓ¦¸Ã´¦ÓÚÍøÂçµÄÊܱ£»¤ÇøÓò²¢²»±»ÆäËüÖ÷»úÐÅÈΡ£

¡¡¡¡Õⲿ·ÖËùÓеÄÐÅÏ¢¾ùÔÚ 5.2.1-RELEASE ÉϲâÊÔ¹ý¡£

31.7.1 ±³¾°ÐÅÏ¢

¡¡¡¡ÉèÖÃÎÞÅ̹¤×÷Õ¾Ïà¶ÔÒª¼òµ¥¶øÓÖÒ׳ö´í¡£ ÓÐʱ·ÖÎöһЩԭÒòÊǺÜÄѵġ£ÀýÈ磺

¡¡¡¡ÔÚÕâÀ Éæ¼°µ½µÄһЩ±³¾°ÖªÊ¶¶ÔÓÚ¿ÉÄܳöÏÖµÄÎÊÌâµÄ½â¾öÊǺÜÓаïÖúµÄ¡£

¡¡¡¡Òª³É¹¦µØÒýµ¼ÏµÍ³»¹ÓÐЩ²Ù×÷ÐèÒª×ö¡£

¡¡¡¡²é¿´ diskless(8) ÊÖ²áÒ³¡£

31.7.2 °²×°ËµÃ÷

31.7.2.1 ÅäÖÃʹÓÃISC DHCP

¡¡¡¡ISC DHCP ·þÎñÆ÷¿ÉÒÔ»ØÓ¦ BOOTP ºÍ DHCP µÄÇëÇó¡£

¡¡¡¡ISC DHCP 3.1 ²¢²»ÊôÓÚ»ù±¾ÏµÍ³¡£Ê×ÏÈÄúÐèÒª°²×° net/isc-dhcp31-server port »òÏàÓ¦µÄ¡°°ü¡±¡£

¡¡¡¡Ò»µ©°²×°ÁË ISC DHCP£¬ »¹ÐèÒªÒ»¸öÅäÖÃÎļþ²ÅÄÜÔËÐÐ (ͨ³£Ãû½Ð /usr/local/etc/dhcpd.conf)¡£ ÕâÀïÓиö×¢Ê͹ýµÄÀý×Ó£¬Àï±ßÖ÷»ú margaux ʹÓà Etherboot£¬ ¶øÖ÷»úcorbieres ʹÓà PXE£º

default-lease-time 600;
max-lease-time 7200;
authoritative;

option domain-name "example.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;

subnet 192.168.4.0 netmask 255.255.255.0 {
  use-host-decl-names on; (1)
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.4.255;

  host margaux {
    hardware ethernet 01:23:45:67:89:ab;
    fixed-address margaux.example.com;
    next-server 192.168.4.4; (2)
    filename "/data/misc/kernel.diskless"; (3)
    option root-path "192.168.4.4:/data/misc/diskless"; (4)
  }
  host corbieres {
    hardware ethernet 00:02:b3:27:62:df;
    fixed-address corbieres.example.com;
    next-server 192.168.4.4;
    filename "pxeboot";
    option root-path "192.168.4.4:/data/misc/diskless";
  }
}
          
(1)
Õâ¸öÑ¡Ïî¸æËß dhcpd ·¢ËÍhost ÀïÉùÃ÷µÄÓÃÓÚÎÞÅÌÖ÷»úµÄÖ÷»úÃûµÄÖµ¡£ ÁíÍâ¿ÉÄÜ»áÔö¼ÓÒ»¸ö option host-name margaux µ½ host ÉùÃ÷Àï¡£
(2)
next-server Õýʽָ¶¨ TFTP »ò NFS ·þÎñÓÃÓÚÔØÈë×°ÔØÆ÷»òÄÚºËÎļþ (ĬÈÏʹÓõÄÊÇÏàͬµÄÖ÷»ú×÷ΪDHCP ·þÎñÆ÷)¡£
(3)
filename Õýʽ¶¨ÒåÕâÑùµÄÎļþ¡ª¡ªetherboot »ò PXE ΪִÐÐÏÂÒ»²½½«×°ÔØËü¡£ ¸ù¾ÝʹÓõĴ«Ê䷽ʽ£¬Ëü±ØÐëÒªÖ¸¶¨¡£ Etherboot ¿ÉÒÔ±»±àÒëÀ´Ê¹Óà NFS »ò TFTP¡£ FreeBSD port ĬÈÏÅäÖÃÁËNFS¡£ PXE ʹÓà TFTP£¬ Õâ¾ÍÊÇΪʲôÔÚÕâÀïʹÓÃÏà¶ÔÎļþÃû (Õâ¿ÉÄÜÒÀÀµÓÚ TFTP ·þÎñÆ÷ÅäÖ㬲»¹ý»áÏ൱µäÐÍ)¡£ ͬÑù£¬PXE »á×°ÔØ pxeboot£¬ ¶ø²»ÊÇÄںˡ£ÁíÍâÓм¸¸öºÜÓÐÒâ˼µÄ¿ÉÄÜ£¬Èç´Ó FreeBSD CD-ROM µÄ /boot Ä¿Â¼×°ÔØ pxeboot (ÒòΪ pxeboot(8) Äܹ»×°ÔØ GENERIC Äںˣ¬Õâ¾ÍʹµÃ¿ÉÒÔʹÓà PXE ´ÓÔ¶³ÌµÄ CD-ROM ÀïÆô¶¯)¡£
(4)
root-path Ñ¡ÏÒåµ½¸ù (root) ÎļþϵͳµÄ·¾¶£¬Í¨³£ÊÇ NFS ·ûºÅ¡£µ±Ê¹Óà PXE ʱ£¬Ö»ÒªÄú²»ÆôÓÃÄÚºËÀïµÄ BOOTP Ñ¡Ï¿ÉÒÔ²»¹ÜÖ÷»úµÄIP¡£NFS ·þÎñÆ÷È»ºó¾ÍÈçͬ TFTP Ò»Ñù¡£

31.7.2.2 ÅäÖÃʹÓÃBOOTP

¡¡¡¡ÕâÀï½ô¸úµÄÊÇÒ»¸öµÈЧµÄ bootpd ÅäÖà (¼õÉÙµ½Ò»¸ö¿Í»§¶Ë)¡£Õâ¸ö¿ÉÒÔÔÚ /etc/bootptab ÀïÕÒµ½¡£

¡¡¡¡Çë×¢Ò⣺ΪÁËʹÓÃBOOTP£¬etherboot ±ØÐëʹÓ÷ÇĬÈÏÑ¡Ïî NO_DHCP_SUPPORT À´½øÐбàÒ룬¶øÇÒ PXE ÐèÒª DHCP¡£bootpd µÄΨһ¿É¼ûµÄºÃ´¦ÊÇËü´æÔÚÓÚ»ù±¾ÏµÍ³ÖС£

.def100:\
  :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
  :sm=255.255.255.0:\
  :ds=192.168.4.1:\
  :gw=192.168.4.1:\
  :hd="/tftpboot":\
  :bf="/kernel.diskless":\
  :rp="192.168.4.4:/data/misc/diskless":

margaux:ha=0123456789ab:tc=.def100

31.7.2.3 ʹÓÃEtherboot×¼±¸Æô¶¯³ÌÐò

¡¡¡¡Etherboot µÄÍøÕ¾ °üº¬Óиü¶àµÄÎĵµ ¡ª¡ªÖ÷ÒªÃé×¼µÄÊÇ Linux ϵͳ£¬µ«ÎÞÒɰüº¬ÓÐÓÐÓõÄÐÅÏ¢¡£ ÈçÏÂÁгöµÄÊǹØÓÚÔÚ FreeBSD ϵͳÀïʹÓà Etherboot¡£

¡¡¡¡Ê×ÏÈÄú±ØÐë°²×°net/etherboot °ü»ò port¡£

¡¡¡¡Äú¿ÉÒԸıä Etherboot µÄÅäÖà (ÈçʹÓà TFTP À´´úÌæ NFS)£¬ ·½·¨ÊÇÐÞ¸Ä Config Îļþ¡ª¡ªÔÚ Etherboot ԴĿ¼Àï¡£

¡¡¡¡¶ÔÓÚÎÒÃǵÄÉèÖã¬ÎÒÃÇҪʹÓÃÒ»ÕÅÆô¶¯ÈíÅÌ¡£ ¶ÔÓÚÆäËüµÄ·½·¨(PROM£¬»ò MS-DOS³ÌÐò)£¬ Çë²Î¿¼ Etherboot Îĵµ¡£

¡¡¡¡ÏëҪʹÓÃÆô¶¯ÈíÅÌ£¬ÏȲåÈëÒ»ÕÅÈíÅ̵½°²×°ÓÐ Etherboot µÄ»úÆ÷µÄÇý¶¯Æ÷À È»ºó°Ñµ±Ç°Â·¾¶¸Äµ½ src Ŀ¼¡ª¡ªÔÚ Etherboot Ê÷Ï£¬ ½Ó×ÅÊäÈ룺

# gmake bin32/devicetype.fd0
        

¡¡¡¡devicetype ÒÀÀµÓÚÎÞÅ̹¤×÷Õ¾ÉϵÄÒÔÌ«Íø¿¨µÄÀàÐÍ¡£ ²Î¿¼ÔÚͬһ¸öĿ¼Ï嵀 NIC ÎļþÈ·ÈÏÕýÈ·µÄ devicetype¡£

31.7.2.4 ʹÓÃPXEÆô¶¯

¡¡¡¡Ä¬Èϵأ¬pxeboot(8) ×°ÔØÆ÷ͨ¹ý NFS ×°ÔØÄںˡ£Ëü¿ÉÒÔ±àÒëÀ´Ê¹Óà TFTP¡ª¡ªÍ¨¹ýÔÚÎļþ /etc/make.conf ÀïÖ¸¶¨ LOADER_TFTP_SUPPORT Ñ¡ÏîÀ´´úÌæ¡£ Çë²Î¼û /usr/share/examples/etc/make.conf ÀïµÄ×¢ÊÍ Á˽âÈçºÎÅäÖá£

¡¡¡¡³ý´ËÖ®Í⻹ÓÐÁ½¸öδ˵Ã÷µÄ make.conf Ñ¡Ï¡ªËü¿ÉÄܶÔÓÚÉèÖÃһϵÁпØÖÆÌ¨ÎÞÅÌ»úÆ÷»áÓÐÓ㺠BOOT_PXELDR_PROBE_KEYBOARDºÍ BOOT_PXELDR_ALWAYS_SERIAL¡£

¡¡¡¡µ±»úÆ÷Æô¶¯ÀҪʹÓà PXE£¬ ͨ³£ÐèҪѡÔñ Boot from network Ñ¡Ï¡ªÔÚ BIOS ÉèÖÃÀ »òÕßÔÚ PC ³õʼ»¯µÄʱºòÊäÈëÒ»¸ö¹¦Äܼü (function key)¡£

31.7.2.5 ÅäÖà TFTP ºÍ NFS ·þÎñÆ÷

¡¡¡¡Èç¹ûÄúÕýÔÚʹÓà PXE »ò Etherboot¡ª¡ªÅäÖÃʹÓÃÁË TFTP£¬ÄÇôÄúÐèÒªÔÚÎļþ·þÎñÆ÷ÉÏÆôÓà tftpd£º

  1. ½¨Á¢Ò»¸öĿ¼¡ª¡ª´ÓÄÇÀï tftpd ¿ÉÒÔÌṩÎļþ·þÎñ£¬Èç /tftpboot¡£

  2. °ÑÕâÒ»ÐмÓÈëµ½ /etc/inetd.confÀ

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

    ×¢Òâ: ºÃÏñÓÐһЩ°æ±¾µÄ PXE ÐèÒª TCP °æ±¾µÄ TFTP¡£ ÔÚÕâÖÖÇé¿öÏ£¬¼ÓÈëµÚ¶þÐУ¬Ê¹Óà stream tcp À´´úÌæ dgram udp¡£

  3. Èà inetd ÖØ¶ÁÆäÅäÖÃÎļþ¡£ ÒªÕýÈ·Ö´ÐÐÕâ¸öÃüÁ ÔÚ /etc/rc.conf ÎļþÖбØÐë¼ÓÈë inetd_enable="YES"£º

    # /etc/rc.d/inetd restart
    

¡¡¡¡Äú¿É°Ñ tftpboot Ŀ¼·Åµ½·þÎñÆ÷ÉϵÄʲºÎµØ·½¡£ È·¶¨Õâ¸öλÖÃÉèÖÃÔÚ inetd.conf ºÍ dhcpd.conf Àï¡£

¡¡¡¡ÔÚËùÓеÄÇé¿öÏ£¬Äú¶¼ÐèÒªÆôÓà NFS£¬ ²¢ÇÒ NFS ·þÎñÆ÷Éϵ¼³öÏàÓ¦µÄÎļþϵͳ¡£

  1. °ÑÕâÒ»ÐмÓÈëµ½/etc/rc.confÀ

    nfs_server_enable="YES"
    
  2. ͨ¹ýÍù /etc/exports Àï¼ÓÈëÏÂÃæ¼¸ÐÐ(µ÷Õû¡°ÔØÈëµã¡±ÁУ¬ ²¢ÇÒʹÓÃÎÞÅ̹¤×÷Õ¾µÄÃû×ÖÌæ»» margaux corbieres)£¬ µ¼³öÎļþϵͳ¡ª¡ªÎÞÅ̸ùĿ¼´æÔÚÓÚ´Ë£º

    /data/misc -alldirs -ro margaux corbieres
    
  3. Èà mountd ÖØ¶ÁËüµÄÅäÖÃÎļþ¡£Èç¹ûÄúÕæµÄÐèÒªÆôÓõÚÒ»²½µÄ /etc/rc.conf Àï NFS£¬ Äú¿ÉÄܾÍÒªÖØÆôϵͳÁË¡£

    # /etc/rc.d/mountd restart
    

31.7.2.6 ½¨Á¢ÎÞÅÌÄÚºË

¡¡¡¡Èç¹ûÄúÔÚʹÓà Etherboot£¬ ÄúÐèҪΪÎÞÅ̿ͻ§¶Ë½¨Á¢ÄÚºËÅäÖÃÎļþ£¬ ʹÓÃÈçÏÂÑ¡Ïî(³ýÁ˳£Ê¹ÓõÄÍâ)£º

options     BOOTP          # Use BOOTP to obtain IP address/hostname
options     BOOTP_NFSROOT  # NFS mount root filesystem using BOOTP info
        

¡¡¡¡Äú¿ÉÄÜÒ²ÏëʹÓà BOOTP_NFSV3£¬ BOOT_COMPAT ºÍ BOOTP_WIRED_TO (²Î¿¼ NOTES Îļþ)¡£

¡¡¡¡ÕâЩÃû×Ö¾ßÓÐÀúÊ·ÐÔ£¬²¢ÇÒÓÐЩÓÐЩÎóµ¼£¬ ÒòΪËüÃÇʵ¼ÊÉÏÆôÓÃÁËÄÚºËÀï (Ëü¿ÉÄÜÇ¿ÖÆÏÞÖÆ BOOTP »ò DHCP µÄʹÓÃ)£¬Óë DHCP ºÍ BOOTP µÄÎ޹صÄÓ¦Óá£

¡¡¡¡±àÒëÄÚºË(²Î¿¼µÚ 8 ÕÂ)£¬ È»ºó½«Ëü¸´ÖƵ½ dhcpd.conf ÀïÖ¸¶¨µÄµØ·½¡£

×¢Òâ: µ±Ê¹Óà PXE À ʹÓÃÒÔÉÏÑ¡ÏÁ¢Äں˲¢²»×öÑϸñÒªÇó(¾¡¹Ü½¨ÒéÕâÑù×ö)¡£ ÆôÓÃËüÃÇ»áÔÚÄÚºËÆô¶¯Ê±ÒýÆð¸ü¶àµÄ DHCP Ìá¼°¹ýµÄÇëÇ󣬴øÀ´µÄССµÄ·çÏÕÊÇÔÚÓÐÐ©ÌØÊâÇé¿öÏÂÐÂÖµºÍÓÉ pxeboot(8) È¡»ØµÄÖµÖ®¼äµÄ²»Ò»ÖÂÐÔ¡£ ʹÓÃËüÃǵĺô¦ÊÇÖ÷»úÃû»á±»¸½´øÉèÖ᣷ñÔò£¬ Äú¾ÍÐèҪʹÓÃÆäËüµÄ·½·¨À´ÉèÖÃÖ÷»úÃû£¬ÈçÔÚ¿Í»§¶ËÖ¸¶¨µÄ rc.conf ÎļþÀï¡£

×¢Òâ: ΪÁËʹ´øÓÐ Etherboot µÄÄں˿ÉÒýµ¼£¬¾ÍÐèÒª°ÑÉ豸Ìáʾ (device hint) ±àÒë½øÈ¥¡£Í¨³£ÒªÔÚÅäÖÃÎļþ(²é¿´ NOTES ÅäÖÃ×¢ÊÍÎļþ) ÀïÉèÖÃÏÂÁÐÑ¡Ï

hints          "GENERIC.hints"

31.7.2.7 ×¼±¸¸ù(root)Îļþϵͳ

¡¡¡¡ÄúÐèҪΪÎÞÅ̹¤×÷Õ¾½¨Á¢¸ùÎļþϵͳ£¬ Ëü¾ÍÊÇ dhcpd.conf ÀïµÄ root-path ËùÖ¸¶¨µÄĿ¼¡£

31.7.2.7.1 ʹÓà make world À´¸´ÖƸùÎļþϵͳ

¡¡¡¡ÕâÖÖ·½·¨¿ÉÒÔѸËÙ°²×°Ò»¸ö³¹µ×¸É¾»µÄϵͳ (²»½ö½öÊǸùÎļþϵͳ) µ½ DESTDIR¡£ ÄúÒª×öµÄ¾ÍÊǼòµ¥µØÖ´ÐÐÏÂÃæµÄ½Å±¾£º

#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make buildworld && make buildkernel
make installworld && make installkernel
cd /usr/src/etc; make distribution

¡¡¡¡Ò»µ©Íê³É£¬Äú¿ÉÄÜÐèÒª¶¨ÖÆ /etc/rc.conf ºÍ /etc/fstab¡ª¡ª¸ù¾ÝÄúµÄÐèÒª·Åµ½ DESTDIRÀï¡£

31.7.2.8 ÅäÖÃ swap(½»»»)

¡¡¡¡Èç¹ûÐèÒª£¬Î»ÓÚ·þÎñÆ÷ÉϵĽ»»»Îļþ¿ÉÒÔͨ¹ý NFS À´·ÃÎÊ¡£

31.7.2.8.1 NFS ½»»»Çø

¡¡¡¡Äں˲¢²»Ö§³ÖÔÚÒýµ¼Ê±ÆôÓà NFS ½»»»Çø¡£ ½»»»Çø±ØÐëͨ¹ýÆô¶¯½Å±¾ÆôÓ㬠Æä¹ý³ÌÊǹҽÓÒ»¸ö¿ÉдµÄÎļþϵͳ£¬ ²¢ÔÚÆäÉÏ´´½¨²¢ÆôÓý»»»Îļþ¡£ Òª½¨Á¢³ß´çºÏÊʵĽ»»»Îļþ£¬ ¿ÉÒÔÕâÑù×ö£º

# dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000

¡¡¡¡ÒªÆôÓÃËü£¬ÄúÐëÒª°ÑÏÂÃæ¼¸Ðмӵ½ rc.confÀ

swapfile=/path/to/swapfile

31.7.2.9 ÔÓÏîÎÊÌâ

31.7.2.9.1 ÔËÐÐʱ /usr ÊÇÖ»¶ÁÔÚ

¡¡¡¡Èç¹ûÎÞÅ̹¤×÷Õ¾ÊÇÅäÖÃÀ´Ö§³Ö X£¬ ÄÇôÄú¾Í±ØÐëµ÷Õû XDM ÅäÖÃÎļþ£¬ÒòΪËüĬÈϰѴíÎóÐÅϢдµ½ /usr¡£

31.7.2.9.2 ʹÓÃ·Ç FreeBSD ·þÎñÆ÷

¡¡¡¡µ±ÓÃ×÷¸ùÎļþϵͳµÄ·þÎñÆ÷ÔËÐеÄÊDz» FreeBSD£¬ÄúÐëÒªÔÚ FreeBSD »úÆ÷ÉϽ¨Á¢¸ùÎļþϵͳ£¬ È»ºó°ÑËü¸´ÖƵ½ËüµÄÄ¿µÄµØ£¬Ê¹ÓõÄÃüÁî¿ÉÒÔÊÇ tar »ò cpio¡£

¡¡¡¡ÔÚÕâÖÖÇé¿öÏ£¬ÓÐʱ¶ÔÓÚ /dev ÀïµÄÒ»Ð©ÌØÊâµÄÎļþ»áÓÐÎÊÌ⣬ԭÒò¾ÍÊDz»Í¬µÄ ¡°×î´ó/×îС¡±ÕûÊý´óС¡£ Ò»ÖÖ½â¾öµÄ·½·¨¾ÍÊÇ´Ó·Ç FreeBSD ·þÎñÀïµ¼³öÒ»¸öĿ¼£¬ ²¢°ÑËüÔØÈë FreeBSD µ½»ú×ÓÉÏ£¬ ²¢Ê¹Óà devfs(5) À´ÎªÓû§Í¸Ã÷µØ·ÖÅÉÉ豸½Úµã¡£

±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.