写给不了解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的回复
怎么样 happy吧? 还不快制作自己的定制系统去?