Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27752
  • 博文数量: 6
  • 博客积分: 286
  • 博客等级: 二等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-11 19:27
文章分类
文章存档

2011年(6)

我的朋友

分类: BSD

2011-08-12 17:31:39

写给不了解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. CONF_BUILD='
  6. #NO_KLDLOAD=YES
  7. #NO_NETGRAPH=YES
  8. #NO_PAM=YES
  9. '
  10. CONF_INSTALL='
  11. #NO_ACPI=YES
  12. NO_BLUETOOTH=YES
  13. #NO_CVS=YES
  14. #NO_FORTRAN=YES
  15. #NO_HTML=YES
  16. #NO_LPR=YES
  17. #NO_MAN=YES
  18. #NO_SENDMAIL=YES
  19. NO_SHAREDOCS=YES
  20. NO_EXAMPLES=YES
  21. #NO_INSTALLLIB=YES
  22. #NO_CALENDAR=YES
  23. #NO_MISC=YES
  24. #NO_SHARE=YES
  25. '
  26. CONF_WORLD='
  27. #NO_BIND=YES
  28. #NO_MODULES=YES
  29. #NO_KERBEROS=YES
  30. NO_GAMES=YES
  31. #NO_RESCUE=YES
  32. #NO_LOCALES=YES
  33. #NO_SYSCONS=YES
  34. #NO_INFO=YES
  35. '
  36. FlashDevice pqi 2g
  37. cust_nobeastie() (
  38. touch ${NANO_WORLDDIR}/boot/loader.conf
  39. echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
  40. )
  41. install_packages() (
  42. #mkdir -p ${NANO_WORLDDIR}/packages
  43. #cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
  44. chroot ${NANO_WORLDDIR} sh -c 'pkg_add -r bash mpd5 lrzsz vim-lite screen iftop python mtr;'
  45. echo "has finished!"
  46. #rm -rf ${NANO_WORLDDIR}/packages
  47. )
  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. )
  52. customize_cmd cust_conf
  53. customize_cmd install_packages
  54. customize_cmd cust_comconsole
  55. customize_cmd cust_install_files
  56. customize_cmd cust_allow_ssh_root
  57. 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. )
  8. cust_conf() (
  9. cp -f /usr/src/tools/tools/nanobsd/conf/* ${NANO_WORLDDIR}/etc
  10. cp -f /usr/src/tools/tools/nanobsd/root/.cshrc ${NANO_WORLDDIR}/root/.cshrc
  11. cp -f /usr/src/tools/tools/nanobsd/root/.vimrc ${NANO_WORLDDIR}/root/.vimrc
  12. cp -f /etc/resolv.conf ${NANO_WORLDDIR}/etc/
 [/code]第一部分顾名思义就是安装常用包了。原版说的是要把所有的安装包下载在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  lsstarboy   芭比小柒的帮助

怎么样 happy吧? 还不快制作自己的定制系统去?
阅读(2393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~