pwl 2011-03-06
关键字:diskless pxe pxelinux pxelinux.0 rhel6 无盘工作站 安装linux无盘工作站 安装企业版linux无盘工作站 安装红帽6无盘工作站 nfs tftp tftpd dhcp dhcpd nfsroot dracut dracut-network
本文记录本人部署linux无盘工作站的过程,本文为回忆录,错漏之处欢迎指正。
一、项目结构:
server(rhel6)*1台------client(rhel6)*1台
二、应用信息表:
server:
rhel6(RedHat enterprise linux 6,ip=192.168.17.7){syslinux+dracut+dhcpd+nfs+tftp(xinetd)}
client:
rhel6(redhat enterprise linux 6,ip=192.168.17.5){}
三、关键说明:
1.linux无盘工作站需要nfsroot(无盘客户端通过nfs把系统的根目录chroot到远处nfs共享目录上,前提是这个共享目录里有做好的无盘)支持,rhel6默认的内核是不支持nfsroot的,所以需要编译内核(必须的---修订1:后来又发现貌似在rhel6上这个不是必须的,因为我无意中启动了老版本的没有编译nfsroot的内核发现无盘客户端照样可以启动,这个样子的话关键就在dracut-network这个软件上了,安装了dracut-network后用dracut命令生成的initramfs文件就是支持nfsroot的关键了,所以下面的部署步骤四里面的1步骤就可以省略了)。
2.linux无盘工作站的客户端在启动的时候需要通过dracut-network来chroot到server上的nfs共享的某个目录,而rhel6默认是没有安装dracut-network的,所以需要自己安装(必须的),dracut则是系统默认安装的。(修订1:这句话有问题,这样说吧:linux无盘工作站的客户端在启动的时候需要chroot到server上的nfs共享的目录,这个目录里的内容必须是装好的无盘客户端的系统文件,要成功chroot需要用到initramfs这个文件,这个文件不能用server里/boot里面原有的那个,需要重新生成一个,重新生成的时候需要dracut-network这个软件的支持,这个软件必须要安装,这个软件就是chroot的关键,系统默认没有安装,需要手工安装,具体生成下面会提到)
3.修订1:关于server上nfs共享的目录里的无盘客户端的系统文件要说明下,这些文件需要包括一套完整的linux操作系统文件,但是你在别的地方做好的系统在把所有文件拷贝到这里的时候需要做系统独立性修改,模板系统里的/sys和/proc目录只要主目录就行了,子目录和文件一概不要,另外还需要修改fstab文件(在server的nfs目录里该文件的位置可能就类似/app/root/etc/fstab这个样子,其中/app/root就是nfs的共享目录,而不是/etc/fstab,请别弄个错)、网卡文件(无盘客户端的网卡实际上是靠server的dhcpd分配的ip启动的,所以无盘客户端系统里的网卡配置就要禁用掉,以免冲突)和系统启动的服务(有个服务貌似叫network management daemon的,启动文件在类似/app/root/etc/rc5.d/这样的目录里名字叫S23NetworkManager的,这个文件不要让它随系统启动(随意改名或者把文件名称里的S改成K就可以让它不启动了,还有rc4.d和rc3.d里最好也改名,让它在3/4/5启动级别里都不随系统启动),因为在它之前系统已经通过server的dhcp获取到ip地址并且挂载了nfs共享目录并chroot到远处主机了,而这个服务会导致系统重新处理网络并丢失已挂载的nfs共享,导致无盘客户端启动到半路就挂了,有时会报错nfs:server is not responding,still trying,有时根本就卡在network management daemon后面三两个服务什么也不报就进不了系统让你查错也无处下手。
--------------------------------
nfs:server is not responding,still trying 原因与解决方案
今天,用开发板通过nfs挂载主机,想从主机上面拷贝一些资料,可是竟然出现:nfs:server is not responding,still trying , 我用的是友善之臂的mini2440,操作系统使用的是Ubuntu8.04。
本来还以为是nfs出了故障,但是google了一下发现原来不是nfs的原因,而是由于传送的数据太大,出现数据包丢失现象。
NFS 的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。可用的解决方案是:在客户端改用TCP协议,使用下面的命令,
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.0.121:/主机nfs目录 /挂载路径
注意:中间使用的是逗号,而非英文中的句号。
--------------------------------
四、部署步骤:
client是裸机,其系统从是server发送的,没什么需要安装的,所以下面这些软件安装和配置都是在server上做的。
syslinux是rhel6系统默认安装的,dhcpd+nfs+tftp这些需要在安装server的系统的时候指定选择安装,当然装完系统后再安装也可,安装这些这不是我们的重点。
1.server的系统安装完了后就可以编译内核了,rhel6默认的内核是2.6.32-71,下载个新内核,最好也是2.6.32的版本的,我下载的是2.6.32.27这个版本的,下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/
下载的新内核放在这里:
[root@localhost kernels]# pwd
/usr/src/kernels
解压缩新下载的内核:
[root@localhost kernels]# tar zxf linux-2.6.32.27.tar.gz
[root@localhost kernels]# ls
2.6.32-71.el6.i686 linux-2.6.32.27 linux-2.6.32.27.tar.gz
[root@localhost kernels]# cd linux-2.6.32.27
[root@localhost linux-2.6.32.27]# pwd
/usr/src/kernels/linux-2.6.32.27
我们现在在这里了,编译内核主要是要配置下面这些内容:
- NFS filesystem support (CONFIG_NFS_FS). \\这个就是下面的“标签a“,默认就是开启并内插入内核的,后面括号里的内容是执行完"make munuconfig"后,源码目录里生成的隐藏文件".config"里的内容写法。
- Root file system on NFS (CONFIG_ROOT_NFS). \\这个就是nfsroot的支持项了。
- Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET). \\这个貌似不需要做改动,我没改过,没发现对本项目有什么影响,好像默认的就是内插的。
- The ethernet driver for the clent’s network card. \\这个我也没改过,直接默认的就可以了,不过我的client的网卡是8139的,通用性比较好,要是你的client最后启动有问题可以回来研究下这一项。
- IP: kernel level autoconfiguration (CONFIG_IP_PNP) \\这个是个前提,必须开启的
- BOOTP support (CONFIG_IP_PNP_BOOTP) \\还有个dhcp support也需要,下面会有说明。
编译新内核:
[root@localhost linux-2.6.32.27]# make menuconfig
进入路径:
Networking support --->
Networking options --->
要下面这些:
[*] TCP/IP networking
[*] IP: kernel level autoconfiguration \\启用这个后才会有下面这3个选项,这紧邻的4个选项(rarp可能不是必须的,但是一般都也选上了)都要植入内核,不能用模块编译。
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARP support
回到最上层目录,再到另一个路径里去,如下:
File systems --->
[*] Network File Systems ---> \\标签a
要下面这些:
<*> NFS client support \\这个必须植入内核,而不能以模块方式编译,默认这个是模块的,改成内插的这个才会显示/出现下面那个Root file system on NFS选项。
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] NFS client support for NFS version 4 (EXPERIMENTAL)
[*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
[*] Root file system on NFS \\这个必须植入内核,不能以模块方式编译。
<M> NFS server support \\这个默认就是模块的(*代表内插入内核,M代表以模块方式编译),不要改了,改了后启用nfs会报找不到这个模块,虽然不影响nfs的使用。
-*- NFS server support for NFS version 3
[*] NFS server support for the NFSv3 ACL protocol extension
[*] NFS server support for NFS version 4 (EXPERIMENTAL)
好了就要上面这些,然后一路exit最后保存退出界面后开始编译。
[root@localhost linux-2.6.32.27]# make
等待近小时(也可能2个来小时,视系统速度而定吧)
[root@localhost linux-2.6.32.27]# make modules_install
上面这个是安装模块。
[root@localhost linux-2.6.32.27]# make install
上面这个是安装新内核。