1.如何组建一个无盘工作站,源码具体步骤
2.第〇章 从零开始开发UEFI引导的源码64位操作系统内核
如何组建一个无盘工作站,具体步骤
无盘工作站构架指南2(5-)
5、源码运行Win?无盘工作站
你想用机运行Win吗?你想不买终端卡组建无盘Win网络吗?好了,源码请跟我来吧。源码根据本人长期的源码精品箱体指标源码组网实践经验,总结出一套完整的源码无盘Win方案,给大家分享!源码
首先说说大致工作原理:
主要先通过Win远程无盘引导Win工作站,源码再利用Win终端服务和终端连网软件从无盘win中登陆到终端服务器上。源码
请看以下具体步骤:
一、源码硬件配置:
1.服务器:建议CPU PIII 以上、源码M内存,源码硬盘G以上(经济允许的话最好用SCSI)因为服务器是整个网络核心的核心,所以配置一定要好。源码
2.工作站:低配置的源码,即可。笔者这里是奔腾,8M内存,无硬盘。
二、安装步骤:
1.首先把服务器装好Win Server,并配置好所有硬件。
2.为window安装终端服务。
打开控制面版---添加/删除程序---添加/删除Windows组件--选中Windows终端服务确定。安装时要放入Win光盘.
3.在服务器上安装MetaFrame。Metaframe是citrix公司在Win下的终端服务器他比Win的终端服务更加强大,提供多种客户终端接入服务。
4.安装好Metafrmae后,开始制作终端客户安装软盘.
开始---程序---Metaframe tools---Ica client creator----Ica Client For win3x
5.为Win添加远程启动服务。由于Win已经不在支持远程启动服务。因此,我们考虑将NT4的远程启动服务移植到Win中。可到凌心之 家(www.lingxin-home.com)或我的主页(networld.8u8.com)去下载远程服务安装工具。
6.在Win下依次配一台Dos、小型餐饮系统源码win无盘站.方法与nt下一模一样,别告诉我你不会配置.不会的,以下就不用看了。
7.以无盘win启动工作站,把第4步制作的终端客户盘安装在无盘站上。
8.配置客户端。双击citrix图标,建立一个新连接,这里注意:要填好主机名(服务器名称),协议选择Netbios,的其它全部用他的默认就可以了。
9.建立连接完成后,双击刚才建立的连接,就出现梦寐以求的Win桌面了。你可以运行任何在服务器的软件了!
6、安装Linux无盘工作站
[文章导读]
其实Linux 对远程引导的支持非常好,Linnx内核自身又支持网络文件系统,因此非常适合做无盘工作站,本文将以一个实例向大家详细介绍无盘Linux工作站的安装办法。
[正文]
当年Novell下的无盘DOS工作站很是流行,后来又流行过Win无盘工作站,只是由于问题多多,后来微软自己停止了对无盘Windows的支持。随着Linux的日益流行,使用Linux的人越来越多,其实Linux 对远程引导的支持非常好,Linnx内核自身又支持网络文件系统,因此非常适合做无盘工作站,本文将以一个实例向大家详细介绍无盘Linux工作站的安装办法。
这个网络是一个小的局域网,有1台服务器和4台 Linux 无盘工作站,-25源码16位彼此之间用双绞线通过HUB连接,服务器的IP地址定为..0. ,名字是server ,5台无盘工作站的地址由服务器动态分配,地址范围从 ..0.1 到..0.4 ,名字分别是c1,c2, c3,c4,服务器和无盘工作站使用的都是NE 兼容网卡,无盘工作站使用的网卡上都安 装了BOOTROM 启动芯片,服务器操作系统安装的是 RedHat Linux 6.0 ,安装时选用定制安装,并安装了全部软件。
Linux的远程引导有两种方式,一是利用Bootp协议,有一个专门的项目EtherBoot 提供支持( ( or Mbit)
Other ISA cards
NE/NE support (NEW)
都设置为有效
Filesystems 该项目下面的Network File Systems子项目下面的
NFS filesystem support
Root file system on NFS (NEW)
都设置为有效
以上设置完成后,退出内核编译设置程序,会出现一个对话框:Do you wish to save your new kernel configuration?
然后执行 make dep && make bzImage 进行内核编译,这个过程得花一点时间,特别是如果计算机的速度不快的话,花的时间会更长一些。编译内核如果没有错误,会得到内核映象文件/usr/src/linux/arch/i/boot/bzImage ,将启动软盘插入计算机,执行下面的命令 mount -t vfat /dev/fd0 /mnt/floopy cp /usr/src/linux/arch/i/boot/bzImage /mnt/floppy umount /dev/fd0
好了,启动盘上的文件都准备齐全了,等会儿用它到Win环境下制作启动映象。
服务器设置
服务器端需要运行nfsd、dhcpd、mars_new等几个服务进程,这些软件在ReHat Linux 发行套件里都有,表白程序 源码下载如果在安装 Linux 的时候选择全部安装,这些软件都会随着安装操作 系统而装好了,下面对这些软件进行设置,注意,下面的操作要以 root 身份进行。
1、 NFS 守护进程nfsd
首先要建立几个供无盘工作站使用的目录,并通过nfsd 导出,命令如下:
mkdir /tftpboot
然后编辑文件 /etc/hosts ,加入下面的内容
..0. server server.domain
..0.1 c1 c1.domain
..0.2 c2 c2.domain
..0.3 c3 c3.domain
..0.4 c4 c4.domain
第一台工作站的工作目录设置方法如下:
mkdir /tftpboot/..0.1
cd /tftpboot/..0.1
cp -a /bin .
cp -a /dev .
mknod dev/nd0 b 0
chmod dev/nd0
cp -a /etc .
cp -a /home .
cp -a /lib .
rm -rf lib/modules
cp -a /root .
cp -a /sbin .
cp -a /var .
mkdir proc
mkdir usr
mkdir tmp
chmod tmp
touch fastboot
chattr +i fastboot
cd etc
编辑文件 sysconfig/network-scripts/ifcfg-eth0
保留其中的
DEVICE=eth0
ONBOOT=yes
其余的行全部删除,然后增加一行
BOOTPROTO=dhcp
编辑文件 rc.d/rc.sysinit ,在文件最后加上两行
mount -t nfs server:/usr /usr
/usr/XR6/bin/xfs
编辑文件 fstab
保留其中的
none /proc proc defaults 0 0
其余的行全部删除,然后增加一行
server:/tftpboot/..0.1 / nfs defaults 1 1
其它工作站的工作目录设置方法就简单多了
cd /tftpboot
cp -a ..0.1 ..0.2
cp -a ..0.1 ..0.3
cp -a ..0.1 ..0.4
编辑文件 /etc/exports ,加入以下内容
/usr (ro,no_root_squash)
/tftpboot/..0.1 (rw,no_root_squash)
/tftpboot/..0.2 (rw,no_root_squash)
/tftpboot/..0.3 (rw,no_root_squash)
/tftpboot/..0.4 (rw,no_root_squash)
2、动态主机配置协议服务器 dpchd
检查一下文件/etc/dhcpd.leases是否存在,若不存在就用命令touch /etc/dhcpd.leases 创建一个,然后编辑文件 /etc/dhcpd.conf ,加入以下内容
subnet ..0.0 netmask ...0 {
range ..0.1 ..0.4;
}
3、NetWare 模拟器 marsw_nwe
编辑文件 /etc/nwserv.conf,找到下面的行
# 4 0x eth0 .3 1
将该行开头的'#'去掉,再找到
4 0x0 * .3 1
在该行开头加上'#'
制作启动映象
进入Win,将Win(早期的版本,可以用服务器安装方式安装)安装光盘的admin\nettools\netsetup\rplimage.exe 复制到硬盘,将启动软盘插入软驱,然后在纯MSDOS方式下执行 rplimage a: 就会得到启动映象 net$dos.sys,再将启动映象 net$dos.sys 复制到启动盘上(如果启动盘空间不够,可以先删除启动盘上的一些文件以留出空间)。
启动 Linux 服务器,以 root 用户登录,将启动软盘插入软驱,执行下面的命令 mount -t vfat /dev/fd0 /mnt/floppy cp /mnt/floppy/net\$dos.sys /var/mars_nwe\sys\login umount /dev/fd0 然后执行 setup ,移动光棒至 System services 选项回车,eclipse源码放哪出现 Services 设置画面,将dhcpd,nfs,mars-nwe 都设为有效,退出 setup 程序,执行以下的命令以启动上述服务进程:
/etc/rc.d/rc3.d/*mars-nwe restart
/etc/rc.d/rc3.d/*dhcpd restart
/etc/rc.d/rc3.d/*nfs restart
下一次再启动服务器时,上述服务进程会自动执行。
至此,所有的设置工作全部完成了,联好网络随便打开一台无盘工作站,稍等一下,出现远程引导的信息,接着会启动 Win,接下来很快就会装载 Linux ,在一大堆 Linux 的启动信息之后如果看到 Linux 的登录提示,就说明远程启动成功了。
Linux 无盘工作站虽然运转起来了,但还有一个问题,就是交换的问题,因为Linux 是一个支持虚拟存储的操作系统,当机器内存不够时,Linux 就会把内存中暂时不用的数 据换出到交换设备上,等需要时再换回来,刚才我们没有设置交换区,在无盘工作站上用 free 命令就会发现交换区为零,如果无盘工作站内存较大,运行一些不大的程序,没有交换区还是可以的,但若运行大型程序就会出问题,下面介绍在服务器上设置交换区即远 程交换的方法。
对于2.1.版以前的内核,要实现远程交换可有点费事,得从网络上下载有关的补丁来修改内核代码,然后再编译内核映象。从2.1.版后的内核支持网络块设备,这样,实现远程交换就容易了。首先编译内核时要使 Network block device support 选项有效(刚才编译内核时就是这么作的),再从boot可供选用, etherboot对网卡型号有要求,支持的网卡种类不算很多,但对最常用的网卡如3c///b、NE//PCIne、Intel eepro等基本上都能支持;Netboot可以用ndis或pktdrv,这些文件一般在随卡附带的驱动盘上都有,但这仅限于网络启动,对网卡的要求首先是Linux能识别。
以下步骤所述适用于etherboot;
1. 展开etherboot,进入src-,编辑Config。有许多选项可以让你做多重启动、显示信息、询问口令之类的事情,这时你需要做的是用bootp代替dhcp,即在Config中定义-DNO_DHCP_SUPPORT设置。因为我们打算在服务器端用bootp,所以这是必须的,否则在启动时会因为未能寻找到dhcp server而启动不了。如果你准备在服务器端使用dhcp,那么这一步就不需要了。
2. make。对每种网卡都会生成两个文件 .rom和 .lzrom,后者是压缩过的。
3. 使用软盘启动验证所作的启动ROM没问题,假设你用的网卡是ne兼容的:
cat ../src/floppyload.bin ne.lzrom > /dev/fd0
如用软盘启动,系统能探测到你的网卡并发出bootp请求。如果一切OK,你就可以把ROM文件刻写到EPROM里了。
4. cd ../netboot*;make;make install。make如果出错,解决办法是把系统中的bcc改名,然后将gcc连接成bcc,再重新make。最后在系统中会增加一个程序mknbi-linux,这是用来处理linux内核的,在服务器端设置部分会讲它的用法。
客户端的工作完成了。
二、服务器端:
假设你的无盘工作站ip为.0.0.1; 机器名为dc1.subnet.net,另一台无盘工作站ip为.0.0.2,机器名为dc2.subnet.net, 服务器ip为.0.0.,名为server.subnet.net。
1. 修改/etc/hosts,增加dc1.subnet.net,dc2.subnet.net
2. 取得bootp-2.x.x,展开后注意把带的各种patch都打上。然后make; make install
3. 建立/etc/bootptab,如下:
global.prof:
:sm=...0:
:bf=/tftpboot/vmlinuz.nb:
dc1:tc=global.prof:ha=cd7a:ip=.0.0.1:
dc2:tc=global.prof:ha=e1:ip=.0.0.2:
ha用无盘工作站网卡的MAC地址代替。
4. 修改inetd.conf,去掉bootpd和tftpd的#号,如下:
tftp dgram udp wait root /usr/sbin/tcpd tftpd –s /tftpboot
bootps dgram udp wait root /usr/sbin/tcpd bootpd -i
kill –HUP `cat /var/run/inetd.pif`
5. 建立/tftpboot/.0.0.1,cd /tftpboot/.0.0.1,
(cd /; tar cpf – lib sbin bin var etc dev)| tar xpf –
mkdir usr; mkdir tmp; chmod tmp; mkdir home;mkdir root; makdir
proc; mkdir mnt
6. touch fastboot; chattr +i fastboot
(fstab 中 / 和 /usr 的最后一项设成0,也许不需要这一步了,但我没试过)
以下是一个shell script,可用于自动执行以上操作。
#!/bin/sh
if [ $# != 1 ]
then
echo Usage: $0 client-IP-addr
exit 1
fi
cd /
umask
mkdir -p /tftpboot/$1
# just make these ones
for d in home mnt proc tmp usr
do
mkdir /tftpboot/$1/$d
done
chmod /tftpboot/$1/tmp
touch /tftpboot/$1/fastboot
chattr +i /tftpboot/$1/fastboot
# copy these ones
(cd /; tar cpf - bin lib sbin dev etc var) | (cd /tftpboot/$1; tar xpf -)
7. 删除var下一切不需要的东西, 减小空间。删除lib/modules下一切不需要的模块。
8. 修改etc/sysconfig/network,etc/sysconfig/network-scripts/ifcfg-eth0,
etc/fstab,etc/conf.module
fstab中指明root在服务器server上,like this
server:/tftpboot/.0.0.1 / nfs default 0 0
server:/usr /usr nfs default 0 0
9. 配置etc/rc.d/rc3.d,关掉一切不需要的网络服务。
. 删除etc/rc.d/rc6.d/Knetwork。
. 修改etc/rc.d/rc.sysinit,寻找“mount –a –t nonfs,smbfs…"改成
“mount.–a –t nosmbfs…"
. mkdir /tftpboot/.0.0.2; cd /tftpboot/.0.0.2;
. 修改etc/sysconfig/network,etc/sysconfig/network-scripts/ifcfg-eth0,
etc/fstab,etc/conf.module
. cd /etc; vi exports;
/usr dc*.subnet.net(ro)
/tftpboot/.0.0.1 dc1.subnet.net(rw,no_root_squash)
/tftpboot/.0.0.2 dc2.subnet.net(rw,no_root_squash)
exportfs –a
. 编译一个新内核,必须包含以下特性:
NFS filesystem 支持
Root on NFS 支持
Bootp 支持
无盘工作站所用的网卡型号支持
编译出新内核之后,用mknbi-linux处理,
mknbi-linux bzImage vmlinuz.nb
将vmlinuz.nb放在/tftpboot下即可。
至此,服务器端的工作就完成了。
注意事项:
1. 如果你打算在服务器端用dhcp,需要自己配置,参看dhcp的文档。
2. Rh6.1自带一个bootparamd,也应该能完成同样的工作,但在manual中语焉不详,不知该如何设置。
3. 服务器端 / 和 /usr 最好单独分区。
4. etherboot的文档上说对有些网卡比如PCI NE兼容网卡,可能需要调整Makefile中的vendor信息和ID信息,我还未试过。
启动你的无盘工作站,如一切操作无误的话,工作站则应该能启动起来。启动过程中如果有一些地方不顺利,可以在启动之后对无盘工作站上按一般方法进行设置。
希望以上的讲述能给读者有所帮助和启迪!
8、Linux无盘工作站架设实例
后面还有实例你自己看吧!
第〇章 从零开始开发UEFI引导的位操作系统内核
章节概述
本文提供了关于从零开始开发UEFI引导的位操作系统内核的教程,旨在帮助开发者了解内核开发的基本步骤,尤其是针对对Linux不太熟悉的读者。教程采用独特的编排方式,将所需知识分为多个部分进行讲解。
前置知识
对于不熟悉Linux的开发者,本教程将提供必要的基础知识,并在需要时通过链接引入更详细的教程。请在阅读前确保具备基本的计算机编程知识。
开发环境
为了顺利进行内核开发,您需要在Linux环境中搭建开发工具,而Windows用户则推荐使用Docker或WSL(Windows Subsystem for Linux),它们提供了便捷的Linux开发环境,无需复杂的虚拟机配置。
在Linux中,您需要安装以下工具:VSCode(通过插件实现远程开发),以及QEMU(用于UEFI模拟)。
对于Windows用户,您需要在本地安装QEMU,而不是在Docker或WSL中。
如果您使用的是Deepin、麒麟等国产Linux发行版,请注意它们可能提供的不同体验。
如果您在使用过程中遇到WSL或Docker不兼容性问题,可以尝试安装一个完整的Linux发行版虚拟机,例如Manjaro。
准备工作
为了开发UEFI引导的内核,您需要准备UEFI镜像和一个可以UEFI启动的虚拟磁盘文件。
获取UEFI镜像,例如使用gnome-boxes自带的一系列UEFI镜像,通过find命令找到OVMF_CODE.fd路径,并将其复制到项目目录中。
创建一个qcow2格式的虚拟磁盘文件,并使用nbd设备挂载,使其在Linux中可用。
对磁盘进行分区,推荐使用fdisk命令,并确保所有分区都被正确识别。使用fat文件系统为每个分区。
安装GRUB,并配置多启动文件系统(multiboot2)标准,以便在启动时显示内核引导选项。
将构建好的内核文件放置在指定目录中,等待引导。
完成所有准备工作后,您可以将虚拟磁盘镜像和UEFI镜像从WSL或Docker移动到宿主机,并使用QEMU启动,体验UEFI引导的虚拟机。
通过执行特定命令,您可以创建一个UEFI引导的虚拟机,并在启动时看到GRUB引导界面。
至此,您已完成从零开始开发UEFI引导的位操作系统内核的准备工作。