Oberon/A2
UnixAOS 和 A2 可以安裝並使用在裸機 PC 上,包括被認為對商業作業系統過時的桌上型電腦和筆記型電腦。這些 Oberon 風格的系統也可以作為 ARM、MS Windows 和 類 Unix 系統上的子系統執行。
安裝 UnixAOS 的原始說明[1] 位於 http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt。安裝檔案可從 http://user.informatik.uni-bremen.de/fld/UnixAos/ 獲取。

shell 指令碼安裝程式假定主機中存在 sys 組。對於缺少此組的系統,指令碼很容易進行調整。例如,以下行:
chgrp -R sys ${aosdir}
可以更改為以下內容。
chgrp -R bin ${aosdir}
UnixAOS 工作目錄可以在可移動快閃記憶體儲存器上具有 ext2 或 FAT 檔案系統。
系統的預設目錄為 /usr/aos。預設情況下,install.UnixAos 安裝啟動指令碼 /usr/bin/aos。aos 指令碼在啟動 aos.{solaris,linux,darwin} 之前調整作業系統環境。如 Readme.txt 中所述,UnixAos 可以使用以下兩個命令啟動。[2]
cd <myWorkingDirectory> aos
<myWorkingDirectory> 必須替換為特定的目錄名稱。
系統的預設目錄為 /usr/local/A2,預設啟動指令碼為 /usr/local/bin/a2。A2 可以使用以下命令啟動。
cd <myWorkingDirectory> a2
與早期版本一樣,<myWorkingDirectory> 代表特定的目錄名稱。
UnixAos 由 Configuration.XML 配置。Oberon 子系統由 Oberon.Text 配置;請參考 ETH Oberon 頁面 和原始的 betadocu 頁面。

如果工作目錄位於可移動儲存器上,則 myaos 指令碼 允許儲存裝置在配置不同的多臺機器上使用。當儲存裝置尚未掛載時,會作為預防措施應用 e2fsck。[3] 如果檔案系統已損壞,e2fsck 通常會完成修復。myaos 指令碼的合理位置是使用者的 home 目錄。對於每個主機,在工作目錄中建立檔案 Configuration.<host>.XML。要使用 Oberon 子系統,請建立 Oberon.<host>.Text。這可以透過複製安裝的檔案並編輯副本完成。例如,名為 blunder 的主機需要 Configuration.blunder.XML 用於 A2 以及 Oberon.blunder.Text 用於 Oberon 子系統。XML 檔案包含 ASCII 文字,可以使用 Linux 中的 Geany、gedit 或 mousepad,或者 A2 中的 Edit > Text 進行編輯。安裝的 Oberon.Text 包含一些二進位制資訊。[4] 在 ETH Oberon 中,它通常會使用 Edit 或 ET 進行編輯。不過,純文字也可以工作。使用 ET.StoreChar 儲存 Oberon.Text 後,可以使用 Linux 中的 Mousepad 或 Gedit、MS Windows 中的 Notepad 以及 MacOS 中的 Atom 進行編輯。這可以解決檔名 Oberon.<Host>.Text 超過 Oberon 系統 32 個字元限制的難題。myaos 將 Configuration.blunder.XML 複製到 Configuration.XML 以及 Oberon.blunder.Text 複製到 Oberon.Text,然後再啟動 UnixAos。

幾個平臺的原始碼和可執行檔案的原始倉庫是基於 Apache Subversion (SVN) 的。基於 Git 的當代 倉庫 從 SVN 版本 10270 的檔案開始。雖然 Git 存檔是當前的,但 SVN 的說明 仍然可用。
倉庫提供最新版本並允許持續更新。從使用者的角度來看,此方法基於倉庫的本地副本。本地副本是透過從 ETHZ 克隆建立的。在本地副本中,可以為目標平臺(包括裸機 PC)構建 A2 可執行檔案。Windows、Linux(Intel 32 位和 64 位)和 ARM 的子目錄中的可執行檔案可用。倉庫將佔用 0.5+ GB,具體取決於是否包含可執行檔案。
與 ETHZ 無關的使用者可以獲取 Github 帳戶。Github 登入 將允許訪問包括 問題 在內的設施。

