2 ÈçºÎʹÓà NanoBSD

2.1 NanoBSD µÄÉè¼Æ

¡¡¡¡Ò»µ©½«Ó³Ïñ´æÈë½éÖÊ£¬ ¾Í¿ÉÒÔÓÃËüÀ´Òýµ¼ NanoBSD ÁË¡£ ĬÈÏÇé¿öÏ£¬ ´óÈÝÁ¿´æ´¢Æ÷»á»®·ÖΪÈý¸öÇø£º

¡¡¡¡ÕâЩ·ÖÇøÄ¬ÈÏÇé¿öÏÂÒÔÖ»¶Á·½Ê½¹Ò½Ó¡£

¡¡¡¡/etc ºÍ /var Ŀ¼¾ùΪ md(4) (malloc) ÅÌ¡£

¡¡¡¡ÅäÖÃÎļþ·ÖÇø±£´æÔÚ /cfg Ŀ¼¡£ Ëü°üº¬ÁËÓÃÓÚ /etc Ŀ¼µÄÎļþ£¬ ÔÚÆô¶¯Ö®ºóÔÝʱÒÔÖ»¶Á·½Ê½¹Ò½Ó¡£ Òò´Ë£¬ ÔÚÐèÒª´Ó /etc Ïò /cfg Ŀ¼¸´ÖÆËù½øÐеġ¢ Ï£ÍûÔÚÖØÆôʱ±£³Ö²»±äµÄÅäÖÃʱ£¬ ÐèÒª½øÐÐһЩ¶îÍâµÄ²Ù×÷¡£

Àý 1. ÔÚ /etc/resolv.conf ÖнøÐÐÐèÒª±£³ÖµÄÐÞ¸Ä

# vi /etc/resolv.conf
[...]
# mount /cfg
# cp /etc/resolv.conf /cfg
# umount /cfg

×¢Òâ: Ö»ÓÐÔÚϵͳÆô¶¯¹ý³ÌÖУ¬ ÒÔ¼°ÐèÒªÐÞ¸ÄÅäÖÃÎļþµÄ³¡ºÏ£¬ ²ÅÐèÒª¹Ò½Ó°üº¬ /cfg µÄÄǸö·ÖÇø¡£

ÔÚÈκÎʱºò¶¼±£³Ö¹Ò½Ó /cfg ²»ÊÇÒ»¸öºÃÖ÷Ò⣬ ÌØ±ðÊǵ±Äú°Ñ NanoBSD ·ÅÔÚ²»ÊʺϽøÐдóÁ¿Ð´²Ù×÷µÄ·ÖÇøÊ± (ÓÉÓÚÎļþϵͳµÄͬ²½½ø³Ì»á¶¨ÆÚÏòϵͳÅÌдһЩÊý¾Ý)¡£

2.2 ¹¹½¨ NanoBSD Ó³Ïñ

¡¡¡¡NanoBSD Ó³ÏñÊÇͨ¹ýʹÓ÷dz£¼òµ¥µÄ nanobsd.sh shell ½Å±¾À´¹¹½¨µÄ£¬ Õâ¸ö½Å±¾¿ÉÒÔÔÚ /usr/src/tools/tools/nanobsd Ŀ¼ÖÐÕÒµ½¡£ Õâ¸ö½Å±¾½¨Á¢µÄÓ³ÏñÎļþ£¬ ¿ÉÒÔÓà dd(1) ¹¤¾ß¸´ÖƵ½´æ´¢½éÖÊÉÏ¡£

¡¡¡¡¹¹½¨ NanoBSD Ó³ÏñËùÐèµÄÃüÁîÊÇ£º

# cd /usr/src/tools/tools/nanobsd (1)
# sh nanobsd.sh (2)
# cd /usr/obj/nanobsd.full (3)
# dd if=_.disk.full of=/dev/da0 bs=64k (4)
(1)
½øÈë NanoBSD ¹¹½¨½Å±¾µÄÖ÷Ŀ¼¡£
(2)
¿ªÊ¼¹¹½¨¹ý³Ì¡£
(3)
½øÈë¹¹½¨ºÃµÄÓ³ÏñÎļþËùÔÚµÄĿ¼¡£
(4)
ÔÚ´æ´¢½éÖÊÉϰ²×° NanoBSD¡£

