Chinaunix
标题:
[原创]基于FREEBSD的NANOBSD制作
[打印本页]
作者:
blackjack550
时间:
2011-08-11 11:21
标题:
[原创]基于FREEBSD的NANOBSD制作
本帖最后由 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配置文件,配置文件内容如下:
NANO_NAME=mini
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 pqi 2g
cust_nobeastie() (
touch ${NANO_WORLDDIR}/boot/loader.conf
echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
)
install_packages() (
#mkdir -p ${NANO_WORLDDIR}/packages
#cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
chroot ${NANO_WORLDDIR} sh -c 'pkg_add -r bash mpd5 lrzsz vim-lite screen iftop python mtr;'
echo "has finished!"
#rm -rf ${NANO_WORLDDIR}/packages
)
cust_conf() (
cp -f /usr/src/tools/tools/nanobsd/conf/* ${NANO_WORLDDIR}/etc
cp -f /usr/src/tools/tools/nanobsd/root/.cshrc ${NANO_WORLDDIR}/root/.cshrc
)
customize_cmd cust_conf
customize_cmd install_packages
customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
复制代码
看了上面的配置文件很多人会发现这不是跟官方差不多么。对啊,其实官方给了一部分自定制咱们可以根据上面的来修改。
言简意赅,说点精华的解释上半边多是对于nanobsd的buildworld的配置没啥好说的,这部分的详细配置什么意思我也没有找到非常权威的文档。我只是字面理解的意思去掉一些我想保留的东西而已。
比较重要的就是kernel这部分,我使用了自定制的kernel但是大家要知道kernel的配置文件可不在这个目录下,kernel的配置文件在/usr/src/sys/i386/conf/编辑完放在这里就可以了(amd64系统的话自己定位下kernel的文件位置就好)如果只定制kernel调好配置文件就ok了
主要来说说定制化我的定制化的位置在
install_packages() (
#mkdir -p ${NANO_WORLDDIR}/packages
#cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
chroot ${NANO_WORLDDIR} sh -c 'pkg_add -r bash mpd5 lrzsz vim-lite screen iftop python mtr;'
echo "has finished!"
#rm -rf ${NANO_WORLDDIR}/packages
)
cust_conf() (
cp -f /usr/src/tools/tools/nanobsd/conf/* ${NANO_WORLDDIR}/etc
cp -f /usr/src/tools/tools/nanobsd/root/.cshrc ${NANO_WORLDDIR}/root/.cshrc
cp -f /usr/src/tools/tools/nanobsd/root/.vimrc ${NANO_WORLDDIR}/root/.vimrc
cp -f /etc/resolv.conf ${NANO_WORLDDIR}/etc/
)
复制代码
第一部分顾名思义就是安装常用包了。原版说的是要把所有的安装包下载在package里面,我之前就是这么干的。但是太麻烦了。因为很多的包依赖关系无法解决。你也不能全安装,因为安装有顺序,因此我使用pkg_add -r xxx的模式安装。这样省事多了。但是你要知道,尴尬之作玩的系统是无法域名解析的。所以
cp -f /etc/resolv.conf ${NANO_WORLDDIR}/etc/
这句是不能少的。
脚本执行的顺序
customize_cmd cust_conf
customize_cmd install_packages
customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
复制代码
你可别小瞧这个顺序他决定了由上到下的执行顺序你看我的拷贝resolv.conf的命令放在cust_conf里面执行如果你放在cust_install_packages这个方法的下面去运行那你刚才的pkg_add -r 就无效了
问题的解决与调试
编译出来的文件放在/usr/obj/nanobsd.*下面
_.bk _.cust.cust_install_files _.disk.image _.fdisk _.w/
_.bw _.cust.cust_nobeastie _.dl _.ik make.conf.build
_.cust.cust_allow_ssh_root _.cust.install_packages _.du _.iw make.conf.install
_.cust.cust_comconsole _.di _.env _.mnt/ usr/
_.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个小时,调试不了多久发现问题,于是再重来。很费时费力。于是看了看这个命令发现还有说明
nanobsd# sh nanobsd.sh -h
Usage: nanobsd.sh [-bikqvw] [-c config_file]
-b suppress builds (both kernel and world)
-i suppress disk image build
-k suppress buildkernel
-n add -DNO_CLEAN to buildworld, buildkernel, etc
-q make output more quite
-v make output more verbose
-w suppress buildworld
-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卡的物理结构
transcend)
case $a2 in
dom064m)
NANO_MEDIASIZE=125184
NANO_HEADS=4
NANO_SECTS=32
;;
2048|2g)
NANO_MEDIASIZE=4061232
NANO_HEADS=16
NANO_SECTS=32
;;
*)
echo "Unknown Transcend Flash capacity"
exit 2
;;
esac
;;
复制代码
物理结构的查看方法如下:
fdisk /dev/da0
4G U盘为例:
cylinders=488 heads=255 sectors/track=63 (1008 blks/cyl)
mediasize = cylinders * heads * sectors
感谢CU 16hotcom lsstarboy 芭比小柒的帮助
怎么样 happy吧? 还不快制作自己的定制系统去?
作者:
lsstarboy
时间:
2011-08-11 11:59
惭愧,被感谢了。
作者:
芭比小柒
时间:
2011-08-11 12:20
惭愧,被感谢了
其实嘛,芭比小柒只是个马甲嘛。。。所以头像都没换过
作者:
blackjack550
时间:
2011-08-11 12:22
惭愧,被感谢了。
lsstarboy 发表于 2011-08-11 11:59
哈哈, 给了不少帮助呢。我觉得这个玩意儿还挺好玩的。现在弄出来的bsd可以满足目前的应用需求,有很多不用写硬盘的环境用这种东西很方便呢。最后还是用pkg_add -r的模式解决的原来那个还是不行,有点弄不明白pkg_add需要依赖包到底是去哪里查找的。还是可以通过参数设置。
作者:
TOLLY
时间:
2011-08-11 13:26
还没有看懂,和标准的Freebsd就是定制和精简吗?
作者:
blackjack550
时间:
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
作者:
zeissoctopus
时间:
2011-08-11 17:50
讚! 有關 nanobsd 中文資料實在太罕有
作者:
芭比小柒
时间:
2011-08-11 19:57
回复
4#
blackjack550
tbz包里有以来信息的
作者:
芭比小柒
时间:
2011-08-11 20:04
回复
5#
TOLLY
nano完全活动在内存的
作者:
芭比小柒
时间:
2011-11-02 12:15
{:3_195:}cp -f 突然发现你喜欢加-f 这样好像打错命令也不会提示的{:3_191:}
作者:
axlrose
时间:
2011-11-02 13:38
感谢分享,以前曾想折腾一下这玩意,结果没有好的文档也就算了,哪天空了折腾一下
作者:
16hotcom
时间:
2011-11-10 14:14
作者:
dooros
时间:
2011-11-11 15:10
这玩意儿不错啊。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2