維基百科文章 提供了有用的概述。 官方文件 可作為 參考手冊 提供,包括手冊頁和 Pro Git 書籍。 git-lfs 的文件 單獨提供。
每個 Linux 都有一個 Git 安裝程式,各種程式的流程 在 Git 網站上進行了總結。還提供特定版本的釋出資訊。對於 Debian Linux,請參閱 UsingGit wiki 頁面。如果 apt 可用,以下命令就足夠了。
# apt install git # apt install git-lfs
儲存庫目錄的名稱是任意的。“A2” 用於此示例。ls 命令可以避免名稱衝突。
# ls -ld A2 drwxr-xr-x 12 me mygroup 4096 Dec 5 09:22 A2
建立本地儲存庫。
# git clone https://gitlab.inf.ethz.ch/felixf/oberon.git A2
從原始碼更新本地儲存庫,主分支。
# git pull origin main
在 MS Windows 中檢查您擁有的內容。
dir /ad *
在 Linux 中檢查您擁有的內容。
ls -d *
輸出應與以下類似。
AosVM LanguageReport Linux32 source UnixAos Win64 ARM license.txt Linux64 tools Win32 WinAos
使用 git-lfs 跟蹤一些 zip 存檔。
# cd A2 # git lfs track "Linux*.zip" # git add .gitattributes
檢查哪些大檔案正在跟蹤。
# git lfs track
Listing tracked patterns
ARM/ARM.A2/*.bin (ARM/ARM.A2/.gitattributes)
Linux32.zip (.gitattributes)
Linux64.zip (.gitattributes)
LinuxARM.zip (.gitattributes)
Win32.zip (.gitattributes)
Win64.zip (.gitattributes)
*.bin (.gitattributes)
Linux*.zip (.gitattributes)
Listing excluded patterns
檢索特定的存檔檔案。
# git lfs fetch Linux64.zip fetch: Fetching reference refs/heads/main
驗證 zip 存檔是否存在。
# ls -ld Linux64* -rw-r--r-- 1 root root 23712521 Dec 5 09:19 Linux64.zip
解壓縮。
# unzip Linux64
Archive: Linux64.zip
creating: Linux64/
creating: Linux64/work/
inflating: Linux64/oberon.ini
creating: Linux64/bin/
inflating: Linux64/Kernel.GofU
inflating: Linux64/OpenTypeScan.SymU
inflating: ...
執行啟動指令碼。
# Linux64/a2.sh
或
# cd Linux64 ; ./a2.sh

a2.sh 的內容可以透過 "cat a2.sh" 或編輯器顯示。該指令碼執行兩個操作。“cd `dirname $0`" 切換到 a2.sh 所在的目錄;例如 ~/A2/Linux64。然後 "./oberon run a2.txt" 執行 Linux 命令 "oberon",引數為 "run" 和 "a2.txt"。a2.txt 包含 A2 命令,可以透過 cat 和編輯器顯示。第一個命令執行 oberon.ini 中的命令,包括
Files.SetWorkPath work~
在已安裝的系統中,工作區是空的。可以根據使用者的喜好編輯 oberon.ini。
Files.SetWorkPath /home/me/myWorkingDirectory~
Git 可直接從 官方網站 獲取。
在 A2 中的原始碼中,系統和 Oberon 子系統之間的區別被稱為上下文。在原始碼模組的文字中,根據 Oberon (2019) 語言報告 的“5 模組”部分確定上下文。
Module := 'MODULE' [TemplateParameters] Identifier 'IN' Identifier ';' ...
在模組範圍內,匯入模組的名稱可以使用 別名,這種語法也適用於上面提到的部分。
Import = Identifier [':=' Identifier] ...
Unix.Oberon.NetSystem.Mod 說明了上下文和別名。
MODULE NetSystem IN Oberon; IMPORT S := SYSTEM, IP IN A2, DNS := DNS IN A2, TCP := TCP IN A2, UDP := UDP IN A2, Texts, Oberon, Input, Fonts, Strings, Out;
編譯、載入、連結和相關的術語在 https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf 中討論。與所有 Oberon 系統一樣,指定模組的檔名可以與模組的名稱不同。這些檔名擴充套件在 A2 中是慣例。
| 目標系統 | 通用[5] 物件檔名擴充套件 | 符號檔名擴充套件 |
|---|---|---|
| Unix,x86,32 位 | .GofU | .SymU |
| Unix,AMD64,64 位 | .GofUu | .SymUu |
| Windows,x86,32 位 | .GofW | .SymW |
| Windows,AMD64,64 位 | .GofWw | .SymWw |
| ARM,32 位[6] | .GofA | .SymA |
| ARM,64 位 | .GofAa | .SymAa |
物件和符號檔名包含上下文,上下文與模組名稱之間用減號分隔。減號不能用作 Oberon 中的有效名稱。因此,Oberon 系統模組的物件和符號檔案分別命名為 Oberon-System.GofU 和 Oberon-System.SymU。
如果 A2 儲存庫根據上面的說明就位,則 A2 可以執行。
識別支援的體系結構。
cd <somewhere>/A2/
在 MS Windows 中。
dir /ad *
在 Linux 中。
ls -d *
輸出應與以下類似。
AosVM LanguageReport Linux32 source UnixAos Win64 ARM license.txt Linux64 tools Win32 WinAos
檢視啟動過程。在 MS Windows 中。
dir /ad Win32/*
在 Linux 64 中。
ls -ld Linux64/*

oberon 檔案必須可執行。執行啟動指令碼。適用於執行 MS Windows 的 32 位機器。
./Win32/a2.bat
適用於執行 Linux 的 64 位機器。
./Linux64/a2.sh
或
cd Linux64 ; ./a2.sh
應出現右側的視窗。
oberon.ini 包含 A2 命令,包括
Files.SetWorkPath work~
在已安裝的系統中,工作區是空的。根據工作目錄的偏好編輯 oberon.ini。例如
Files.SetWorkPath /home/me/myWorkingDirectory~
各種文件和應用程式可透過 A2 顯示屏左下角的選單獲得。注意演示和文件 > 程式演示。
在目標系統、本地主機或外部系統中,安裝 SSH 伺服器。這是一種可能性。
sudo apt install openssh-server
在 A2 選單中呼叫工具 > 安全外殼。對於主機,指定 "localhost" 或 "127.0.0.1"(不帶引號)或外部機器的名稱或地址。指定您的使用者 ID。單擊連線。在提示時提供您的密碼。
使用 IMAP 的郵件客戶端位於應用程式 > 郵件客戶端。Oberon 子系統有 Mail.Panel 支援 POP、POP3 和 SMTP,ETH Oberon 的說明和說明 適用。

在 A2 螢幕的左下角,選單工具 > Oberon 和開發 > Oberon 全屏允許互動式啟動 Oberon 子系統。
子系統也可以透過 Configuration.XML 的自動啟動部分中的命令或命令開啟。在 UnixAos,修訂版 4929 中,Configuration.XML 中有這些行。
<Section name="Autostart"> ... <Setting name="OberonDisplay" value="OberonDisplay.Install Oberon 1100x704 0 74 ~"/> <Setting name="OberonStart" value="Oberon.Call System.Init Oberon"/>
這在更新的版本中[7]。
<Section name="Autostart"> ... <Setting name="Start an Oberon" value="Oberon.Start Oberon 1100x704 0 74 ~"/>
尺寸 1100x704 可根據需要調整,以便在檢視器中獲得文字的最佳比例。如果透過滑鼠抓住右下角拉伸 Oberon 視窗,則文字與檢視器的比例會保持不變。
滑鼠的使用方式不尋常,但效率很高。學習使用滑鼠絕對值得花費一小點時間。擁有三個按鈕或兩個按鈕和滾輪的滑鼠幾乎是必不可少的。<Esc> 鍵用於中斷任務。例如,它可以中斷長時間執行的 FTP.GetFiles。<F1> 設定 * 標記。<F2> 清除所有標記。如果意外按下滑鼠按鈕,則在釋放任何按鈕之前一起按下的所有滑鼠按鈕都不會生效。有關滑鼠和鍵盤輸入和使用方式的完整詳細資訊,請參閱 滑鼠支援、滑鼠教程 和 鍵盤支援 頁面。
Telnet 是一種不安全的協議,但它在 Oberon 子系統中提供了一個主機控制檯。ETH Oberon 說明 適用於 Oberon 子系統。

與郵件伺服器一樣,新聞伺服器現在也需要身份驗證。因此,需要對 NetSystem 和 News 模組進行修訂以支援身份驗證。編譯修訂後的模組。
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 | 指標 |
A2 中大約 2000 個原始碼的示例。
當代 Firefox 瀏覽器嘗試從 副檔名 推斷“內容型別”。預設情況下,Firefox 錯誤地推斷出原始檔 *.Mod 包含“Amiga SoundTracker 音訊”,並且無法開啟它。透過調整 Firefox 與“內容型別”關聯的“操作”可以解決此問題。開啟 漢堡選單 > 設定 > 常規 > 應用程式。對於“Amiga SoundTracker 音訊”,選擇一個編輯器,例如 /usr/bin/mousepad 或 /usr/bin/gedit。A2 中的大多數原始碼已轉換為 純 ASCII 文字;一些仍然是 Oberon 文字。Gedit 可以開啟所有這些。Mousepad 和其他幾個編輯器無法開啟 Oberon 文字。“純文字文件”的內容型別也應設定為所選編輯器。透過這些調整,Firefox 應該可以開啟儲存庫中的大部分檔案。
在某些情況下,使用者可能無法找到瀏覽器配置來開啟儲存庫中的檔案。無論如何,瀏覽器應該開啟 Wikibook 複製品。
- ↑ Git 儲存庫(後面有描述)是一種更近期的安裝和版本跟蹤方法。
- ↑ 類 Unix 系統中的命令列字首是使用者可配置的,並且可以配置為空字串。為簡單起見,此處顯示的大多數命令中都省略了字首。
- ↑ 如果在系統關閉之前未解除安裝檔案系統,則檔案系統可能會損壞。目錄也可能因儲存介質的自然退化而損壞。如果檔案系統完好無損,則 e2fsck 的執行時間可以忽略不計。
- ↑ 請參閱 Oberon/Text。
- ↑ “通用”是指載入器和連結器適用於所有目標系統,與語言和執行時系統的更改無關。
- ↑ 允許 A2 在 樹莓派 上使用。
- ↑ Oberon 子系統使用 MenuPage30.XML 啟動。從兩個命令更改為一個命令的更改由
svn diff -r 5253:5254 .../MenuPage30.XML報告。 - ↑ 在某些情況下,Wikibook 複製品與 ETHZ 儲存庫中的最新檔案不同。為了進行準確的比較,請使用檔案比較器;Oberon 中的 Diff.Do,Linux 中的 comm。一些原始碼有討論頁面。例如,Oberon.Mail.Mod 討論。
- ↑ 執行
BootManager.Split BootManager.Bin命令將 BootManager.Bin 分割成 BootManagerMBR.Bin 和 BootManagerTail.Bin。有關更多詳細資訊,請參閱 André Fischer 的 說明文件。