2.3 ¶¨ÖÆ NanoBSD Ó³Ïñ

¡¡¡¡Õâ¿ÉÄÜÊÇ NanoBSD ×îÎªÖØÒª£¬ ͬʱҲÊÇÄú×î¸ÐÐËȤµÄ¹¦ÄÜ¡£ ͬʱ£¬ ÄúÔÚ¿ª·¢ NanoBSD Ó¦ÓÃʱ£¬ ÕâÒ²ÊÇÏ൱ºÄʱµÄ¹ý³Ì¡£

¡¡¡¡Ö´ÐÐÏÂÃæµÄÃüÁʹ nanobsd.sh ´Óµ±Ç°Ä¿Â¼ÖÐµÄ myconf.nano Îļþ¶ÁÈ¡ÅäÖãº

# sh nanobsd.sh -c myconf.nano

¡¡¡¡¶¨Öƹý³Ì°üº¬Á½²½£º

2.3.1 ÅäÖÃÑ¡Ïî

¡¡¡¡Í¨¹ý¶ÔÅäÖýøÐÐÉèÖ㬠¿ÉÒÔÅäÖÃÓÃÒÔ´«µÝ¸ø NanoBSD ¹¹½¨¹ý³ÌÖÐ buildworld ºÍ installworld ½×¶ÎµÄÁª±àºÍ°²×°Ñ¡Ï ÒÔ¼° NanoBSD µÄÖ÷¹¹½¨¹ý³ÌÖеÄÑ¡Ïî¡£ ͨ¹ýʹÓÃÕâЩѡÏî¿ÉÒÔÏ÷¼õϵͳµÄ³ß´ç£¬ ʹ֮Äܹ»·ÅÈë 64MB µÄ´æ´¢¡£ Äú»¹¿ÉÒÔ½øÒ»²½Í¨¹ýÕâЩѡÏîÀ´Ï÷¼õ FreeBSD£¬ Ö±µ½ËüÖ»°üº¬ÄÚºËÒÔ¼°Á½Èý¸öÓû§»·¾³ÎļþΪֹ¡£

¡¡¡¡ÅäÖÃÎļþÖаüº¬ÓÃÒÔ´úÌæÄ¬ÈÏÖµµÄÅäÖÃÑ¡Ïî¡£ ×îÖØÒªµÄÓï¾ä°üÀ¨£º

  • NANO_NAME ©¤©¤ ±¾´Î¹¹½¨µÄÃû³Æ (ÓÃÓÚ´´½¨¹¤×÷Ŀ¼µÄÃû×Ö)¡£

  • NANO_SRC ©¤©¤ ÓÃÒÔÁª±àºÍ¹¹½¨Ó³ÏñµÄÔ´ÂëÊ÷µÄλÖá£

  • NANO_KERNEL ©¤©¤ ÓÃÒÔÁª±àÄں˵ÄÅäÖÃÎļþµÄÃû×Ö¡£

  • CONF_BUILD ©¤©¤ ÓÃÓÚ´«µÝ¸ø buildworld ¹¹½¨½×¶ÎµÄÑ¡Ïî¡£

  • CONF_INSTALL ©¤©¤ ÓÃÓÚ´«µÝ¸ø installworld ¹¹½¨½×¶ÎµÄÑ¡Ïî¡£

  • CONF_WORLD ©¤©¤ ÓÃÒÔ´«µÝ¸ø buildworld ºÍ installworld ÕâÁ½¸ö¹¹½¨½×¶ÎµÄÑ¡Ïî¡£

  • FlashDevice ©¤©¤ ¶¨ÒåËùÓõĽéÖÊÀàÐÍ¡£ ÒªÁË½â½øÒ»²½µÄϸ½Ú£¬ Çë²Î¿¼ FlashDevice.sub Îļþ¡£

2.3.2 ¶¨Öƺ¯Êý

¡¡¡¡Í¨¹ýÔÚÅäÖÃÎļþÖÐʹÓà shell º¯Êý¿ÉÒÔ½øÒ»²½Î¢µ÷ NanoBSD¡£ ÏÂÃæµÄÀý×ÓչʾÁ˶¨Öƺ¯ÊýµÄ»ù±¾Ä£Ê½£º

