Go Wiki: Plan 9 上の Go

はじめに

Go の実験的な移植版が、Plan 9 from Bell Labs オペレーティングシステムで利用可能です。

サポートされているアーキテクチャ

Plan 9 への Go の移植版は、以下のアーキテクチャで利用可能です

サポートされているカーネル

現在の Go ディストリビューションは、以下で正常にテストされています

要件

Plan 9 上の Go には、以下のシステムコールを提供するカーネルが必要です

pread システムコールの修正が必要です。ファイルを読み取るときに、pread がチャネルオフセットを更新しないようにするためです

TCP 接続制御ファイルは、「close」メッセージを処理して TCP 接続を正常に閉じ、リーダーをウェイクアップできるようにする必要があります

wstat の後に Qid.vers をインクリメントするために Fossil の修正が必要です。そのため、切り捨て後に読み取りを行うと、キャッシュされたコンテンツではなく、新しいファイルのコンテンツが返されます。

X.509 証明書で SHA-2 署名をサポートする必要があります。そのため、GoogleSource、GitHub などでホストされているリポジトリからソースをダウンロードできます。

Raspberry Pi で Plan 9 を実行している場合は、Richard Miller の最新の bcm カーネルが必要です。

crypto/x509 パッケージの CA 証明書は、/sys/lib/tls/ca.pem にインストールする必要があります。https://curl.haxx.se/ca/cacert.pem からダウンロードするか、別のシステムからコピーできます。

9front の場合、標準ライブラリテストのためにループバックアドレスを設定する必要がある場合があります

ip/ipconfig -P loopback /dev/null 127.1
ip/ipconfig -P loopback /dev/null ::1

インストール

Go は Go で書かれているため、C で書かれた Go の最新リリースである Go 1.4.3 で Go をブートストラップすることをお勧めします。

ただし、Go 1.4 ランタイムは Plan 9 では十分に成熟していなかったため、別のオペレーティングシステムを使用して、より新しいバージョンの Go からブートストラップすることをお勧めします。

Plan 9 からのブートストラップ

まず、Go 1.4 をインストールします

cd /tmp
git clone -b go1.4.3 https://go.googlesource.com/go go1.4
cd go1.4/src
hget http://9legacy.org/go/patch/syscall-exec.diff | ape/patch -p2
make.rc

SMP 対応のマシンを実行している場合は、syscall-exec パッチが必要です。

次に、GOROOT_BOOTSTRAP 環境変数を設定します

GOROOT_BOOTSTRAP=/tmp/go1.4

最後に、最新バージョンの Go をインストールします

cd /tmp
git clone https://go.googlesource.com/go
cd go/src
all.rc
bind -a /tmp/go/bin /bin

これで Go を使用できるようになりました。

別のオペレーティングシステムからのブートストラップ

まず、Go インストール手順に従って、このオペレーティングシステムに Go をインストールしておく必要があります。

次に、Plan 9 用の Go ツールチェーンをクロスコンパイルできます

cd $GOROOT/src
GOOS=plan9 GOARCH=386 ./bootstrap.bash

すると、ブートストラップツールチェーンが ../../go-plan9-386-bootstrap.tbz で利用可能になります。

最後に、このアーカイブを Plan 9 マシンに抽出できます。

例えば

cd /tmp
tar xzf go-plan9-386-bootstrap.tbz
bind -a /tmp/go-plan9-386-bootstrap/bin /bin

これで Go を使用できるようになりました。

GOROOT_BOOTSTRAP 環境変数を設定することで、この Go のインストールを使用して将来の Go リリースをブートストラップできます

GOROOT_BOOTSTRAP=/tmp/go-plan9-386-bootstrap

バイナリからのブートストラップ

plan9/386 用の バイナリパッケージ が利用可能です。

このバイナリパッケージは、plan9/386 ビルダで Go をブートストラップするために使用されます。

cd /tmp
hget -o gobootstrap-plan9-386.tar.gz https://storage.googleapis.com/go-builder-data/gobootstrap-plan9-386.tar.gz
mkdir gobootstrap-plan9-386
cd  gobootstrap-plan9-386
tar xzf ../gobootstrap-plan9-386.tar.gz

GOROOT_BOOTSTRAP 環境変数を設定することで、この Go のバイナリパッケージを使用して Go をブートストラップできます

GOROOT_BOOTSTRAP=/tmp/gobootstrap-plan9-386

他のバイナリパッケージは、こちらこちら で入手できます。

Git

Git は Plan 9 では利用できません。ただし、Git ラッパー がシンプルな rc スクリプトとして利用可能です。go ツールを使用するために必要なものがすべて含まれています。

ビルダ

現在、3 つの Plan 9 ビルダが稼働しており、Go ダッシュボード に結果を報告しています

ステータス

Plan 9 への Go の移植は実験的と見なされており、まだ開発中です。Go イシュートラッカー には、既知の問題が多数あります。

問題

Go イシュートラッカー には、OS-Plan9 ラベルが付いた問題が現在多数開かれています。

ヘルプ

Plan 9 への Go の移植は、コミュニティ主導の移植です。Plan 9 上の Go ポートの改善にご協力いただければ幸いです。

メンテナ

多くの人が Plan 9 への Go の移植に貢献してきました。2013 年 12 月以降、Plan 9 への Go の移植は David du Colombier によって維持されています。

トリビア

Go の多くの部分は、3 人の主要設計者のうち 2 人が Bell Labs で Plan 9 に携わっていたため、Plan 9 システムから直接影響を受けています。これらのつながりのいくつかは次のとおりです


このコンテンツは Go Wiki の一部です。