免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6371 | 回复: 12
打印 上一主题 下一主题

[原创]基于FREEBSD的NANOBSD制作 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-11 11:21 |只看该作者 |倒序浏览
本帖最后由 blackjack550 于 2011-08-11 11:26 编辑

写给不了解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/
复制代码
第一部分顾名思义就是安装常用包了。原版说的是要把所有的安装包下载在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吧? 还不快制作自己的定制系统去?

评分

参与人数 1可用积分 +5 收起 理由
fender0107401 + 5 加分以示鼓励。

查看全部评分

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
2 [报告]
发表于 2011-08-11 11:59 |只看该作者
惭愧,被感谢了。

论坛徽章:
0
3 [报告]
发表于 2011-08-11 12:20 |只看该作者
惭愧,被感谢了

其实嘛,芭比小柒只是个马甲嘛。。。所以头像都没换过

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
4 [报告]
发表于 2011-08-11 12:22 |只看该作者
惭愧,被感谢了。
lsstarboy 发表于 2011-08-11 11:59



    哈哈, 给了不少帮助呢。我觉得这个玩意儿还挺好玩的。现在弄出来的bsd可以满足目前的应用需求,有很多不用写硬盘的环境用这种东西很方便呢。最后还是用pkg_add -r的模式解决的原来那个还是不行,有点弄不明白pkg_add需要依赖包到底是去哪里查找的。还是可以通过参数设置。

论坛徽章:
0
5 [报告]
发表于 2011-08-11 13:26 |只看该作者
还没有看懂,和标准的Freebsd就是定制和精简吗?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
6 [报告]
发表于 2011-08-11 16:47 |只看该作者
还没有看懂,和标准的Freebsd就是定制和精简吗?
TOLLY 发表于 2011-08-11 13:26



    他有很多特性,
       譬如,CF卡中的文件系统全是只读系统。只有/etc/目录可以存放配置文件。但是这个/etc/其实也只是一个临时的分区。

       不过主要作用就是把系统重封装在一个2G的卡里面,如果系统硬件出现故障,直接拔掉卡换台机器就好啦。
      
        详细内容请参考bsd手册:
            http://www.freebsd.org/doc/en/articles/nanobsd/article.html

论坛徽章:
0
7 [报告]
发表于 2011-08-11 17:50 |只看该作者
讚! 有關 nanobsd 中文資料實在太罕有

论坛徽章:
0
8 [报告]
发表于 2011-08-11 19:57 |只看该作者
回复 4# blackjack550


    tbz包里有以来信息的

论坛徽章:
0
9 [报告]
发表于 2011-08-11 20:04 |只看该作者
回复 5# TOLLY


    nano完全活动在内存的

论坛徽章:
0
10 [报告]
发表于 2011-11-02 12:15 |只看该作者
{:3_195:}cp -f 突然发现你喜欢加-f 这样好像打错命令也不会提示的{:3_191:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP