基于 OpenWrt 的 Linux 无盘工作站方案
本文要介绍的,是在使用OpenWrt的无线路由器上搭建服务器并以此启动计算机并运行桌面应用的一套方案。
整个方案要用到的硬件:
- 一个刷好OpenWrt的带USB接口和有线网络接口的无线路由器(TP-LINK TL-WR720N V3)
- 一个U盘(PNY 8G)
- 一根双绞交叉网线
- 一台支持网络启动的电脑(Acer 4738G)
本方案使用的系统为Ubuntu,对版本没有特别的要求,但早期的版本不保证一定能成功,所以首先要准备Ubuntu的Live CD的iso镜像,我使用的是ubuntu-12.04.1-desktop-amd64.iso,如果你的电脑的内存不是很大(我的6G)建议使用32位的镜像。
下面正式进入实际操作,第一步是挂载U盘,这个可以灵活一些,我的情况是路由器只有4M Flash空间,不足以安装我所需的所有软件包,所以我将U盘分为三个分区:
- /dev/sda1 ext4 512M
- /dev/sda2 swap 16M
- /dev/sda3 ntfs 6.89G
其中sda1
挂载到/overlay
,sda2
是交换分区,而sda3则是数据存储分区,它会被OpenWrt自动挂载到/mnt/sda3
,关于挂载U盘分区到/overlay
的细节,可以参考http://blog.nanpuyue.com/2012/011.html的后半部分。
如果你的路由器剩余空间足够大到可以安装下面的软件包,你可以不用挂载U盘分区到/overlay
。总之,在确保路由器有足够空间安装所需软件包后安装nfs-kernel-server-utils
即可。
opkg update
opkg install nfs-kernel-server-utils
这样,路由器会自动安装nfs-kernel-server-utils
及其依赖,当然,在安装是有可能出现内核模块(kmod-*)不能安装的问题,这不在本文的讨论范围。
安装好所需软件包后,就是文件的就位和各种配置了。首先你要确定文件存放位置,这里涉及到两个文件夹,一个是网络启动相关的,一个是nfs相关的,前者用于存放网络启动引导文件,后者用于存放Ubuntu的spuashfs文件系统。当然,它们可以是同一个文件夹,但是我并不推荐那样做。
最后,我的两个文件夹分别是/mnt/sda3/tftproot
和/mnt/sda3/nfsroot
。
然后是上传文件,具体怎么上传,没有要求,只要能将文件放到指定位置即可,可以是scp、ftp、或者通过samba,甚至是将U盘直接查到电脑上复制,都没有关系。
将Ubuntu Live CD中的casper
上传到/mnt/sda3/nfsroot
,而/mnt/sda3/tftproot
下则需要有以下文件:
- pxelinux.0
- vesamenu.c32
- vmlinuz
- initrd.lz
其中pxelinux.0
和vesamenu.c32
可以通过下载得到,我是从Debian的ftp上下载到的:
pxelinux.0
vesamenu.c32
而vmlinuz
和initrd.lz
则来自Ubuntu Live CD下的casper
目录。
然后还需要在/mnt/sda3/tftproot
下新建目录pxelinux.cfg
目录,并在pxelinux.cfg
下新建文件default
:
cd /mnt/sda3/tftproot
mkdir pxelinux.cfg
vi pxelinux.cfg/default
default
中需要写入如下内容:
default vesamenu.c32
prompt 0
timeout 30
menu title UBUNTU LIVE
label ^Ubuntu Desktop
kernel vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.1.1:/mnt/sda3/nfsroot initrd=initrd.lz locale=zh_CN.UTF-8
其中的nfsroot=192.168.1.1:/mnt/sda3/nfsroot
这个参数是要根据实际情况而定的,前面的192.168.1.1
是你的路由器的IP,而后面则是之前确定的nfs的目录。
到这里,所有的文件都已准备妥当了,剩下的就是配置tftp和nfs服务器了,tftp服务器的配置参考http://blog.nanpuyue.com/2012/012.html最后一步,前面的都不用做,只需要完成Web界面的设置即可:
TFTP服务器根目录 /mnt/sda3/tftproot
网络启动镜像 pxelinux.0
然后是配置nfs:
vi /etc/exports
先注释掉原来仅有的一行(在/mnt *(ro,all_squash,insecure,sync)
前面插入一个#
),然后添加一行:
/mnt/sda3/nfsroot *(async,no_root_squash,no_subtree_check,ro)
最后启动nfs服务:
/etc/init.d/portmap start
/etc/init.d/nfsd start
如果需要nfs服务自启,则要执行:
/etc/init.d/portmap enable
/etc/init.d/nfsd enable
你也可以在Web界面的“系统”-“启动项”下控制上面两个服务。
至此,整个搭建过程就完成了,剩下的,就是插上网线,重启电脑并选择从网络启动了。
然后你会看到下面的界面,这时按下回车或者等待3秒Ubuntu就会启动了,需要提醒的是,启动后与使用CD光盘启动无异,你对系统所做的更改都不会被保存。
好棒