分享

基于FREEBSD的NANOBSD制作

 enchen008 2012-06-29

写给不了解nanobsd的人的话

nanobsd是一种类似嵌入式的系统封装,可以自定义内核和软件。多用于防火墙网关或者固定用途的服务器。nanobsd比较方便灵活的制作此类系统。并且系统的控制将不使用显示器,而是使用RJ-232串口进行控制,就像使用cisco交换机和一些工控设备一样,很方便。 

看了那么多网上的帖子其实没有很好的对于nanobsd的安装说明,于是只是自己摸索着干,相信能查到这篇文章的人一定已经,看过freebsd的官方手册。写的真是少而又少。当然在我理解如果你想制作nanobsd你需要有一定的知识背景。

1.了解freebsd的内核编译(build kernel)

2.了解freebsd的环境编译(build world)

这两个是前提如果这两个都不清楚的话。估计你是无法定制化的。但是起码你可以制作自己的,nanobsd因为nanobsd的制作其实就是一个脚本命令可以说是“一键无脑流”。这篇文章主要是为了想实现定制化的大伙儿们写的

NANOBSD的制作流程

首先请注意,制作freebsd的nano系统最好安装的时候吧src源码装全,否则无尽的纠结等待着你

NANOBSD 生成需要几个步骤,相信用过几次的人都知道

1.buildworld(环境编译)

2.kernelbuild(内核编译)

3.installworld(环境安装)

4.installkernel(内核安装)

5.开始自定义配置

6.制作镜像

开始制作

看着很烦那么多东西哈。其实都是一个脚本解决的。脚本的位置就是:/usr/src/tools/tools/nanobsd/

