本書は2006年から2018年に発行した同人誌「Opearating System Maniacs」の総集編として2018年に発行されたものを、2022年度までの状況を踏まえて一部削除、補筆、追加したものです。
入手、インストール、起動、使用感などについてレポートした記録を中心に、マイナーなOSについての記事を取りまとめています。
なるべく更新、修正していますが、周辺環境やOSの導入試験を実施している環境について、一部2006~2018年当時の情報で記載されているものもありますので、その点についてはご了承下さい。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
AROS Research Operating System(AROS、アロス)は、AmigaOS 3.1 APIのオープンソースかつフリーソフトウェアの実装です。
オープンソース系のOSとしてはかなりの達成度であり、かつ現在も開発が進んでいます。
当方が初めて知ったときは、まだAmiga Research Operating Systemという名前でした。
Amigaという名称が商標だかに触れるので、OS名からは削除したということでした。以下のURLが参考情報として引っかかりました。
基本的にはバイナリ互換ではなく、ソースコード互換を目指していて、AmigaOS上のソフトウェアであっても再コンパイルが必要になるようです。当方は正直に言って、Amiga自体を触ったことがありませんし、一番ホットだった時期のことはあまりよく知らないのですが、現状でもRegend的に語られることが多く、気にはなるOSです。正直Amigaを知っていたらもっと熱を入れて触ってたんでしょうけれどもね…
メインサイトは以下になります。
ディストリビューションは複数あり、ざっと見た感じでは以下のように分類されるようです。
・Linux/FreeBSD上で動くもの
・Windows上で動くもの(Windows上の仮想マシン)
・Live-DVD/CD
・Nativeインストール
64bit環境もサポートしており、実機はPPC、x86、IA64、x86-64あたりをサポートしています。
ことにWindows上/Live-DVDで動く「ICAROS」というディストリビューションに、現在は力を入れているように見えます。
本来的には、ISOからCDで起動⇒ツールを使用してインストールの流れで行います。
単純にインストールを行うだけであればまったく難しいことはないので、簡単に記載します。
AROSのオフィシャルサイトに行って、必要なファイルをダウンロードします。
上記で記載したとおり、AROSは現状は「ICAROS Desktop」というWindows上での仮想イメージ上で動くディストリビューションに力を入れているように見えます。
なので、わかりやすい形でのダウンロードは「ICAROS」のみなのですが、そこから下にたどると、各種ディストリビューションのNightly Buildがダウンロードできます。
使用したい環境、アーキテクチャにあったものをダウンロードします。なお、必ずすべてのものが毎回Buildされているわけではないので、必要なものの最新のものをダウンロードしてテストします。
今回はAROS-20100728-pc-i386-boot-isoをダウンロードしました。
ISOイメージを読み込ませ、CD-ROMから起動すると、上記のようにおなじみのGrubのBootローダ画面が起動してきます。
よく見るとわかりますが、読み込むディスプレイドライバを指定できるようです。
今回はVMWareなので、(VMWareSVGA graphics)で起動します。また、他のものを選んでもうまく表示されませんでした。実機の場合は、VESAの各種画面サイズに合うようなものを選択すればよいのかなと思います。
上記が起動画面です。グラフィカルで美しいのですが、実は1024x768くらいの領域を確保されたうちの画面左上にちょこっと表示されるような形になってしまっています。
デスクトップ上にある「Install AROS」というアイコンをクリックすると、上記のようなプログラムが立ち上がります。
Proceedを押下して、インストールを実行していきます。
多少時間がかかりますが、各種ファイルが転送されて、再起動します。
CD-ROMイメージをはずしてHDDから起動すれば、AROSが立ち上がるかと思います。
今回はこれ以上のテストがままなりませんでした。スペック的なことよりも、まず画面が小さすぎて触りにくいのです。
実機でVESAが使用できるもので、もう少し広い画面でテストができれば、ポテンシャルは高いOSだと思いますので、いろいろな遊び方はできると思います。
なお、現時点では特に日本語対応はされていないようです。マルチバイトも対応していないようです。
本家のサイトのニュース欄は2016年11月が最新ですが、AROS用ソフトウェアが投稿されている http://archives.aros-exec.org/index.php では直近でもソフトウェアが投稿されているようなので、一応まだまだユーザーもいるようです。
2022年現在も複数のディストリビューションが一応はあるようですが、ちょっと触ってみようといった場合には「Icaros Desktop LIVE!」ディストリビューションを選ぶしかなさそうです。
BOOTさせると、まずはこれまで同様Grubで起動してきます。そのままLive起動してみます。
VirtualBox仮想マシンでメモリー2GB、HDDなしで起動させてみましたが、起動自体は一瞬でした。
以前は仮想マシンの画面4分の1にしか表示されていませんでしたが、2022年度に起動させてみた際には、問題なく画面いっぱいに表示されました。
右クリックをすると、様々なアプリケーションの起動を選択できます。スタートメニューがデスクトップでの右クリックのようなイメージです。
「InstallAROS」を選択することで、ハードディスクにインストールが可能なようです(今回は試していません)
右クリック->Program->OWB を選ぶと、ブラウザーを起動できます。
「Odeyssey Web Browser」というのはWebkitベースのブラウザーで、元はフランスのSand-labs/Pleyoという会社が開発した「Origyn Web Browser」という名前だったようです。
もともと開発していたSand-labsが消滅した後に、別項でも扱う「Morphos」というOSの開発者が後を継いだ際に改名したようです。
WebkitベースであるためかGoogleのトップページだけですが、問題なく表示できました。日本語のフォントはどういう扱いになっているのかまで、突っ込んで調査していません。
同じように、右クリックからエディターも立ち上げられます。
いわゆるファイラーのようなものをふたつ、ディレクトリーブラウザーとエクスプローラ的なファイラー、入出力設定画面などを起動してみたところです。
元がAmigaの代替OSというのが出発点というのもありますが、相変わらずアジア圏の言語の入力方法はなさそうです。
右クリックした際の表示は、上記のようになっています。
「Programs」のところを見ると、ビューワー、エディター、ミュージックプレイヤー等のアプリケーションは一通りあるようです。
日本語の入力方法がないので、現状日本で何かしら使うというのは難しそうですが、Amigaの系譜ということでグラフィックやオーディオビジュアル関連のアプリケーションはそろっているようです。
このくらいまで完成度が高まってくるといろんなことができそうなので、腰を据えて今後、もう少し突っ込んだ使用感なども試せればと思っています。
繰り返しになりますが、どうしてもAmigaに直接的には触れていないこともあって、Amiga資産を使うなどの有用な試験ができていないのが残念なところです。
OSとしての完成度は高いので、日本語が必要ではない画像、映像、音楽などのデータを扱うアプリケーションを試すなどの方向性で使ってみるのが面白いかもしれません。
「Fuchsia」は、数年前に開始され、最近になって明示的にサイト開設がされたことなどで若干の話題になっているGoogleの「第3の」OSと呼ばれているものです。
みんな大好きWikipediaによると、カーネルはZirconというマイクロカーネルなのだそうですが、この開発者が(別項で取り扱っている)Haiku OSが採用している「NewOSカーネル」の作成者と同じ方なのだそうです(そもそもからしてBeOSのカーネル開発者であったようですが)。
というわけで、出自からも、また現在進行形で進められているプロジェクトということもあり、マイナーOS本としても、技術書的な視点からも非常に面白そうです。
Fuchsiaが発表されたのは2016年頃で、当方も2017年頃から気にはなっていたのですが、正直敷居が高く、触れるにはどうにも二の足を踏んでいました。
ですが、2019年の6月ごろに、開発者向けの公式Webサイトが立ち上げられ(元々ある程度ビルド方法などはまとめられていたようですが)情報が取りまとめられ、とりあえず触れてみるためのハードルは少しだけ下がったように思います。
今回はいい機会なので、Fuchsiaのビルドと動作確認、最終的には実機での起動確認をしてみたいと思います。
なお、実機としてはChrome PixelbookやInte NUC(6/7)などに対応しているとのことです。実機での動作確認身はIntel NUCを購入して進めたいと考えています。
※対応しているハードウェアであれば、GUI及び各種デモ動作なども確認できるようなので、なんとか試してみたいと思っています。
2019年6月に公開された開発者向けのWebサイトです。
今回の原稿は基本的に、このサイトに記載されている情報に基づいて書かれています。
情報量はかなりのもので、また、比較的丁寧にそれぞれのツールの情報、コマンドのオプション、実際のターゲット別のビルド手順などもまとめられていますので、もしご興味があれば是非ご覧になってみてください。
実際にやろうとすると多少原文を読まないと意味が分からんところもありますが、流し読みするならGoogle等のオンライン翻訳でも十分に内容を追えると思います。
それでは、Fuchsiaのビルドと実行に進みます。
現状では、macOS環境とUbuntu Linux環境で実施することが想定されているようです。本稿では検証用の仮想マシン環境を構築します。OSはUbuntu 20.04 LTSを用います。仮想マシンは以下のスペックです。
・CPU:4
・メモリー:16GB
・ディスク:200GB
念のため
VBoxManage modifyvm "【仮想マシン名】" --nested-hw-virt on
で、仮想化のネスト設定も有効にしておきます。
作成した仮想マシンにUbuntu 20.04 Server LTSをインストールします。
注意点としてビルドの際に容量を結構食うので、余裕のあるディスク容量を確保したほうがいいようです。前述通り200GBを確保していますが、実は最初うっかりデフォルトの50GBで進めてしまい、ビルド中に空き容量が0になってしまい、失敗しています。
最低でも200GB、可能ならもっと容量を確保しておいたほうがいいかと思います。
インストールが終了したら、お決まりではありますが、最新版へのアップデートを忘れないようにしましょう。
$ sudo apt update
$ sudo apt upgrade
ここから、具体的な環境構築手順に入ります。
まずは、必要なツール類をインストールします。オフィシャルサイトの記載通りに、以下ソフトウェアをインストールします。
$ sudo apt-get install build-essential curl git python unzip
準備ができたので、Fuchsiaのソースコードをダウンロードします。こちらも、オフィシャルサイトに記載があるスクリプトを実行すると、自動でディレクトリーの作成とソースコードのダウンロードを行ってくれます(curl以降を1行で入力します)。
$ cd ~
$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap? format=TEXT" | base64 --decode | bash
ダウンロード後、一部が認証エラーでダウンロードできなかった旨が表示されるので、指示されたコマンドを実行します。【User名】は、実際は実行したユーザー名が表示されます。
WARN: Some packages are skipped by cipd due to lack of access, you might want to run "/home/【User名】/fuchsia/.jiri_root/bin/cipd auth-login" and try again
Visit the following URL to get the authorization code and copy-paste it below.
https://accounts.google.com/o/oauth2/【非常に長い認証用のURL文字列が表示されます】
Authorization code:
やたら長いURLが表示されるので、ブラウザーのアドレスバーにコピペします。接続先でGoogleアカウントでのログインを要求されますので、Googleアカウントが必要です。
ログインを実施するとAuthorization codeが表示されるので、それを上記の「Authorization code:」のところにコピペします。
Scopes:
https://www.googleapis.com/auth/userinfo.email
openid
認証に成功したら、ダウンロードスクリプトを再実行します。
$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash
Updating all projects
Done creating a Platform Source Tree at "/home/【User名】/fuchsia".
Recommended: export PATH="/home/【User名】/fuchsia/.jiri_root/bin:$PATH"
パスの追加を指示されるので、実行します。※/binにシンボリックリンクを作成するなどしてパスを追加しないで進めることもできますが、普通に追加しておいたほうが楽なので、記載のコマンドを実行するか、ホームディレクトリーの ~/.bashrc にパスの追加を記載します。また、この際に、fuchsiaの各種操作を行うコマンドを実行できるように「fx-env.sh」というスクリプトも有効になるようにしておきます。
$ vi .bashrc
~以下を追記~
export PATH=~/fuchsia/.jiri_root/bin:$PATH
source ~/fuchsia/scripts/fx-env.sh
$ source ~/.bashrc
パスが通ったことを確認するために、パッケージの取得ツールである「jiri」とFuchsiaのビルドのためのツールである「fx」のヘルプを表示してみます。
以下、「jiri」のヘルプです。
$ jiri help
Command jiri is a multi-purpose tool for multi-repo development.
Usage:
jiri [flags] <command>
The jiri commands are:
~以下省略~
以下jiriコマンドについての詳細な情報が多数表示されます。
以下「fx」のヘルプです。
$ fx help
usage: fx [--dir BUILD_DIR] [-d DEVICE_NAME] [-i] [-x] COMMAND [...]
Run Fuchsia development commands. Must be run either from a directory
that is contained in a Platform Source Tree or with the FUCHSIA_DIR
environment variable set to the root of a Platform Source Tree.
host shell extensions: (requires "source scripts/fx-env.sh")
fx-update-path add useful tools to the PATH
fx-set-prompt display the current configuration in the shell prompt
~以下省略~
以下fxコマンドについての詳細な情報が多数表示されます。
Pathが通ったのを確認したところで、いよいよFuchsiaをビルドしていきます。
基本的なビルド手順は
$ fx set
コマンドで、ビルド対象のプロダクトとターゲットアーキテクチャ、モード等の設定を行い、
$ fx build
コマンドでfuchsiaのビルドを行います。
fx setの後に必ず指定する必要のあるオプションは
$ fx set 【プロダクト名】.【ターゲットアーキテクチャ名】
になります。
・【プロダクト名】
プロダクト名には./productsディレクトリー以下の.gniファイル名を指定可能です。
・コマンド
$ fx list-products
でも確認することができます。
デフォルトで用意されているものは、以下のものがあります。
・bringup
Zirconカーネルと最低限のドライバ
・core
bringupにさらにネットワークの機能やシステムサービスを追加したもの。
・terminal
coreに基づきさらにコマンドライン端末を備えたシンプルなグラフィカルユーザーインターフェイスを備えたシステム。
・workstation
GUI付きのパッケージを追加したもの。
「ソフトウェア開発者が仕事を成し遂げるために使用できるシステム」という表現がされています。実際の動作確認や開発などは、このプロダクトで構築する必要がありそうです。
さらに、./productsディレクトリーの中のREADMEを見ると、以下のような記述があります。
・speaker
オーディオ入力と出力を備えたデバイス用のモジュール式のエフェメラルシステム(GUIなし)。
・router
ワイヤレスネットワークを介してネットワークトラフィックをルーティングするためのシステム。
ただこれらふたつについての.gniファイルは存在しません。今後追加されるものを例示しているのではないかと思います。
・【ターゲットアーキテクチャ名】
ターゲットとするアーキテクチャの指定です。
$ fx list-boards
で、詳細な情報を得ることができます。
arm64
as370
c18
chromebook-x64
cleo
*
kirin970
msm8998
msm8x53-som
mt8167s_ref
qemu-arm64
qemu-x64
toulouse
vim2
vim3
vs680
x64
x64-reduced-perf-variation
2020年12月現在だと、上記のようなものが用意されているようです。*は未指定の場合のエイリアスか何かなのでしょうか。現在の完成度だと、上記のボード情報として存在するものでないと動かないようです。
特にarmの場合、ボードの正しい指定が非常に重要になるようです。
今回は、まずは動かすことを優先し、グラフィックスを用いない「core」プロダクトを仮想マシン用にセットアップします。
※ちなみにエミュレーター環境で動かす場合、qemuではGUIとして採用されているVulkanに対応していないので、そもそもグラフィックスが正常動作しないそうです。
以上を踏まえ、セットアップ/ビルドを進めていきます。
なお、最初の--dirオプションは、セットアップの際に出力する際のディレクトリーを個別に指定するためのものです。これで同じセットアップ情報でも、別々にビルドすることも可能です。
$ fx --dir out/qemucore set core.qemu-x64
$ fx build
「qemucoreというディレクトリーをoutディレクトリー配下に作成し、coreプロダクトのx64アーキテクチャ版をqemuボードサポートでセットアップ」という意味になります。問題なくセットアップが完了したら、buildします。
※なお、buildに関してオプションを何も指定していませんが、この場合デバッグビルドになるそうです。
--release
オプションを付けると、リリースビルドになります。
また、fx set-deviceコマンドを用いて設定することで、同じディレクトリーから別々のデバイス向けのbuildを出力することもできるようです。
今回はシンプルにbuildします。ビルドには結構な時間がかかります。説明にも「最大90分かかるんで覚悟しろや」と書いてあります。coreプロダクトであればそれほどでもありませんが、workstationだとかなりかかるので、注意しましょう。
まずはqemuで起動してみます。
$ fx qemu
非常に長いログが出力されます。自動でイメージを構成して起動するようです。
Creating disk image...
done
CMDLINE: TERM=xterm kernel.serial=legacy kernel.entropy-mixin=84fce1c1a4c2fb7644c48aef0efe30f0a7cb04f32062c04fcfa4b05e9b1f901f kernel.halt-on-panic=true
+ exec /home/【User名】/fuchsia/prebuilt/third_party/qemu/linux-x64/bin/qemu-system-x86_64 -kernel /home/【User名】/fuchsia/out/qemucore/multiboot.bin -initrd /home/【User名】/fuchsia/out/qemucore/tmp.XbN/fuchsia-ssh.zbi -m 8192 -nographic -drive file=/home/【User名】/fuchsia/out/qemucore/tmp.XbN/fvm_raw.blk,format=raw,if=none, id=mydisk -device ich9-ahci,id=ahci -device ide-hd,drive=mydisk,bus=ahci.0 -nic none -smp 4,threads=2 -machine q35 -device isa-debug-exit,iobase=0xf4,iosize=0x04 -fw_cfg name=etc/sercon-port,string=0 -cpu Haswell,+smap,-check,-fsgsbase -append 'TERM=xterm kernel.serial=legacy kernel.entropy-mixin=84fce1c1a4c2fb7644c48aef0efe30f0a7cb04f32062c04fcfa4b05e9b1f901f kernel.halt-on-panic=true '
qemu-system-x86_64: -fw_cfg name=etc/sercon-port,string=0: warning: externally provided fw_cfg item names should be prefixed with "opt/"
[00000.000] 00000:00000> printing enabled
[00000.000] 00000:00000> Data ZBI: @ 0xffffff8001088000 (16268224 bytes)
[00000.000] 00000:00000> UART: enabled with FIFO depth 16
[00000.000] 00000:00000> ACPI LITE: Found RSDP at physical address 0xf5860.
[00000.000] 00000:00000> ACPI LITE: Found valid RSDT table at physical address 0x7ffe2204
[00000.000] 00000:00000> PMM: boot reserve add [0x100000, 0x3e9fff]
[00000.000] 00000:00000> PMM: boot reserve add [0x1088000, 0x200bfff]
[00000.000] 00000:00000> PMM: adding arena 0xffffffff003e4f00 name 'memory' base 0x100000 size 0x7fedf000
[00000.000] 00000:00000> PMM: adding arena 0xffffffff003e4f00 name 'memory' base 0x100000000 size 0x180000000
[00000.000] 00000:00000> PMM: boot reserve marking WIRED [0x100000, 0x3e9fff]
[00000.000] 00000:00000> PMM: boot reserve marking WIRED [0x1088000, 0x200bfff]
[00000.000] 00000:00000> INIT: cpu 0, calling hook 0xffffffff00147360 (global_prng_seed) at level 0x20001, flags 0x1
[00000.000] 00000:00000> INIT: cpu 0, calling hook 0xffffffff002c96c0 (intel_rng_init) at level 0x20001, flags 0x1
[00000.000] 00000:00000>
[00000.000] 00000:00000> welcome to Zircon
※この後もしばらくログ出力が続きます※
しばらくしてコンソールが戻ってきたら、簡単なコマンドを投入してみます。
dm helpで投入可能なコマンドが表示されます。
$ dm help
dump - dump device tree
poweroff - power off the system
shutdown - power off the system
suspend - suspend the system to RAM
reboot - reboot the system
reboot-bootloader/rb - reboot the system into bootloader
reboot-recovery/rr - reboot the system into recovery
kerneldebug - send a command to the kernel
ktraceoff - stop kernel tracing
ktraceon - start kernel tracing
devprops - dump published devices and their binding properties
drivers - list discovered drivers and their properties
dm drivesで現在のドライバー適用状況が表示されます。こちらはちょっと出力が長いので、割愛します。
dm dumpでデバイスの認識状況がツリー表示されます。
$ dm dump
[root]
<root> pid=3519
[null] pid=3519 /boot/driver/builtin.so
[zero] pid=3519 /boot/driver/builtin.so
[misc]
<misc> pid=3606
[ramctl] pid=3606 /boot/driver/ramdisk.so
[sys]
<sys> pid=3401 /boot/driver/platform-bus.so
[platform] pid=3401 /boot/driver/platform-bus.so
[acpi] pid=3401 /boot/driver/platform-bus-x86.so
[acpi-pwrbtn] pid=3401 /boot/driver/platform-bus-x86.so
[hid-device-000] pid=3401 /boot/driver/hid.so
[rtc] pid=3401 /boot/driver/platform-bus-x86.so
[rtc] pid=3401 /boot/driver/intel-rtc.so
[i8042] pid=3401 /boot/driver/platform-bus-x86.so
[i8042-keyboard] pid=3401 /boot/driver/pc-ps2.so
[hid-device-001] pid=3401 /boot/driver/hid.so
[InputReport] pid=3401 /boot/driver/hid-input-report.so
[i8042-mouse] pid=3401 /boot/driver/pc-ps2.so
[hid-device-002] pid=3401 /boot/driver/hid.so
[InputReport] pid=3401 /boot/driver/hid-input-report.so
[serial] pid=3401 /boot/driver/platform-bus-x86.so
[serial] pid=3401 /boot/driver/platform-bus-x86.so
[uart16550] pid=3401 /boot/driver/uart16550.so
[serial] pid=3401 /boot/driver/serial.so
[ppp] pid=3401 /system/driver/serial-ppp.so
[00:00:1b] pid=3401 /boot/driver/platform-bus.so
[sysmem] pid=3401 /boot/driver/sysmem.so
[cpu-trace] pid=3401 /boot/driver/platform-bus.so
[pci] pid=3401 /boot/driver/platform-bus-x86.so
[00:00.0] pid=3401 /boot/driver/bus-pci.so
[00:01.0] pid=3401 /boot/driver/bus-pci.so
<00:01.0> pid=4341 /boot/driver/bus-pci.proxy.so
[bochs_vbe] pid=4341 /boot/driver/simple.bochs.so
[display-controller] pid=4341 /boot/driver/display.so
[00:02.0] pid=3401 /boot/driver/bus-pci.so
<00:02.0> pid=4432 /boot/driver/bus-pci.proxy.so
[ahci] pid=4432 /boot/driver/ahci.so
[sata0] pid=4432 /boot/driver/ahci.so
[block] pid=4432 /boot/driver/block.core.so
[fvm] pid=4432 /boot/driver/fvm.so
[blobfs-p-1] pid=4432 /boot/driver/fvm.so
[block] pid=4432 /boot/driver/block.core.so
[minfs-p-2] pid=4432 /boot/driver/fvm.so
[block] pid=4432 /boot/driver/block.core.so
[zxcrypt] pid=4432 /boot/driver/zxcrypt.so
[unsealed] pid=4432 /boot/driver/zxcrypt.so
[block] pid=4432 /boot/driver/block.core.so
[00:1f.0] pid=3401 /boot/driver/bus-pci.so
[00:1f.2] pid=3401 /boot/driver/bus-pci.so
<00:1f.2> pid=4562 /boot/driver/bus-pci.proxy.so
[ahci] pid=4562 /boot/driver/ahci.so
[00:1f.3] pid=3401 /boot/driver/bus-pci.so
[test]
<test> pid=3459
[test] pid=3459 /boot/driver/test.so
[virtual_audio] pid=3459 /system/driver/virtual_audio_driver.so
helpに表示されていますが、「poweroff」または「shutdown」でシステムOFFできます。
$ dm poweroff
[00687.713] 12757:12759> [shutdown-shim]: checking power_manager liveness
[00687.807] 12757:12759> [shutdown-shim]: trying to forward command
[00688.171] 02104:02106> [driver_manager.cm] INFO: [system_state_manager.cc(55)] Setting shutdown system state to 5
※この後も非常に長いログが表示されますが、誌面の都合上、割愛します。
というわけで、前半ではコンソールでのビルドおよび、カーネル周りのコマンドを少し触った程度でした。後半では実機導入、GUI操作をやっていきます。
・ccacheでビルドをスピードアップ
$ sudo apt-get install ccache
デフォルトのディレクトリーでfuchsiaのセットアップディレクトリーを準備している場合、CCACHE_DIR環境変数が自動的に有効になるので、常に使われる状態になるようです。
・コードの最新化
$ jiri update
コマンドでプロジェクト全体を最新に保つことができます。
なお、qemuおよび専用のエミュレーター(qemuベースのようですが)用にBuild可能なように作られていますが、Intel NUCや、Google Pixelbookで動作させる手順のガイドも発表されており、Youtubeに動画も上げられています。
というわけで、Googleが開発中の「第3のOS」Fuchsiaについて触れてみました。稼働可能な実機が限定されているのでお手軽に実験というわけにはいきませんが、入手がそこまで困難なハードウェアでなければ、むしろ動作させるためのハードルは若干低くなるという面もある(少なくとも動作させるエビデンスがしっかりしている)というのはあるかもしれません。いくつかネットにも動作させた記事等が出回っていますし、非常に新しいOSであること、天下の?Googleが開発しているOSですので、今後もなるべくトレースしていきたいと考えています。
後半ではFuchsia OSを実機で動かしてみます。
2021年の5月頃位には、搭載したデバイスが発売されるとかなんとかといった記事も出てきているようです。
https://cloud.watch.impress.co.jp/docs/column/infostand/1328053.html
後半では前半でも少しコメントした通り、実機へのFuchsiaのインストールをやっていきます。
今回導入するのはオフィシャルサイト内の各種資料内でインストール可能なデバイスとしてあげられている、Intel NUC6にインストールを行います。SSDはありものの流用、メモリーは新規に購入しました。
一部前半と重複する内容も記載されています。
基本的なビルド手順は
$ fx set
コマンドで、ビルド対象のプロダクトとターゲットアーキテクチャ、モード等の設定を行い、
$ fx build
コマンドでfuchsiaのビルドを行います。
fx setの後に必ず指定する必要のあるオプションは
$ fx set 【プロダクト名】.【ターゲットアーキテクチャ名】
になります。
プロダクト名には./productsディレクトリー以下の.gniファイル名を指定可能です。コマンド
$ fx list-products
で確認することができます。
デフォルトで用意されているものは、以下のものがあります。
・bringup Zirconカーネルと最低限のドライバ
・core bringupにさらにネットワークの機能やシステムサービスを追加したもの。
・terminal coreに基づき、さらにコマンドライン端末を備えたシンプルなグラフィカルユーザーインターフェイスを備えたシステム。
・workstation GUI付きのパッケージを追加したもの。
ターゲットとするアーキテクチャの指定です。
$ fx list-boards
で詳細な情報を得ることができます。なお、アップデート時に削られたのか、前半で行った際の表示からずいぶんと減っています。
arm64
chromebook-x64
*
qemu-arm64
qemu-x64
toulouse
vim2
vim3
x64
x64-reduced-perf-variation
今回はIntel NUCで動かしますので、「workstasion.x64」を使ってビルドします。
最初の--dirオプションは、セットアップの際に出力する際のディレクトリーを個別に指定するためのものです。これで同じセットアップ情報でも、別々にビルドすることも可能です。
$ fx --dir out/NUC set core.workstation.x64
$ fx build
セットはそれなりにすぐ完了しますが、セットアップ後のbuildはかなり時間がかかりますので、しばし待ちます。
その他オプション等:
--release
オプションを付けると、リリースビルドになります。つけていない場合はデバッグビルドです。
fx set-device
を用いて設定することで、同じディレクトリーから別々のデバイス向けのbuildを出力することもできるようです。
ビルドが完了したら、開発側マシンにUSBメモリーを認識させて、そこにブートローダーを構成します。
今回はVirtualBoxで開発環境を構築していますので、仮想マシンでUSBメモリーが認識されていることを確認します。通常は「USB」メニューのデバイスフィルターに表示されていれば問題ないはずです。ただ、仮想マシン起動後にUSBメモリーを母艦に接続した場合、一度仮想マシンの再起動が必要かもしれません。
起動可能なUSBメモリーを作成するため、まずはUSBメモリーのパスを特定します。
$ fx list-usb-disks
$ /dev/sdb
ビルドしたイメージ用のZedboot USBドライブを作成します。
$ fx mkzedboot /dev/sdb
以下のようなログが表示されます。
Creating disk image...
/dev/sdb - Flash Disk
INFO: Changing ownership of /dev/sdb to makoyuki
[sudo] password for makoyuki:
INFO: Opening device...
INFO: Create new GPT partition table...
WARNING: Primary GPT header is invalid
WARNING: Secondary GPT header is invalid
20676E69-7973-7473-656D-000000637B9A
INFO: done
INFO: Create new partitions...
INFO: done
INFO: Writing zedboot for EFI
56720+0 records in
56720+0 records out
29040640 bytes (29 MB, 28 MiB) copied, 133.559 s, 217 kB/s
INFO: done
INFO: Closing device.
done
「done」と表示されて正常終了が確認できたら、Intel NUCでのBootを行います。
Intel NUCを先ほど作成したUSBメモリーで起動します。
Intel NUCにUSBメモリーを接続して、電源を入れます。
起動作業の前に、INTEL NUC側の設定をします。起動時にF2を押下して「Visual BIOS」画面を開きます。
「Legacy」タブをクリックして「Legacy Boot」のチェックを外します。
次に「Advanced」を選択して、「Boot」を選択、「UEFI Boot Priority」でUSBメモリーの起動順序を最優先に変更します。
この状態で設定を保存し、再起動します。
USBメモリーから起動し。zedbootが正常に起動し、上記のような画面になります。Alt+F3を押下し、ターミナル画面に遷移します。zedbootから見たSSDのブロックデバイス名を「lsblk」コマンドで表示させて、パーティションをいったん削除/新規にパーティションを作成し、そこにイメージをインストールします。コマンドとしてはIntel NUC側のターミナルで以下を実行します。
$ lsblk
$ install-disk-image wipe-partition-tables --block-device /dev/pci-00:17.0/ahci/sata2/block
$ install-disk-image init-partition-tables --block-device /dev/pci-00:17.0/ahci/sata2/block
これでパーティションが作成されましたので、インストールを行います。
今度は、fuchsiaの開発環境を構築したマシンに戻り、ターゲットマシンにFuchsiaをインストールします。
$ fx pave
それなりにインストールの進捗が表示されて、以下のように表示されればインストールは完了です。USBメモリーは抜いてしまって問題ありません。
[bootserver] Transfer ends successfully.
[bootserver] Issued boot command to [fe80::96c6:91ff:fe13:b9c5]:33330
ちょっとわかりづらいので簡単にまとめると
・開発環境でイメージ作成
・起動用USBメモリーを作成
・デバイスをUSBメモリーで起動
・起動したデバイスに、開発環境からイメージを転送
ということをやっています。
起動画面は以下のような感じです。映り込みが見えるかもしれませんがご容赦ください。
「Timezone」がUTCになっていますが、これはクリック、もしくはキーボードで選択して「Asia/Tokyo」を選択することで変更できます。
アプリケーションの類があまりないようですが、一応「Simple Browser」を選択することでインターネットに接続できます。
フォントがないためと思われますが、日本語で表示されている部分がいわゆる「トーフ」状態になっています。
フォント自体は準備されているはずなので、将来的には「日本語フォント追加⇒Google 日本語入力」でなんとかなったりするのでは?と思っています。
というわけで、FuchsiaOSを実機に導入する記事でした。
キーボード、マウスの認識は問題なく、操作もできましたが、マウスに関しては操作が効かなくなることがしばしばありました。
また、現状は日本語フォントが入らずブラウザーで文字化けが見られたりと、もう一歩なところもあります。
そろそろ実際のデバイスにも搭載され始めているので、どこまで素人の遊びが通用するかわかりませんが、注視はしていきたいと思います。
なお、一応オフィシャルサイトにあるHello Worldのテストとかもやったんですが、結果が超絶地味なので掲載してません。もう少しビジュアル的にイケてるテストやデモがありそうであれば、またやってみたいと思います。
オマケです。
レビューというほどではないんですが、FuchsiaとLinuxのハイブリッドみたいなOSがリリースされているとのことなので、それだけちょっと試してみます。
基本的にはLinuxのいちディストリビューションです。Pangolinデスクトップという独自のGUIを備えています。Flutterを用いてアプリケーションが書かれています。
dahliaOS上の仮想マシンとコンテナーを管理するツールがあり、これにより既存のOSの古いアプリケーションをそのまま使ったり、FlutterアプリケーションをFuchsia用にポーティングするための環境もあったりするようです。
https://dahliaos.io/downloadsISOイメージが提供されているので、こちらをダウンロードしてインストールします。
仮想マシンの場合、最低2GBのメモリーでいいようです。
一応仮想ディスクも設定しますが、実際にはライブ動作しているようで、HDDへのインストール等はありません。
以下はLinux部分が起動した直後のスプラッシュスクリーンです。
起動後の画面です。
右上の「DEBUG」は、Fuchsia OSをデバッグモードでビルドした際に表示されるものと同じです。
見た目もよく動作も軽快ですが、アプリケーションの類はまだ十分に(デモ版のようなリリースなので)実装されていないようで、電卓やテキストエディター、コンソール等が使えるのみです。
上記はよくある電卓とテキストエディターです。
ウリであるGtaftという仮想マシン、コンテナ管理のアプリケーションも現状では動作せず、こちらもデモ版のような扱いのようです。Graftは起動させてもデモ画面的に表示されているだけで、実際に仮想マシンが動いているわけではありません。
画面右は右下をクリックした際に表示される設定パネルですが、こちらもすべてが動作するというわけではありません。
正直に言うと現状でFuchsia OSらしさがよくわからないのですが、Flutterで実装しているので GUI(Pangolin Desktop)はディストリビューションを選ばず使用可能、という話なので、まだまだこれからのOSなのかなと思います。
あとは当方が開発畑でないので、FImageを使ってのFuchsiaへのFluttreアプリのポーティングというのがどのくらいの有用なのかがわかっていないというのもありますが。
アプリケーションに見える部分はほかにもありますが「pre-Buildリリースなんで実装されてないもんもいっぱいあるでよ」のようなコメントが多く記載されているので、本当にこれからのOSですね。
Fuchsiaとのハイブリッド、あるいは既存OS、レガシーアプリケーションの実行が同時に可能な環境となれば非常に興味深いですが、売りのGtaft、Fimageあたりを触れたらまたトライしてみたいと思います。