linux无盘桌面
由于公司运营监视的需要,要一套统一标准的桌面来进行运营监视工作,所以要建立一个Linux桌面系统的无盘工作站,经过多次测试,发现debian真是一个非常好的系统,整个环境由服务器到客户端全部都用debian实现,通过DHCP以及PXE配合,所需要的功能基本都能实现。 
服务器的搭建 
首先安装debian,由于是服务器所以对于分区有严格要求。分区如下: 
/ 300M 存放最小基本系统 
swap RAMx2 但不用大于4G 
/usr 2G 存放系统高级功能 
/var 2G 存放日至 
/tmp 300M 临时文件 
/client 10G 存放客户端系统 
/home 剩余所有 存放客户端用户目录和数据 
安装完以后开始安装CLIENT需要的环境。在同一服务器里开始安装第二个debian系统。安装的时候到分区的时候分区不要有任何变动,选择以前的/client那个分区作为这个系统的/分区,开始安装,安装过程中选上桌面系统。安装完成后牵涉到grub,这个就无所谓了,只要让grub安装到mbr里。安装完成以后重新启动进入非桌面系统的debian,由于刚才已经破坏了服务器系统的grub,所以进入这个系统后运行: 
grub-install (hd0,0) 
让这个系统的grub重新正式工作,至于桌面系统的debian就暂时不用管了,因为最终是给客户端使用的。到此系统已经安装完成,开始设置服务器。 
既然使用的是dhcp+pxe,那么服务器肯定就必须有TFTP服务,使用: 
aptitude install tftpd-hpa 
安装tftp服务,设置/etc/inetd.conf文件,肯定有如下内容: 
tftp dgram udp wati root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /home/tftproot 
这个设置是让tftp的根目录为/home/tftproot,然后到:http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/netboot/ 里下载pxelinux.0这个文件,这个文件到处都有,在google里输入这个一下就能找到。把这个文件放到/home/tftproot目录里,另外需要一个linux的内核,由于这个内核将来要直接给桌面系统使用,所以我从ubuntu系统里弄了一个内核过来,因为ubuntu的内核做桌面非常好。当然其实主要是要ubuntu内核的源代码,因为外面成形的内核都不支持网络DHCP以及nfsroot。把ubuntu的内核源代码拿到手以后,在自己的服务器环境安装上gcc等必须的编译工具。同时安装上kernel-package这个包,开始编译内核,内核必须包含如下配置: 
Networking —> Networking options —> IP:kernel level autoconfiguration以及 IP:DHCP support 这两个都必须直接编译进内核,不能以模块的形式存在。 
由于我的client都是8139的网卡,所以我把Device Drivers里,网络设备中8139网卡编译进内核。 
内核选项完成以后运行如下命令: 
make-kpkg kernel-image 
完成以后会在/usr/src里生成一个linux-image-2.6.xxxxxx.deb的文件。把这个文件放到/client目录里安装,命令: 
chroot /client 
dpkg -i /linux-image-2.6.xxxxxx.deb 
exit 
安装完后,把这个新内核放到/home/tftproot目录里: 
cp /client/boot/vmlinuz-2.6.xxxxx /home/tftproot/bzImage 
启动TFTP服务: 
/etc/init.d/openbsd-inetd restart 
在windows系统下输入如下命令应该能下载到指定文件: 
tftp x.x.x.x get pxelinux.0 
tftp x.x.x.x get bzImage 
表示TFTP服务已经成功安装,并且运行正常。现在开始设置pxelinux的配置文件。因为pxelinux默认会读取/home/tftproot/pxelinux.cfg/default文件,所以我们需要手工配置: 
cat <<EOF > /home/tftproot/pxelinux.cfg/default 
TIMEOUT 100 
PROMPT 1 
DEFAULT linux 
LABEL linux 
kernel bzImage 
append vga=0x317 ip=dhcp nfsroot=10.4.2.20:/client root=/dev/nfsroot rw — 
LABEL single 
kernel bzImage 
append vga=nomal ip=dhcp nfsroot=10.4.2.20:/client root=/dev/nfsroot ro – single 
EOF 
由于我的服务器的IP为10.4.2.20,所以这里是请根据实际情况修改。 
到此pxelinux已经配置完成,现在开始设置DHCP,DHCP非常简单,由于设置DHCP不是本文的讨论范围,我这里就只介绍重点,就是在DHCP分配的IP设置里增加如下: 
next-server 10.4.2.20; 
filename "pxelinux.0"; 
就可以了。这里是告诉网卡TFTP的服务器以及需要自举的文件。 
配置完成DHCP就开始配置NFS服务了,NFS服务默认debian可能没有安装,但安装也简单: 
aptitude install nfs-kernel-server 
安装完编辑/etc/exports文件,内容如下: 
/home *(rw,no_subtree_check,no_root_squash) 
/client *(rw,no_subtree_check,no_root_squash) 
完成后 /etc/init.d/nfs-kernel-server restart重新启动让NFS共享出去的目录生效,然后修改客户端配置文件,编辑/client/etc/fstab取消所有的硬盘分区,只留下proc,同时添加如下文件系统: 
10.4.2.20:/client / nfs rw 0 0 
/dev/shm /tmp tmpfs rw 0 0 
/dev/shm /var/run tmpfs rw 0 0 
第一行是让/目录挂到服务器的/client目录,第二行是因为/tmp是一个存放临时文件的地方,所以不少锁文件都是放到这个目录里,所以必须让每个客户端有自己的空间,并且由于/tmp存放的文件非常少,所以挂到一个临时内存空间里。同样/var/run是存放系统进程服务的部分pid文件的,同样不能混合,所以该目录也挂到临时内存空间里。客户端由于还面临计算机名等问题,由于所有客户端不能使用相同的计算机名,所以为了让系统每次启动后又自己的名称,所以这里使用一个脚本,让系统启动的时候自动运行,脚本如下: 
#!/bin/sh 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin 
case $1 in 
start) 
echo -n "set hostname:" 
mount -t tmpfs /dev/shm /var/workdata 
HOST_NAME=ws`date ‘+%H%m%S’` 
echo $HOST_NAME > /var/workdata/hostname 
echo "127.0.0.1 localhost" > /var/workdata/hosts 
echo "127.0.0.1 $HOST_NAME" >> /var/workdata/hosts 
echo "OK" 
;; 
stop) 
umount /var/workdata 
;; 
esac 
脚本里根据启动时间来作为计算机名,由于精确到秒,所以很少能碰到电脑名会相同的情况。到此无盘工作站的服务器已经建立完成。 
客户端的设置 
客户端最重要的是打开网卡的PXE功能,公司使用的品牌电脑,所以网卡都带了PXE和PBL芯片,设置为PXE的模式,这样系统就能自动启动进入无盘的Linux状态了。

