Plan 9とGo言語のブログ

主にPlan 9やGo言語の日々気づいたことを書きます。

Plan 9

Goのコードを書きながらAcmeエディタの基本を覚えるチュートリアル

AcmeエディタはPlan 9のためにRob Pikeによってデザインされたエディタで、現在はUnixにも移植されています。慣れると非常に快適なんですが、既存のエディタとは操作感が全然違うので、初見では何をすればいいのか分からないとよく聞きます。なので、この記…

Gitで9legacyのパッチを管理する

9legacyは「ベル研Plan 9最終版からのパッチ集」という位置付けです。更新がある場合、基本的には新しいパッチが追加されていきますが、パッチにバグがあった場合などはパッチ自体が更新されることもあります。そのため、手元の環境にパッチを適用したあと、…

Goの型や関数定義を検索するコマンド

9fansを見ていると、Rob Pike氏が、Goの型定義や関数定義を検索するコマンドを紹介していた。 [9fans] Codebase navigation and using tags files in acme 実装 上記によるとコマンドは4つ。 bin/f カレントディレクトリにあるソースコードから関数定義をgre…

Plan 9 CのARGBEGIN、ARGENDマクロ

Plan 9のCは独自のライブラリを持っていて、stdio.hのようなANSIライブラリもAPE(ANSI/POSIX Environment)として存在してはいるが、基本的にはPlan 9独自のライブラリを使う方が好まれる。ANSI Cとの違いは挙げればいくつもあるのでPlan 9 Cを知らない人には…

Plan 9の権利がPlan 9財団に譲渡され、MITライセンスに変わりました

2021年3月23日に、ノキアから、Plan 9の著作権をPlan 9財団に譲渡する発表がありました。 www.bell-labs.com 翻訳はこちら。 okuranagaimo.blogspot.com 元々、AT&Tの一部門が独立してLucent Technologiesとなっていて、ベル研はそこに含まれていたけれども…

Plan 9におけるTLSの実装

Plan 9(9legacy)は、安定版のパッチを当ててもTLS_RSA_WITH_AES_128_CBC_SHA256までしか対応してなく、そろそろ古くなってきています。9frontはもっと強い暗号スイートに対応しているので、必要なものを移植しようと思いました。とはいえTLSについて詳しくな…

ベル研Plan 9を9legacyの安定版にアップデートする

従来のPlan 9公式サイトplan9.bell-labs.com/plan9は2020年現在、更新が停止しておりアクセスができません。代わりに、9p.io/plan9で最終更新日である2015年1月時点のデータがミラーされていて、Wikiやcontribソースコードなどベル研公式サイトが提供してい…

Plan 9はファイルをどのように使っているか

Plan 9は、ほとんどの操作をファイルを通して行います。リソースの参照だけではなく、シグナルの送信*1などカーネルに対して命令を送る場合も、ある程度はファイルを通して行えます。初見では、これらの習慣は馴染みがないと思うので、普段使いそうなものを…

Plan 9カーネルのIPルーティング

Plan 9カーネルがIPパケットをどうやってルーティングしているか調べた。Plan 9のネットワークプログラミングは少し癖があるので、まずカーネルが提供するファイルの使い方を整理する。 使い方 Plan 9でネットワークプログラミングを行う場合、一般的には/ne…

Plan 9を別の環境に移行する

この記事では、手元で動いているPlan 9環境をそのままGCPに移行する手順を紹介します。移行する一連のなかで、 Fossilだけで動いている環境にVentiを設定する VentiからFossilを復旧する といった、日本語だと情報があまりないものを扱います。移行先はGCPを…

Contribディレクトリにソースコードを公開する

2020年現在、ユーザが作成したPlan 9関連ソースコードの多くは9p.io/contribでホストされています。9p.ioは元々、ベル研の公式サイトが不安定だった頃に、ドキュメントやWikiが読めなくて困るので善意でミラーを行っていただけでしたが、公式が消滅してから…

Gitの認証情報管理にFactotumを使う

Gitは認証が必要なリポジトリにアクセスするとき、credential helperと呼ばれるコマンドを実行します。credential helperはただの標準入出力を扱うプログラムで、一般的には git-credential-xxx という命名になっています。おそらく以下のうちどれかをよく使…

Acmeエディタの使い方

この記事は本来Plan 9 Advent Calendar 2019の11日目でしたが、今は27日ですね、はい...すいません... Acmeエディタ、使ってみたけど何もわからないという声をよく聞くので、基本的な使い方を説明します。この記事ではplan9portのacmeを使うことを想定してい…

opencensus-goでPlan 9用のmackerel-agentを作っている話

この記事はMackerel Advent Calendar 2019の12日目です。 公式に提供されているmackerel-agentはGoで書かれていて、Windows、Linux、macOSなどに対応していますが、Plan 9には対応していません。個人のサーバはPlan 9が動作しているし良い機会なので、opence…

個人的によく眺めるPlan 9情報

この記事はPlan 9 Advent Calendar 2019の6日目です。 Plan 9関連の情報を集めるときに、個人的によく使う場所を紹介します。これらの他にも、DiscordコミュニティやIRCチャンネルなどもあるようですが、だいたい9fans眺めていれば済む気はします。 ML 9fans…