cust_foo () (
        echo "bar=baz" > \
                ${NANO_WORLDDIR}/etc/foo
)
customize_cmd cust_foo

¡¡¡¡ÏÂÃæÊÇÒ»¸ö¸üÌù½üʵ¼ÊµÄÀý×Ó£¬ Ëü½«Ä¬È쵀 /etc Ŀ¼³ß´ç£¬ ´Ó 5MB µ÷ÕûΪ 30MB£º

cust_etc_size () (
        cd ${NANO_WORLDDIR}/conf
        echo 30000 > default/etc/md_size
)
customize_cmd cust_etc_size

¡¡¡¡³ý´ËÖ®Í⣬ »¹Óм¸¸öĬÈϵÄÔ¤¶¨Ò嶍֯º¯Êý£º

  • cust_comconsole ©¤©¤ ÔÚ VGA É豸ÉϽûÖ¹ getty(8) (/dev/ttyv* É豸½Úµã) ²¢ÆôÓô®¿Ú COM1 ×÷Ϊϵͳ¿ØÖÆÌ¨¡£

  • cust_allow_ssh_root ©¤©¤ ÔÊÐí root ͨ¹ý sshd(8) µÇ¼¡£

  • cust_install_files ©¤©¤ ´Ó nanobsd/Files Ŀ¼Öа²×°Îļþ£¬ Õâ°üº¬Ò»Ð©ÊµÓõÄϵͳ¹ÜÀí½Å±¾¡£

2.3.3 °²×°Ô¤±àÒëÈí¼þ°ü

¡¡¡¡Í¨¹ýÔö¼Ó×Ô¶¨ÒåµÄº¯Êý£¬ ¿ÉÒÔÔÚ NanoBSD Ôö¼ÓÔ¤±àÒëµÄÈí¼þ°ü¡£ ÏÂÃæµÄº¯Êý»áÌí¼ÓλÓÚ /usr/src/tools/tools/nanobsd/packages µÄÈ«²¿Ô¤±àÒëÈí¼þ°ü£º

install_packages () (
mkdir -p ${NANO_WORLDDIR}/packages
cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
chroot ${NANO_WORLDDIR} sh -c 'cd packages; pkg_add -v *;cd ..;'
rm -rf ${NANO_WORLDDIR}/packages
)
customize_cmd install_packages

2.3.4 ÅäÖÃÎļþ¾ÙÀý

¡¡¡¡ÏÂÃæÊÇÒ»¸öÓÃÓÚ¹¹½¨¶¨ÖÆµÄ NanoBSD Ó³ÏñµÄÍêÕûÀý×Ó£º

NANO_NAME=custom
NANO_SRC=/usr/src
NANO_KERNEL=MYKERNEL
NANO_IMAGES=2

CONF_BUILD='
NO_KLDLOAD=YES
NO_NETGRAPH=YES
NO_PAM=YES
'

CONF_INSTALL='
NO_ACPI=YES
NO_BLUETOOTH=YES
NO_CVS=YES
NO_FORTRAN=YES
NO_HTML=YES
NO_LPR=YES
NO_MAN=YES
NO_SENDMAIL=YES
NO_SHAREDOCS=YES
NO_EXAMPLES=YES
NO_INSTALLLIB=YES
NO_CALENDAR=YES
NO_MISC=YES
NO_SHARE=YES
'

CONF_WORLD='
NO_BIND=YES
NO_MODULES=YES
NO_KERBEROS=YES
NO_GAMES=YES
NO_RESCUE=YES
NO_LOCALES=YES
NO_SYSCONS=YES
NO_INFO=YES
'

FlashDevice SanDisk 1G

cust_nobeastie() (
        touch ${NANO_WORLDDIR}/boot/loader.conf
        echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
)

customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie

2.4 ¸üРNanoBSD

