Oberon/ETH Oberon
ETH Oberon 站点地图
ETH Oberon 教程,Fischer 和 Marais
YouTube 上的 Oberon 频道,Andres Ramos
ETH Oberon 白皮书
贡献,以前来自 ETHZ
最初,Oberon 是在裸机 32 位 i386 或 i486 机器上使用 Oberon0 软盘 进行 安装 的。该过程可能仍然让爱好者感兴趣。
在当代系统中,Oberon0 安装程序可以在 虚拟机 上运行。虚拟机只安装一次,可以用于任意数量的安装。使用此方法,无需花费时间记录和从软盘启动,并避免了软盘和驱动器的不可靠性。安装程序在虚拟机上比从软盘运行更快。该方法已成功地将 ETH Oberon 安装到各种笔记本电脑和台式机,包括 Micron Trek 2、AGP 笔记本电脑。提供了使用 QEMU 虚拟机进行 安装 的详细说明,并且这些说明可以调整以适应其他虚拟机。
Andres Ramos 描述了一种 方法,其中使用软盘上的 FAT 文件系统将安装文件传输到目标机器。
QEMU 页面 中的系统配置说明独立于安装方法。在原始安装说明中,配置在标题 已安装的本地 Oberon 系统的自定义 下讨论。在运行的 ETH Oberon 中,Script.Open System.Text
允许访问“4. 配置系统”部分。
在存储介质上安装和配置后,系统可以直接在本地 X86 PC 上运行。或者,可以使用虚拟机继续。在本地情况下,网络连接将通过以太网或串行交叉电缆。在虚拟情况下,网络连接使用连接到主机系统的 TAP 或 桥接 接口。
在桌面上使用 MM 打开一个空的 Time 文档,方法是 Desktops.OpenDoc Time ~。
在文档中使用 ML 设置钩子符号。
使用 MM 在文档中插入日历,方法是 Gadgets.Insert Clocks.NewCalendar ~。
使用 MM 在文档中插入时钟,方法是 Gadgets.Insert Clocks.NewClock ~。
使用 MM 在 [Store] 上。
使用 MM 在 [Close] 上。
使用 MM 打开 Oberon.Text,方法是 Edit.Open Oberon.Text ~。或者 ET.Open Oberon.Text ~。
在行 { System.OpenLog } 上方插入以下三行。
- { Configuration.Marker set 80% 94% }
- { Desktops.OpenDoc Time ~ }
- { Configuration.Marker set 80% 92% }
使用 MM 在 Edit.Store 或 ET.Store 上。
使用 MM 在 System.Reboot 上。
Telnet 是一种不安全的协议,但在 Oberon 和 A2 的 Oberon 子系统中提供了一个主机控制台。Oberon 子系统的主机和 LAN 中面向网络的路由器应该有一个 防火墙,例如 Shorewall。
至少在一个主机上需要一个 telnet 服务器守护进程。这在 Debian Linux 中。
sudo apt install openbsd-inetd inetutils-telnetd
在 /etc/inetd.conf 中使用此行进行配置。
telnet stream tcp nowait <user> /usr/sbin/tcpd /usr/sbin/telnetd -E bin/bash
参考 telnetd 手册。<user> 必须替换为 Oberon 用户的 ID。注意默认情况下没有身份验证;相当于参数“-a none”。重新启动 inet 守护进程。
service openbsd-inetd restart
尝试从主机中的控制台使用 telnet。
telnet localhost
然后在 Oberon 中。
Desktops.OpenDoc telnet://127.0.0.1
为了自动定位到主目录,将此行追加到 ~/.bashrc。
cd ~
TLS 对电子邮件的安全传输至关重要,现在已成为常规做法。Oberon 支持 POP 和 POP3 用于检索电子邮件,以及 SMTP 用于发送电子邮件。电子邮件可以通过 TLS 隧道从 智能主机 接收,并通过 Exim 或 TLS 隧道发送。[1]
在 ETH Oberon 中,Oberon.Text 进行这些设置。
NetSystem = { SMTP = "<host on the LAN>" {* Outgoing local exim4 or TLS tunnel to smarthost. *} POP = "<host on the LAN>" {* TLS tunnel to smarthost for incoming mail. *} ... POPMode = "POP3" {* POP3 or APOP *} EMail = "[email protected]" {* your return address *} ... }
端口 25 用于 SMTP,110 用于 POP,在 Oberon.Mail.Mod 中可见。
在 A2 中,Oberon.Text,或者如果使用 myaos 则为 Oberon.<host>.Text,进行这些设置。
NetSystem = { SMTP = "localhost" {* Outgoing local exim4 or TLS tunnel to smarthost. *} POP = "localhost" {* TLS tunnel to smarthost for incoming mail. *} ... POPMode = "POP3" {* POP3 or APOP *} EMail = "[email protected]" {* your return address *} ... }
端口在 Oberon.Mail.Mod 中可见。
安装 stunnel 并按照此示例进行配置。服务器名称和端口,例如 my.email.server:995,应根据智能主机文档进行调整。
# localhost:/etc/stunnel/stunnel.conf # Example SSL client mode services [pop3] client = yes accept = localhost:110 connect = my.email.server:995
假设系统应该启动 stunnel。在 Debian 11 中,一个 bug 会干扰自动启动。/etc/crontab 中的此行可能有效。
@reboot root /bin/stunnel
如果一切都没有效果,则使用 root 权限交互式地启动 stunnel,并提交针对 stunnel 包的错误报告。
使用 NetSystem.SetUser 设置 POP 身份验证,如以下示例所示。
NetSystem.SetUser pop:myEmailID:[email protected] ~
原始 SetUser 命令假设 @ 字符不会出现在 myEmailID 或 myEmailPassword 中。例如,此命令将失败。
NetSystem.SetUser pop:[email protected]:[email protected] ~
通过在 SetUser 命令中进行更彻底的解析来解决此问题。在 ETH Oberon 中检索修订后的 NetSystem.Mod;在 A2 中检索 Unix.Oberon.NetSystem.Mod。编译模块。在 ETH Oberon 中。
Compiler.Compile NetSystem.Mod ~
在 A2 中,应用编辑器中的编译按钮(菜单 Files > Files > Unix.Oberon.NetSystem.Mod > MM MM)或在以下命令上使用 MM。
Compiler.Compile Unix.Oberon.NetSystem.Mod ~
根据特定系统的文档安装主机上的 Exim,例如 Debian、Fedora/CentOS 等。[2] Exim 根据密码文件对智能主机进行身份验证。[3] 特定邮件服务器的配置细节可能很模糊。例如,服务器可能无法指定 STARTTLS 或 连接时的 TLS。在尝试配置 Exim 之前,最好使用 Swaks 解决歧义。将 Swaks 选项 -au、-ap、-f 和 -t 的参数替换为用户、密码和电子邮件地址的相应值。参考优秀的 手册 了解详细信息。ISP 通常使用的用户 ID 模式是 [email protected]。
swaks -tls \ -ao -apt -au [email protected] -ap r2d2\$8Ch \ -s my.smarthost.com --port 587 \ -f [email protected] -t [email protected]
示例密码有八个字符;\ 不包含在密码中,但可以防止主机 shell 错误解释 $8。[4] Swaks 自动创建一个简单的测试消息。可以调整选项参数,直到传输成功。根据上面的讨论,在 Oberon 中确认接收消息,以确认传输成功。
待补充说明。
这些表格显示了内存中表示 Text 的记录结构。当 Texts.Store() 将 Text 记录到 文件 中用于 存储介质 时,记录结构中的信息将被 序列化。在逆过程中,Texts.Load() 将信息反序列化到内存中 Text 的记录结构。
TextDesc 是 Objects.ObjDesc 的扩展。添加到 TextDesc 的字段通过不同的背景颜色与从 ObjDesc 继承的字段区分开来。
类型 | 字段的 TextDesc |
字段类型 | 备注 |
---|---|---|---|
Texts.Text,指向 Texts.TextDesc 的指针 | stamp | LONGINT | 整数 |
dlink | Objects.Object | 指针 | |
slink | Objects.Object | 指针 | |
lib | Objects.Library | 指针 | |
ref | INTEGER | ||
handle | Objects.Handler | 指针 | |
len | LONGINT | 文本长度。 | |
obs | Objects.Library | 指针 | |
trailer | Texts.Piece | 指向 哨兵节点 的指针,该节点位于片段列表中。 | |
org | LONGINT | 最后找到片段中第一个字符的偏移量,位于 [0,len) 中。 | |
pce | Texts.Piece | 最后找到的片段。 |
类型 | LibDesc 字段 | 字段类型 | 备注 |
---|---|---|---|
Objects.Library,指向 LibDesc 的指针 | next | Objects.Library | 指针 |
ind | Objects.Index | 指针 | |
f | Files.File | 指针 | |
R | Files.Rider | 指针 | |
name | Objects.Name | ||
dict | Objects.Dictionary | 指针 | |
maxref | INTEGER | ||
GName | POINTER |
类型 | PieceDesc 字段 | 字段类型 | 备注 |
---|---|---|---|
Texts.Piece,指向 Texts.PieceDesc 的指针 | f | Files.File | 指针 |
off | LONGINT | 整数 | |
len | LONGINT | ||
obj | Objects.Object | 指针 | |
lib | Objects.Library | 指针 | |
ref | INTEGER | ||
col | SHORTINT | ||
voff | SHORTINT | ||
prev | Piece | 指针 | |
next | Piece | 指针 |
对于给定的 Text T 和位于 [0, T.len) 中的偏移量 pos,过程 Texts.FindPiece 的任务是定位包含 pos 的片段。在每次执行时,FindPiece 可以从偏移量 0 开始,并累加片段的长度,直到找到包含 pos 的片段。基于 T.pce 和 T.org 的缓存可以提高效率。当 FindPiece 完成搜索时,指向找到片段的指针将被记录在 T.pce 中;该片段第一个字符的偏移量将被记录在 T.org 中。FindPiece 的下一次执行将从该缓存位置开始。由于 FindPiece 的结果通常接近上一次的结果,因此这种策略避免了从第一个片段开始的重复长度累加。
这个 数据流 示例说明了 Oberon Text、HTML 和 ASCII 文本之间的关系。
包含 非文本特征的 Oberon 文本 |
Oberon Edit.StoreAscii 命令 ⟶ |
省略非 -文本特征的 Oberon 文本 |
省略非 -文本特征的 Oberon 文本 |
|||||||||
|
|
|
||||||||||
包含颜色 和样式的 MediaWiki 标记,但 省略了超链接 |
和图像 MediaWiki ⟶ |
处理器 包含文本颜色 |
和样式的 HTML5 文本 网页 ⟶ |
浏览器 浏览器 |
文本 剪贴板或 ⟶ |
保存操作 ASCII |
文本文件
文本颜色和样式、图像和超链接在将浏览器文本转换为 ASCII 时会丢失。因此,最右边的 Oberon 文本与纯 ASCII 文本具有相同的显示效果。文本颜色和样式可以帮助阅读和理解源代码,但编译不受颜色和样式的影响。
潜在发展- [编辑 | 编辑源代码]
- 在 公共服务器 上发布包含错误修复和改进的新版本。
- 改进对 Unicode 的支持。
- 在 JPEG 中使用 霍夫曼编码。
- 改进 HTML 支持。例如,支持样式和表格。.
- PNG
- 基于现有密码模块的 SSL。
支持 触摸屏。
模块源代码ETHZ 的 ETH_Oberon 的最后一个版本是 2.3.7。在启动时,系统将在 System.Log 中宣布发布日期 2003-01-05[5]。 Sourceforge 上有文件 "Native Oberon 2.3.7 Alpha/NativeOberon_2.3.7.tar.gz" 和可引导安装映像 "Oberon0 boot disk/"。包结构位于 Native.Tool 中。源代码也可以在 https://github.com/schierlm/NativeOberon-2.3.6-Extracted 的目录 FullInstall_ASCII 中找到。源代码和工具仍然受 ETH Oberon 许可证 的约束。
系统包中的模块源代码W32.Display.Mod
Gadgets 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] | ||
Display3.Mod | ||
Input.Mod | Input.Mod | |
Displays.Colors.Mod | ||
FTPDocs.Mod |
HTMLDocs.Mod
Apps1 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] |
GfxDisplay.Mod
Apps2 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] | Wikibook 变体[6] | |
HTML.Mod |
Sort.Mod
Documentation 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] |
Examples.Mod
Build 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] | ||
DisplayMach64.Mod | ||
DisplayTool.Mod | ||
DisplayVGA4.Mod | ||
S3TrioC.Display.Mod | ||
SVGAH.Display.Mod | ||
SVGAL.Display.Mod |
Trace.Display.Mod
Lab 包中的模块源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] |
DisplayBackdrop.Mod
附加模块的源代码系统包包含大约 170 个模块。请参考 Native.Tool。 | [编辑 | 编辑源代码] | 备注 |
---|---|---|
Wikibook 变体[6] | MediaWiki.Mod |
系统包包含大约 170 个模块。请参考 Native.Tool。 | 维基教科书变体[6] | 备注 |
---|---|---|
Oberon.Text | Oberon.Text | 根据当地要求和偏好进行编辑。 |
References.Text |
系统包包含大约 170 个模块。请参考 Native.Tool。 | 维基教科书变体[6] | 备注 |
---|---|---|
Compiler.Tool | ||
FTP.Tool | ||
Native.Tool | ||
PPP.Tool | ||
Sort.Tool | ||
Tutorials.Tool |
- ↑ 对于 ETH Oberon,LAN 上的主机可以提供 Exim 和 Stunnel。对于 A2 中的 Oberon 子系统,Exim 和 Stunnel 可以运行在本地主机上。
- ↑ 主要的 Exim 文档 也可用。
- ↑ 在 Debian 中,/etc/exim4/passwd.client 将密码与每个 (主机,用户) 对关联。多个 host:user:password 规范是可接受的。该文件不确定 exim 用于发送邮件的目的地。请参阅 exim4-config_files 手册。
- ↑ 在 Oberon 中不涉及 转义字符。
- ↑ ISO 8601 日期格式。
- ↑ a b c d e f g h i j 使用 Oberon 中的 Diff.Do 或 首页上描述的 MediaWiki 功能 比较 ETHZ 和维基教科书源代码。