灌溉梦想,记录脚步
« »
2009年9月28日技术合集

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状态了。

日志信息 »

该日志于2009-09-28 09:21由 kevin 发表在技术合集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

发表回复