进入目录你可以新建立一个mynano.conf配置文件,配置文件内容如下:

  1. NANO_NAME=mini 
  2. NANO_SRC=/usr/src 
  3. NANO_KERNEL=MYKERNEL 
  4. NANO_IMAGES=2 
  5.  
  6. CONF_BUILD=' 
  7. #NO_KLDLOAD=YES 
  8. #NO_NETGRAPH=YES 
  9. #NO_PAM=YES 
  10.  
  11. CONF_INSTALL=' 
  12. #NO_ACPI=YES 
  13. NO_BLUETOOTH=YES 
  14. #NO_CVS=YES 
  15. #NO_FORTRAN=YES 
  16. #NO_HTML=YES 
  17. #NO_LPR=YES 
  18. #NO_MAN=YES 
  19. #NO_SENDMAIL=YES 
  20. NO_SHAREDOCS=YES 
  21. NO_EXAMPLES=YES 
  22. #NO_INSTALLLIB=YES 
  23. #NO_CALENDAR=YES 
  24. #NO_MISC=YES 
  25. #NO_SHARE=YES 
  26.  
  27. CONF_WORLD=' 
  28. #NO_BIND=YES 
  29. #NO_MODULES=YES 
  30. #NO_KERBEROS=YES 
  31. NO_GAMES=YES 
  32. #NO_RESCUE=YES 
  33. #NO_LOCALES=YES 
  34. #NO_SYSCONS=YES 
  35. #NO_INFO=YES 
  36.  
  37. FlashDevice pqi 2g 
  38.  
  39. cust_nobeastie() ( 
  40.     touch ${NANO_WORLDDIR}/boot/loader.conf 
  41.     echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf 
  42. install_packages() ( 
  43. #mkdir -p ${NANO_WORLDDIR}/packages 
  44. #cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages 
  45. chroot ${NANO_WORLDDIR} sh -c 'pkg_add -r bash mpd5 lrzsz vim-lite screen iftop python mtr;' 
  46. echo "has finished!" 
  47. #rm -rf ${NANO_WORLDDIR}/packages 
  48. cust_conf() ( 
  49. cp -f /usr/src/tools/tools/nanobsd/conf/* ${NANO_WORLDDIR}/etc 
  50. cp -f /usr/src/tools/tools/nanobsd/root/.cshrc ${NANO_WORLDDIR}/root/.cshrc 
  51. customize_cmd cust_conf 
  52. customize_cmd install_packages 
  53. customize_cmd cust_comconsole 
  54. customize_cmd cust_install_files 
  55. customize_cmd cust_allow_ssh_root 
  56. customize_cmd cust_nobeastie 

看了上面的配置文件很多人会发现这不是跟官方差不多么。对啊,其实官方给了一部分自定制咱们可以根据上面的来修改。

言简意赅,说点精华的解释上半边多是对于nanobsd的buildworld的配置没啥好说的,这部分的详细配置什么意思我也没有找到非常权威的文档。我只是字面理解的意思去掉一些我想保留的东西而已。

比较重要的就是kernel这部分,我使用了自定制的kernel但是大家要知道kernel的配置文件可不在这个目录下,kernel的配置文件在/usr/src/sys/i386/conf/编辑完放在这里就可以了(amd64系统的话自己定位下kernel的文件位置就好)如果只定制kernel调好配置文件就ok了

主要来说说定制化我的定制化的位置在

  1. install_packages() ( 
  2. #mkdir -p ${NANO_WORLDDIR}/packages 
  3. #cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages 
  4. chroot ${NANO_WORLDDIR} sh -c 'pkg_add -r bash mpd5 lrzsz vim-lite screen iftop python mtr;' 
  5. echo "has finished!" 
  6. #rm -rf ${NANO_WORLDDIR}/packages 
  7. cust_conf() ( 
  8. cp -f /usr/src/tools/tools/nanobsd/conf/* ${NANO_WORLDDIR}/etc 
  9. cp -f /usr/src/tools/tools/nanobsd/root/.cshrc ${NANO_WORLDDIR}/root/.cshrc 
  10. cp -f /usr/src/tools/tools/nanobsd/root/.vimrc ${NANO_WORLDDIR}/root/.vimrc
  11. cp -f /etc/resolv.conf ${NANO_WORLDDIR}/etc/
  12. ) 

第一部分顾名思义就是安装常用包了。原版说的是要把所有的安装包下载在package里面,我之前就是这么干的。但是太麻烦了。因为很多的包依赖关系无法解决。你也不能全安装,因为安装有顺序,因此我使用pkg_add -r xxx的模式安装。这样省事多了。但是你要知道,尴尬之作玩的系统是无法域名解析的。所以

cp -f /etc/resolv.conf ${NANO_WORLDDIR}/etc/

这句是不能少的。

脚本执行的顺序

  1. customize_cmd cust_conf 
  2. customize_cmd install_packages 
  3. customize_cmd cust_comconsole 
  4. customize_cmd cust_install_files 
  5. customize_cmd cust_allow_ssh_root 
  6. customize_cmd cust_nobeastie 

你可别小瞧这个顺序他决定了由上到下的执行顺序你看我的拷贝resolv.conf的命令放在cust_conf里面执行如果你放在cust_install_packages这个方法的下面去运行那你刚才的pkg_add -r 就无效了

问题的解决与调试

编译出来的文件放在/usr/obj/nanobsd.*下面

  1. _.bk                        _.cust.cust_install_files   _.disk.image                _.fdisk                     _.w/ 
  2. _.bw                        _.cust.cust_nobeastie       _.dl                        _.ik                        make.conf.build 
  3. _.cust.cust_allow_ssh_root  _.cust.install_packages     _.du                        _.iw                        make.conf.install 
  4. _.cust.cust_comconsole      _.di                        _.env                       _.mnt/                      usr/ 
  5. _.cust.cust_conf            _.disk.full                 _.etc                       _.mtree 

问题的解决多数都有日志,记得多看看日志对你分析问题很有帮助

这个目录的说明

_.bk       buildkernel日志

_.bw      buildworld日志

_.cust.*  conf文件配置的函数执行的日志

_.di        制作diskimage日志

_.disk.full  制作好的磁盘镜像

_.disk.image 升级磁盘的镜像

_.ik  _.iw    安装kernel和world的日志

_.w         编译好的系统目录。可以chroot _.w进入环境

最后来点亮点说说nanobsd.sh这个脚本,之前总是一次一次的编译,运行一次将近3个小时,调试不了多久发现问题,于是再重来。很费时费力。于是看了看这个命令发现还有说明

  1. nanobsd# sh nanobsd.sh -h 
  2. Usage: nanobsd.sh [-bikqvw] [-c config_file] 
  3.         -b      suppress builds (both kernel and world) 
  4.         -i      suppress disk image build 
  5.         -k      suppress buildkernel 
  6.         -n      add -DNO_CLEAN to buildworld, buildkernel, etc 
  7.         -q      make output more quite 
  8.         -v      make output more verbose 
  9.         -w      suppress buildworld 
  10.         -c      specify config file 

一般运行使用sh nanobsd.sh -c mynano.conf就可以了

如果只是调试软件安装包不buildworld和buildkernel(因为这两个最费时)就可以用如下命令

sh nanobsd.sh -b -c mynano.conf

CF卡制作

有一点忘记说了,就是系统做完了需要写入CF卡吧? 系统内置了几种支持的CF卡

配置文件FlashDevice.sub

transcend创见  64m 2g

siliconsystems  256m  4g

sandisk       32m    64m   128m   256m   512m    1g  2g  4g

hitachi(日立)   256m 

kodak(柯达) 64m

还有些个没见过的牌子,如果不想麻烦制作nanobsd。推荐大家买sandisk俗称闪迪。

不过我非常丧,我的卡是pqi的每个卡的尺寸虽然都是标称2G但是详细结构可能不一样。这个还需要大家通过命令查看自己的CF卡的物理结构

  1. transcend) 
  2.                 case $a2 in 
  3.                 dom064m) 
  4.                         NANO_MEDIASIZE=125184 
  5.                         NANO_HEADS=4 
  6.                         NANO_SECTS=32 
  7.                         ;; 
  8.                 2048|2g) 
  9.                         NANO_MEDIASIZE=4061232 
  10.                         NANO_HEADS=16 
  11.                         NANO_SECTS=32 
  12.                         ;; 
  13.                 *) 
  14.                         echo "Unknown Transcend Flash capacity" 
  15.                         exit 2 
  16.                         ;; 
  17.                 esac 
  18.                 ;; 

物理结构的查看方法如下:

fdisk /dev/da0
4G U盘为例:
cylinders=488 heads=255 sectors/track=63 (1008 blks/cyl)


mediasize = cylinders * heads * sectors 

感谢CU 16hotcom的回复

怎么样 happy吧? 还不快制作自己的定制系统去?

本文出自 “BlackJack” 博客,请务必保留此出处http://472544.blog.51cto.com/462544/635741

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多