Oberon/ETH Oberon/QEMU安装
此方法已被证明可以成功地将ETH Oberon安装到各种笔记本电脑和台式机上,包括Micron Trek 2、AGP笔记本电脑。这些说明可以适用于其他虚拟机。
在安装并配置到存储介质后,系统可以在本地机器上常规使用。或者,可以使用继续在虚拟机上使用。在本地情况下,网络连接将通过以太网或串行交叉线缆进行。在虚拟机情况下,网络连接使用TAP或桥接接口连接到主机系统。
安装主机是在虚拟机管理程序上执行安装的机器。
目标机器是在安装完成后将使用ETH Oberon的机器。这可以是裸机x86 PC或提供x86 PC环境的虚拟机管理程序。
目标存储设备或目标设备是安装和使用Oberon的设备。当ETH Oberon在虚拟机管理程序上工作时,可以使用它支持的任何设备。当ETH Oberon直接在裸机上工作时,设备仅限于可用的设备驱动程序。因此,对于裸机上的ETH Oberon,通过PATA连接的磁盘驱动器或Compact Flash卡或通过OHCI连接的USB闪存存储器将可以工作。由于ETH Oberon缺少SATA、UHCI、EHCI和xHCI的驱动程序,因此具有这些接口的设备将无法在裸机上工作。QEMU支持大多数设备。
目标卷是分区目标设备的卷。
为了说明,以下示例指的是在Linux上运行的QEMU,安装程序为/home/me/OberonCF0.Dsk。设备名称仅供说明。不要尝试逐字使用示例。请根据您的需求进行调整。
在安装主机中,目标设备的名称类似于/dev/sdX,其中X是“b”或“c”或其他一些字母。或者,它可能具有使用udev规则分配的符号链接名称。例如,名称为/dev/KingstonCF。[1]
KERNEL=="sd?", ATTR{size}=="1018080", SYMLINK+="KingstonCF"
在使用systemd的情况下,可以通过systemd的.link文件分配名称。
Oberon0安装程序使用PATA设备名称。目标设备可能是IDE0,目标卷为IDE0#05。同样,这些仅为示例。在另一种情况下,设备可以是IDE1,卷为IDE1#02。
注意:设备标识符中的印刷错误可能导致安装主机的文件系统发生灾难性损坏。请仔细识别设备。请小心输入。
特定硬件在硬件兼容性列表中有所说明。
如果目标机器不是安装主机,请将目标设备移动到安装主机。在大多数情况下,目标设备将通过40或44芯排线连接。可以使用适配器将44针笔记本电脑驱动器连接到台式机。ETH Oberon对USB的支持有限,并且USB目标设备的安装可能无法成功。这包括USB闪存驱动器以及通过USB适配器连接的磁盘驱动器或存储卡。
在此安装方法中,ETH Oberon需要目标设备的专用目标卷。在Linux中,可以使用fdisk、parted或gparted创建卷。在其他系统中,可以使用其他磁盘操作工具。对于PC上的完整库存ETH Oberon系统,至少应分配50MiB;100 MiB将简化安装和维护过程中的操作。通常,用户特定的工作文件将位于一个单独的卷中,挂载的名称例如FAT、HOME、usr或WORK。
安装 包 |
Zip 压缩包 kB |
解压缩 kB |
---|---|---|
Oberon0[2] | 1475[3] | 2667 |
Apps1 | 800 | 2304 |
Apps2 | 1015 | 2849 |
Docu | 2770 | 6118 |
Gadgets | 1086 | 2914 |
Pr3fonts | 205 | 655 |
Pr6fonts | 375 | 1877 |
Source1 | 1012 | 4000 |
Source2 | 779 | 3245 |
Source3 | 841 | 3559 |
Build | 920 | 2364 |
SourceB | 189 | 727 |
System | 633 | 1735 |
合计 | 12100 | 35014 |
通过直接检查或使用软件,确定目标机器的显示功能。在Linux中,lspci识别大多数视频硬件。除了视频芯片组之外,了解VESA BIOS扩展可能会有所帮助。
在要执行安装过程的主机上安装 QEMU。使用完整的系统仿真。在 Debian jessie 中安装 qemu-system-x86 软件包。
从 Sourceforge 获取 Oberon0 安装程序镜像文件。OberonCF0.Dsk 包含对 Compact Flash 的支持,建议使用。Oberon0.Dsk 也在该网站上,是 ETH 发布的最后一个镜像。它缺少对 CF 的支持;否则这两个镜像是相同的。
启动安装程序。访问驱动器需要 root 权限。以 root 用户身份登录或使用 sudo。
注意:“sdc” 和 “KingstonCF” 仅为示例。根据您的具体要求进行 调整。此命令用于 root 执行文件 OberonCF0.Dsk 中的安装程序镜像。
qemu-system-i386 \ -drive file=/home/me/OberonCF0.Dsk,if=floppy,format=raw \ -drive file=/dev/KingstonCF,if=ide,format=raw \ -boot order=a
这是针对写保护的真实软盘。
qemu-system-i386 \ -drive file=/dev/fd0,if=floppy,format=raw,readonly \ -drive file=/dev/KingstonCF,if=ide,format=raw \ -boot order=a
QEMU 限制对 qemu 命令中指定的设备的访问,从而降低了安装主机文件系统损坏的风险。请参阅安装主机中的 QEMU 手册页或 在线文档 或 QEMU 手册。在 Linux Suse 页面 中也讨论了对主机驱动器的访问。如果省略了 “format=raw”,QEMU 将显示错误消息。
可能需要进行反复试验才能确定正确的参数。shell 函数可能会有所帮助。
etho () { qemu-system-i386 \ -drive file=/home/me/OberonCF0.Dsk,if=floppy,format=raw \ -drive file=/dev/KingstonCF,if=ide,format=raw \ -boot order=a ; }
Oberon0 将显示一系列命令,每个命令都可以通过单击鼠标中键执行。文本可以通过右键拖动选择。有关详细信息,请参阅 原始安装说明。
在 Config.Disk 上使用 MM 选择选定的驱动程序。
使用 MM 在 Edit.Open 上打开 InstallFiles.Tool。键入选项“detail”并执行 Partitions.Show detail ~
。目标卷应在显示的分区表中可见。在本例中,目标卷是 IDE0#05;而不是 IDE0#00。合理的 类型代码 应出现在第五列中。整个目标设备和每个未分配区域的类型代码将为“---”。任何其他卷都应具有数字类型代码。如果第五列中出现“---”,则安装程序无法正确读取目标设备的 分区表,安装将无法成功。在这种情况下,退出 QEMU,更正问题,然后重试。
使用 MM 在 Edit.Open 上打开 Configure.Tool。根据 之前确定的信息选择显示模式。如果没有合适的芯片组特定驱动程序,请设置 VESA 模式。如果选定的模式失败,则可以轻松测试另一种模式。
按照第 2 部分中的说明记录配置。
要退出安装程序,请键入并执行 System.Quit 或使用 <Ctrl>+<Alt>+<G> 释放鼠标指针,然后使用 QEMU > 机器 > 退出。
如果虚拟机监控程序 (QEMU) 支持配置的视频,则可以直接测试新安装的系统。
qemu-system-i386 \ -drive file=/dev/KingstonCF,index=1,media=disk,format=raw \ -vga std -boot order=c
否则在目标机器上测试。如果安装成功且配置正确,ETH Oberon 将短暂出现。否则,请参阅 故障排除说明。在 使用 Oberon 进行分区管理 下的讨论,小标题“使用此命令解决启动问题”也相关。要修改视频配置,请再次运行 QEMU 并挂载目标卷。在本例中,MM 在
FileSystem.Mount DST AosFS IDE0#05 ~
MM 在
Edit.Open Configure.Tool
尝试另一个
Config.Display ...
以及 MM 在
Config.BootPartition menu ~
再次。如果使用 VESA 视频,请在虚拟机监控程序下再次测试。BIOS 可能会允许从主引导记录以外的设备启动。如果驱动器安装在机器上为 IDE1,并在安装程序中识别为 IDE0,则可以在机器启动时编辑 BootVol 配置字符串的值。要解决更困难的问题,请在文件中记录跟踪信息。
qemu-system-i386 \ -hda file=/dev/KingstonCF,index=1,media=disk,format=raw \ -serial file:QemuOberonTrace \ -vga std -boot order=c,menu=on
启动选项“menu=on”允许交互。在获取 QEMU 屏幕后,设置 <Scroll Lock> 并设置这些 Trace 配置字符串。
TracePort=1 TraceBPS=115200
有关更多详细信息,请参阅 跟踪。最强大的故障排除方法是使用串行交叉线连接的终端。在第二个 Oberon 系统中的 终端仿真器 是一种可能性。
如果安装主机不是目标机器,请更换目标机器中的目标设备并再次测试。ETH Oberon 是一款非常强大的软件。只要有一点毅力,它几乎可以在任何 i386 或更高版本的 PC 上运行。
Oberon0 之外的软件以 Zip 压缩文件 格式分发,包括 Apps1.zip、Apps2.zip、Docu.zip、Gadgets.zip、Pr3Fonts.zip、Pr6Fonts.zip、Source1.zip、Source2.zip 和 Source3.zip。此外,用于重建系统的特定任务的文件包括 Build.zip、SourceB.zip 和 System.zip。对于 Alpha 版本,所有这些都包含在存档 NativeOberon_2.3.7.tar.gz 中,可在 Sourceforge 中获得。在类 Unix 系统中,以下过程将获取这些 zip 文件。命令在控制台中执行。
mkdir <somewhere>/Oberon2.3.7
使用任何 Web 浏览器,从 Sourceforge 将大约 12 MiB 的 NativeOberon_2.3.7.tar.gz 检索到 Oberon2.3.7 目录中。
cd <somewhere>/Oberon2.3.7 # Confirm existence of the gz archive. ls # Unzip and untar. gunzip NativeOberon_2.3.7.tar.gz tar -xvf NativeOberon_2.3.7.tar # Read the ETH license. more readme.txt
将所有 zip 文件复制到 Oberon 系统的 SYS 卷中。 FAT 文件系统 在 CompactFlash 卡上,[5] USB 闪存驱动器 或软盘可以传输数据。更复杂的方法是 建立网络连接 并通过 FTP 传输文件。[6]
在 Oberon 中,使用 MM 执行这些命令将存档解压缩到 SYS 卷中。
FileSystem.SetDefault SYS ZipTool.ExtractAll Apps1.zip Apps2.zip Docu.zip Gadgets.zip Pr3Fonts.zip Pr6Fonts.zip Source1.zip Source2.zip Source3.zip ~
Build 目录包含重建系统所需的文件。
ls <somewhere>/Oberon2.3.7/Build/* Build.zip SourceB.zip System.zip
如果需要,这些文件也可以复制到 SYS 卷并提取。
ZipTool.ExtractAll Build.zip SourceB.zip System.zip ~
然后恢复到工作卷。
FileSystem.SetDefault YourWorkingVolume ~
如果目标机器(真实或虚拟)有多个操作系统,则需要 引导管理器。
基本配置由 配置字符串 表示,例如允许指定显示驱动程序。引导加载程序允许访问这些字符串。
在更高级别上,系统配置位于文件 Oberon.Text 中。在新安装的基础系统中,此文件具体为 SYS:Oberon.Text。两个细微之处可能会让新手感到困惑。
* Oberon.Text 中的语法至关重要。如果意外删除了右括号“}”,则错误之后的一些信息将无效。在编辑 Oberon.Text 时要小心。
* 除了 SYS 之外,存储卷还可以包含 Oberon.Text。只有第一个优先级副本的文件有效。例如,考虑一个安装并配置了 HOME 优先于 SYS 的系统。第一次执行 ET.Open Oberon.Text 将打开 SYS:Oberon.Text。编辑后,ET.Store 将存储 HOME:Oberon.Text。重新启动后,SYS:Oberon.Text 将保留,但 HOME:Oberon.Text 将生效;HOME:Oberon.Text 将屏蔽 SYS:Oberon.Text。可以通过指定卷来避免歧义。
ET.Open SYS:Oberon.Text ET.Open HOME:Oberon.Text
在本地机器上运行的Oberon可以通过有线路由器连接到互联网。Linux路由器可以提供更灵活的连接方式。无论哪种情况,局域网都应该配备防火墙。对于Linux路由器,推荐使用Shorewall。ETH Oberon支持这些通信方式。
模式 | 协议 | 备注 |
---|---|---|
发送电子邮件 | SMTP | Oberon可以发送到局域网机器上的邮件传输代理(MTA),例如Exim,或者直接发送到智能主机。Exim可以提供安全的通信。 |
接收电子邮件 | POP | POP可以通过Stunnel进行隧道传输。 |
终端模拟器 | Telnet | 出于安全考虑,Telnet连接应限制在局域网内。 |
安全外壳 | SSH | 与Telnet相比更安全 |
文件传输 | FTP | 出于安全考虑,FTP应限制在局域网内。 |
文件传输 | SCP | 与FTP相比更安全 |
万维网 | HTTP | 如果没有SSL库,则无法使用HTTPS。 |
在基本系统运行后,配置网络连接。ETH Oberon支持使用静态IP地址的有线以太网。不支持无线和DHCP。如果没有以太网连接,也可以通过PPP和RS-232交叉线(空模式)进行连接。请参考Oberon.Text和NIC页面。
最初的XOberon PPP是由Martin Aeschlimann和Claude Knaus编写的。Edgar Schwarz将其移植到ETH Oberon/PC Native。
Oberon.Text的语法允许使用多个设备,Device0到Device9。在ETH Oberon 05.01.2003中,最大设备数MaxDevices在NetBase.Mod中设置为2。这个限制最多可以增加到10,之后需要重新编译NetBase.Mod。多个设备允许使用各种网络硬件和协议选项,而无需更改Oberon.Text。例如,Oberon.Text可以定义以下三个设备。
Device0 = { "PPPMain.InstPPP", "COM1"} Device1 = { "PPPMain.InstPPP", "COM2 \silent"} Device2 = { "Net3Com509.InstallDevice", "" }
这允许以有噪声的方式调用PPP,
Dialer.Dial DIAL Device0 ~
以及“静默”调用。
Dialer.Dial DIAL Device1 ~
Device2允许进行以太网连接。请注意,两个不同的PPP不能安装在同一个COM端口上,并且为了使此示例正常工作,必须使用MaxDevices*=3或更大的值重新编译NetBase.Mod。
从最低层,即交叉线或调制解调器开始,逐步向上到最高层,即浏览器、邮件处理程序等。
调制解调器有两个速度:接口速度和调制速度。接口速度是指计算机和调制解调器之间的速度。调制速度是指调制解调器和电话网络之间的速度。除非专门指接口速度,否则规范通常指的是调制速度。
内部调制解调器或计算机串行端口的接口速度在Oberon.Text的DIAL脚本中设置,例如以下示例。
Init = { COM1 57600 } {* modem port and speed *}
如V24.Start所示,此速度的允许值为115200 b/s的整数因数。因此,Oberon允许这些接口速度。
115200 57600 38400 19200 14400
调制解调器的最大接口速度通常高于调制速度。
外部调制解调器连接到串行端口,缓冲是一个问题。内部调制解调器直接连接到系统总线。计算机和内部调制解调器之间的缓冲不是问题,或者比外部调制解调器的情况不那么关键。也许了解总线和调制解调器电路的人可以详细说明。
接口速度应在拨号脚本中设置为min(p, m),其中p是计算机串行端口能够运行的最高速度,m是调制解调器串行端口能够运行的最高速度。台式电脑中使用的一些旧IDE I/O卡在9600 b/s以上不可靠!笔记本电脑中的串行端口缓冲效果更好。我的旧东芝Satellite T2100可以在38400 b/s下可靠运行;从未测试过57600 b/s。
在没有规范的情况下,可以根据经验设置接口速度。尝试以下设置之一。如果通信失败,请调整到较低的速度。
Modulation Interface 14400 19200 28800 38400 57600 57600
在尝试创建DIAL脚本之前,请尝试V24.Panel.Execute。
Desktops.OpenDoc V24.Panel
在窗口中设置接口速度。参数为COM端口、接口速度、每字节位数、停止位数、奇偶校验。点击“打开”按钮。输入调制解调器的初始化命令。在大多数情况下,ATZ可以正常工作。有关初始化的更多信息,请参阅Kermit文档和网络上的其他资料。
在调制解调器确认初始化后(大多数情况下会显示OK),输入拨号命令。例如:
ATD T5392157
T表示使用音调拨号而不是脉冲拨号。几秒到十几秒后,您应该会看到远程系统的响应。如果它允许“终端”或“拨号”连接,您应该会收到类似“login:”的提示。无论如何,您至少已经确定您的调制解调器可以与远程调制解调器通信。
下一个目标是获得一个可用的DIAL脚本。它可以逐步构建。与其假设远程系统将返回的字符,不如从以下内容开始,并将其适应您的环境。将“GulfNet”替换为您喜欢的任何名称,在Init中设置COM端口和速度,并将5392157替换为您服务器的号码。
{* This is for the Motorola MODMSURFR *} GulfNet = { Init = { COM1 38400 } {* modem port and speed *} Dial = { "ATZ" 10 "OK" "ATD T5392101" 60 "ZZ" }
“ZZ”不太可能由本地调制解调器、远程调制解调器或远程系统返回。因此,脚本只是等待在60秒内返回的所有字符。System.Log将显示完整的回复。将其移动到用户跟踪中,以便于阅读。从回复中选择一个字符串,该字符串明确指示调制解调器之间的连接已完成。例如,{|ATD T5392101||CONNECT 38400|~ ...
以~开头的奇怪字符是PPP协商。调制解调器之间的连接由“CONNECT 38400”标识。因此,脚本中的“ZZ”可以替换为“400”。这是一个拨号脚本。
{* This for a Motorola MODMSURFR *} GulfNet3 = { Init = { COM1 38400 } {* modem port and speed *} Dial = { "ATZ" 10 "OK" "ATD T5392101" 60 "400" CALL "PPPMain.StartInst GulfNet3 peter" } }
如果服务器没有提示输入用户ID和密码,则它应该期望PAP(密码身份验证协议)身份验证。
主机中需要配置一个桥接接口[7]。在Debian Linux中,安装cron和bridge-utils软件包。
apt install cron bridge-utils
/etc/crontab中的以下行应该创建接口br0。
@reboot root ip link add br0 type bridge
检查桥接是否存在。
ip link show br0 4: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 92:e0:54:07:2a:e2 brd ff:ff:ff:ff:ff:ff
如果没有桥接,此方法将失败。“br0”的名称是任意的,只要与qemu命令中的br选项、/etc/network/interfaces中的名称以及/etc/qemu-ifup脚本中的名称保持一致即可。如果在创建接口时遇到困难,可以向Oberon邮件列表或qemu-discuss邮件列表咨询。
在大多数Linux系统中,/etc/network/interfaces中的类似以下内容的段落将配置现有的桥接。
# Bridge to qemu guest. auto br0 iface br0 inet static address 10.0.2.1 broadcast 10.0.2.255 netmask 255.255.255.0
“10.0.2.1”是特定局域网的设计者选择的IPv4私有IP地址[8]。可以通过交互方式验证配置是否成功,例如以下示例。
user@qemuhost:/home/user$ ip addr show br0 6: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff inet 10.0.2.1/24 brd 10.0.2.255 scope global br0 valid_lft forever preferred_lft forever
在系统启动期间,如果网络恰好在桥接创建之前配置,则桥接将无法用于Oberon虚拟机。可以交互式地启动桥接。
ifup br0
或
ip link set br0 up
当执行qemu时,它会尝试创建tap0并对其进行配置,连接到现有的桥接。qemu命令需要tap选项,该选项需要root权限。
sudo qemu-system-i386 \ -drive file=/dev/KingstonCF,index=1,media=disk,format=raw \ -vga std -boot order=c \ -nic tap,script=/etc/qemu-ifup.variant,model=ne2k_pci,br=br0
/etc/qemu-ifup.variant是一个QEMU用来创建和配置tap接口的脚本。用户可以根据需要更改脚本的名称和内容。QEMU主机中的默认路由由ip报告。
user@qemuhost:/home/user$ ip route show | grep default default via 10.0.2.1 dev wlxe894f6248326
Debian 11 提供的 /etc/qemu-ifup 脚本假设网桥应该连接到默认路由。在 2021年3月17日 的 qemu-discuss 邮件列表中,Berto Furth 建议使用 qemu-ifup.variant 脚本显式地识别网桥。
#! /bin/sh # qemu-ifup.variant script which will be invoked by qemu to produce a tap interface. # Specify the preexisting bridge interface which the tap will connect to. bridge=br0 ip=$(which ip) echo $0 connecting $1 to $bridge ip link set "$1" up ip link set "$1" master "$bridge" exit
如果网桥名称不是 br0,则应调整 "br=br0"。该脚本必须可执行;如果需要,请使用 chmod 命令。
chmod a+x /etc/qemu-ifup.variant
应保留已安装的 /etc/qemu-ifup 以供参考,并避免因软件包更新而造成中断。Debian 提供的空 /etc/qemu-ifdown 可以保持已安装状态。
Oberon 具有针对 3COM 和 Ne2000 网卡的软件驱动程序;但不支持 QEMU 默认的 e1000 网卡。QEMU 缺乏对 3COM 的支持。因此,qemu 命令包含 "model=ne2k_pci"。
当执行 QEMU 时,tap 选项将需要超级用户身份验证。
在 Oberon 虚拟机中,配置信息位于 Oberon.Text 文件中。
NetSystem = { Hosts = { ... Device0 = { "NetNe2000.InstallDevice", "" } ... Route0 = { Device = "Device0" Mode = "arp" Host = { "OberonSystem", "10.0.2.2" } Gateway = { "QemuHostSystem", "10.0.2.1" } Netmask = { "netmask", "255.255.255.0" } } }
请注意,在 子网 10.0.2.0/24 中,QEMU 宿主机中的网桥地址为 10.0.2.1,而 Oberon 虚拟机的地址为 10.0.2.2。同样,这些私有地址可以根据特定局域网的设计进行调整。在任何情况下,宿主机网桥和虚拟机都将位于同一个子网中,在本例中为 10.0.2.0/24。
可以通过 邮件列表 获得进一步的帮助。
- ↑ Linux 内核分配的设备名称(例如 /dev/sdc)可能会随着重新启动而发生变化。如果在虚拟机上反复启动系统,这将很不方便。由 udev 或 systemd 分配的名称应该保持稳定。
- ↑ Oberon0 是一个基础系统,而不是软件包。
- ↑ 磁盘镜像,而不是 zip 压缩文件。
- ↑ 此屏幕截图来自已配置且可引导的系统。星号标记引导分区,IDE0#05。
- ↑ CF 具有 ATA 接口,允许 通过插头适配器连接到 PC。驱动程序在 ATADisks.Mod 中实现。
- ↑ 虽然 FTP.Mod 和 FTP.Tool 不在 Oberon0 安装的基础系统中,但 FTP.Obj 存在。它提供了包括 FTP.Open 在内的 FTP 命令。
- ↑ 网桥是否必要?假设可以通过配置 Netfilter 来实现路由,但这对非专家来说很困难。 Shorewall 软件包 是一种配置路由的有效方法,但会对 QEMU 产生较大的依赖性。网桥是一种便捷的权宜之计。
- ↑ 在 Debian 11 中,错误 993716 报告了 IPv6 配置问题。ETH Oberon 仅使用 IPv4。因此,不尝试进行 IPv6 配置,并且该错误对这种用法无害。