¡¡¡¡¸üРNanoBSD Ïà¶Ô¶øÑÔ½ÏΪ¼òµ¥£º

  1. ºÍ֮ǰһÑù¹¹½¨Ð嵀 NanoBSD Ó³ÏñÎļþ¡£

  2. ½«ÐµÄÓ³Ïñ·ÅÈëÕýÔËÐÐµÄ NanoBSD É豸ÖеÄÒ»¸öδÓõķÖÇø¡£

    Óë֮ǰ×î³õ°²×° NanoBSD µÄ²½ÖèÏà±È£¬ ÕâÒ»²½Öè×îÖØÒªµÄÇø±ðÔÚÓÚÕâ´Î²»Ó¦Ê¹Óà _.disk.full Îļþ (Ëü°üº¬Õû¸öÅ̵ÄÓ³Ïñ)£¬ ¶øÓ¦°²×° _.disk.image Ó³Ïñ (Õâ¸öÎļþÖУ¬ Ö»°üº¬Ò»¸öϵͳ·ÖÇø)¡£

  3. ÖØÐÂÆô¶¯£¬ ²¢´Óа²×°µÄ·ÖÇøÖÐÆô¶¯ÏµÍ³¡£

  4. Èç¹ûÒ»ÇÐ˳ÀûµÄ»°£¬ Éý¼¶¹¤×÷¾ÍÍê³ÉÁË¡£

  5. Èç¹û·¢ÉúÁËÈκÎÎÊÌ⣬ Ôò¿ÉÒÔ´ÓÏÈǰµÄ·ÖÇøÆô¶¯ (ÆäÖаüº¬Á˾ɵġ¢ ¿ÉÓõÄÓ³Ïñ)£¬ À´¾¡¿ÉÄÜ¿ìµØ»Ö¸´ÏµÍ³¹¦ÄÜ¡£ ½ÓÏÂÀ´¿ÉÒÔÐÞÕýÐÂÁª±àµÄ°æ±¾ÖдæÔÚµÄÎÊÌ⣬ ²¢Öظ´Ç°Êö²½Öè¡£

¡¡¡¡ÒªÔÚÕýÔÚÔËÐÐµÄ NanoBSD ϵͳÖа²×°ÐµÄÓ³Ïñ£¬ ¿ÉÒÔʹÓÃλÓÚ /root Ŀ¼µÄ updatep1 »ò updatep2 ½Å±¾£¬ ¾ßÌåʹÓÃÄÄÒ»¸ö½Å±¾£¬ È¡¾öÓÚÕýÔÚÔËÐеÄϵͳλÓÚÄǸö·ÖÇø¡£

¡¡¡¡ËæÊ±ÌṩРNanoBSD Ó³ÏñËùÌṩµÄ·þÎñ£¬ ÒÔ¼°²ÉÓõĴ«Êä·½·¨µÄ²»Í¬£¬ Äú¿ÉÒԲο¼²¢Ê¹ÓÃÏÂÁÐÈýÖÖ·½Ê½Ö®Ò»£º

2.4.1 ʹÓà ftp(1)

¡¡¡¡Èç¹û´«ÊäËÙ¶ÈÊǵÚÒ»ÒªÎñ£¬ ²ÉÓÃÏÂÃæµÄÀý×Ó£º

# ftp myhost
get _.disk.image "| sh updatep1"

2.4.2 ʹÓà ssh(1)

¡¡¡¡Èç¹û¸üÇãÏòÓÚ°²È«´«Ê䣬 Ó¦²Î¿¼ÏÂÃæµÄÀý×Ó£º

# ssh myhost cat _.disk.image.gz | zcat | sh updatep1

2.4.3 ʹÓà nc(1)

¡¡¡¡Èç¹ûÔ¶³ÌÖ÷»ú¼È²»Ìṩ ftp(1) ·þÎñ£¬ Ò²²»Ìṩ sshd(8) ·þÎñ£º

  1. ¿ªÊ¼Ê±£¬ ÔÚÌṩӳÏñµÄÖ÷»úÉÏ¿ªÆô TCP ¼àÌý£¬ ²¢ÁîÆä½«Ó³ÏñÎļþ·¢¸ø¿Í»§»ú£º

    myhost# nc -l 2222 < _.disk.image
    

    ×¢Òâ: ÇëÈ·ÈÏÄúËùʹÓõĶ˿ÚûÓÐͨ¹ý·À»ðǽ×èÖ¹À´×Ô NanoBSD ¿Í»§»úµÄÁª½ÓÇëÇó¡£

  2. Á¬½Óµ½ÌṩÐÂÓ³Ïñ·þÎñµÄÖ÷»ú£¬ ²¢Ö´ÐÐ updatep1 ½Å±¾£º

    # nc myhost 2222 | sh updatep1
    

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

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