今から始めるPlan 9

この記事はPlan 9 Advent Calendar 2019の2日目です。 ベル研の公式ディストリビューションは、2015年1月に最後のメンテナだったGeoff Collyerさんが離職されたことにより、現在活動が停止していますが、代わりにコミュニティで派生したものがいくつかあり、…

Acidの使い方(基本)

AcidはPlan 9またはPlan9portで使えるデバッガです。おそらくAcidの用途で最も多いのは、suicide*1したプロセスをアタッチして、stk()やlstk()を使って落ちた様子をみてCtl-dで抜ける、ような使い方だと思いますが、Acidはこれ自体がシェルとCの中間みたいな…

Acmeをプログラムから操作する

Acmeは、Plan 9のために書かれたテキストエディタです。現在はPlan 9 from User SpaceでUnix環境にも移植されています。 このエディタはプログラムから操作するための機能がいくつか用意されていて、それを使うとキーボードやマウスなどの入力イベントを外部…

Plan 9 ANSI/POSIX環境での環境変数

Plan 9ネイティブのCライブラリはPOSIXに準拠しておらず、独自の習慣がある。例えばfopenやfcloseなどは使わずopenやcloseシステムコールを使う。バッファリングが必要であればBiobufを使いなさいという態度を取る。Goの標準パッケージに名残が残っているの…

GitをPlan 9に移植した話

2018年の夏頃から、時間をみつけてはPlan 9にGitを移植していて、概ね動いたので公開する。ソースコードはこの辺りにある。 https://github.com/0intro/plan9-contrib/pull/6 https://github.com/0intro/plan9-contrib/pull/7 https://github.com/madler/zli…

Plan 9のローダは先頭から順にシンボルを解決する

半年に1回は8lのエラーでハマっているので書いておこうと思いました。*1 こないだ curl をコンパイルしている時に、こういう設定を mkfile に入れました。 # リンクするライブラリのリスト LIB=\ /$objtype/lib/ape/libcurl.a\ /$objtype/lib/ape/libz.a\ /$…

Plan 9のCプリプロセッサを読んだ

Plan 9には cpp(1) というANSIに準拠したCプリプロセッサが用意されていますが、Plan 9標準のCコンパイラはコンパイラ自身が簡略化したプリプロセッサを持っているので基本的には使いません。ただし、Cコンパイラが持っているプリプロセッサは設計思想の影響…

Ventiディスクをオフサイトバックアップする方法[9fans]

この記事はQiitaで公開されていました [9fans]Venti off-site backupsより、Ventiストレージのバックアップを行う方法をメモ。最後は個人的によく使う方法。 venti/mirrorarenasでミラーリング plan9portに含まれているmirrorarenas(8)コマンドで以下のよう…

plan9portのsecstoreを秘密のメモとして使う

この記事はQiitaで公開されていました Plan 9 from User Spaceのsecstoreを使って秘密メモの扱いを便利にしました。 コマンドから秘密メモを扱いやすくなった ある程度安全に秘密メモをGit管理できるようになった 毎回パスワードを入れなくてもよくなった 動…

Unix-timeと日時の相互変換

この記事はQiitaで公開されていました Unixコマンドで日時の変換をする方法が、OSによって全然違うのでまとめました。 日時からUnix-timeへの変換 ローカル時刻からUnix-time 2015年12月1日(JST)をUnix-timeに変換するコマンドです。 macOS: $ date -v15y -v…

Plan 9とATS

この記事はTumblrで公開されていました これは2016年4月の記事です。現在9legacyのパッチは修正されています。 うまくいかないメモ とても混乱しているので記録する。 MacとiOSのMailアプリは、どちらもTLS 1.0までしか対応していない 未対応の暗号スイート…

GoとAlefとLimbo

この記事はQiitaで公開されていました GoとLimboは、一部のファンから、似ていると言われますので、そんなに似ているのか、実際に比較してみました。ついでに、この2つの言語は共通してAlefが先祖になりますので、Alefも含めます。 いちおうこの記事は、Go A…

Plan 9で知っておくと便利なこと

この記事はTumblrで公開されていました 9fansより 9fansに投稿された内容から、便利そうなものをまとめる。 rcのイディオム webfsなど、ctlを開きっぱなしにしたままで他のファイルを操作する時などに、<>{cmd}イディオムが便利。詳細はrc(1)のマニュアル。…

Plan 9カーネルの読み物

この記事はTumblrで公開されていました Plan 9 OSについて Introduction to Operating Systems Abstractions (pdf) 3rd edition頃のカーネルガイド Notes on the Plan 9 3rd edition Kernel Source (pdf) どこかにあったカーネルリーディングに関するコメント…

checked N page table entries

この記事はTumblrで公開されていました Plan 9を使っていると、たまに、 <pid> <command>: checked <n> page table entries というログがコンソールに出力される場合があります。これは、/sys/src/9/port/fault.cのcheckpagesが出力しているもので、checkpagesが呼び出しされ</n></command></pid>…