残念ながら、
OS Infernoに追加のソフトウェアを配布およびインストールするための組み込みのメカニズムはありません。
Limboまたは本格的なアプリケーション用のモジュールを作成し、それを共有したい場合、その配布にはいくつかのオプションがあります。
- ファイルを任意のサイトに配置するだけで、ユーザーはいつでもどこでも手動でシステムにインストールできます。
/appl/
標準モジュールおよびアプリケーションで使用されるものと同じmkfile / mkconfigファイルを使用します
ご理解のとおり、最初のオプションは実際にはオプションではありません。 :)これは洞窟への帰還です。 2番目のオプションは、たとえば、
mjlリポジトリ内
のすべてのソフトウェアに使用され
ます 。 しかし、このアプローチには、結果としてファイルがシステムディレクトリ
/dis/
、
/module/
などに単純にコピーされるという事実に起因する不快な制限もあります。 (
/appl/
からの標準モジュールとアプリケーションと同様):
- * nixがホストOSとして使用され、Infernoがシステム全体のルートまたはディストリビューションのパッケージマネージャーとしてインストールされている場合、追加モジュール/アプリケーションをインストールするためにルートモジュール(ホストOS上の
sudo mk
またはsudo emu
およびネイティブmk
)のインストールが必要になります - これらのモジュール/アプリケーションの修正バージョンをアプリケーションに使用する場合、グローバルインストールは不便です
- 異なるアプリケーションが同じモジュールの異なるバージョンを必要とする場合、グローバルインストールは不便です(mjlは従来の* nixの方法でメジャーバージョン番号をモジュール名に追加することでこの問題を解決します。これは非常にエレガントではなく、「util0.m」
- アンインストールは重要な操作に変わり、最終的にはシステムディレクトリが乱雑になります
- 異なる開発者のモジュール/アプリケーションの名前が競合する可能性があります(ただし、この問題は* nix / winに存在し、
/dis/
および/module/
サブディレクトリを使用して開発者または彼のサイトの名前でバイパスできます)
DJBの
slashpackageに基づいた代替アプローチを提案したいと
思います。
更新:このアプローチは最近インフェルノ開発者によって採用されたため、すでに公式ではなく公式と見なすことができます。 :)
ディレクトリ構造
- すべてのサードパーティソフトウェア
/opt/
グローバルカタログを作成します。 更新:ディレクトリは、現在のバージョンのinfernoに既に存在します。 - 各開発者/組織の個別のサブディレクトリは
/opt/
作成され、各モジュール/アプリケーションのサブディレクトリは異なる開発者間の名前の競合を回避するために作成されます(例: /opt/powerman/hashtable/
)。 - モジュール/アプリケーションのあるディレクトリに、システムディレクトリと同様のディレクトリ構造が作成されます。
dis/
dis/lib/
module/
appl/cmd/
appl/lib/
- など 必要に応じて
このアプローチを使用するすべてのサードパーティモジュール/アプリケーションは、
/opt/
ディレクトリ内のファイルおよび他の非標準モジュール/アプリケーションのファイルを探す必要があります。
パッケージ管理
設置
このアプローチでは、新しいモジュール/アプリケーションをシステム全体として(つまりルートから)インストールするには、1つのコマンドで十分です! たとえば、モジュール/アプリケーションが
Google Codeの Mercurialリポジトリにアップロードされた場合:
通常のユーザーとしてローカルにインストールするには、2つのコマンドが必要です(ユーザーのホームディレクトリにopt / powerman /サブディレクトリが事前に作成されていることを前提としています。
$ hg clone https://inferno-contrib-hashtable.googlecode.com/hg/ opt/powerman/hashtable ; bind opt /opt
実際には、リポジトリのコンパイル済み.disファイルが
dis/
および
dis/lib/
サブディレクトリに既に含まれており、このアプローチでは、モジュール/アプリケーションのディレクトリを
/opt/
にコピーした後
/opt/
その.disファイルは自動的に正確に表示されます「インストール」の後でなければなりません。
特定のバージョンの選択/変更されたバージョンの使用
アプリケーションがデフォルトで
/opt/
あるサードパーティのモジュール/アプリケーションの間違ったバージョンを使用するには、アプリケーションを起動する前に
/opt/
に必要なバージョンを接続するだけで十分です(そしてInfernoの名前空間のおかげで作業に影響しませんデフォルトバージョンのみが必要な他のアプリケーション):
; bind ./my-modified-hashtable/ /opt/powerman/hashtable/ ; ./my-app
(再)パッケージアセンブリ
コンパイルしてインストールするには(たとえば、モジュール/アプリケーションのサードパーティコードにローカル変更を加えた場合)、そのディレクトリで
mk install
を実行します(たとえば、
/opt/powerman/hashtable/
)。 この場合、コンパイルされたdis-filesは、このモジュール/アプリケーションの
dis/
サブディレクトリにインストールされます。
更新する
パッケージの配布方法によって異なりますが、一般的には1つまたは2つのコマンドになります。 たとえば、同じMercurialの場合、通常の結果になります
$ hg pull $ hg update
opt/powerman/hashtable/
ディレクトリにあります。 同時に、リポジトリを含むリポジトリから取得されます。
opt/powerman/hashtable/dis/
powerman
opt/powerman/hashtable/dis/
hashtable
opt/powerman/hashtable/dis/
.disファイルを更新しました。これは基本的にパッケージの更新になります。
アンインストール
どこも簡単です。 これがどのように行われるかはすでに推測していると思いますが、これを書く喜びを否定することはできません。
; rm -r /opt/powerman/hashtable
インストールされているサードパーティソフトウェアのリストを取得する
; ls /opt/*
パッケージに含まれるファイルのリストを取得します
ああ、これはデータベースがまったくない複雑な操作です-rpm / apt / portageより悪いことは何ですか? :)
; fs print /opt/powerman/hashtable/
これらのモジュール/アプリケーションの使用
ご覧のとおり、ユーザーがこのようなパッケージを管理するのは本当に簡単で便利です。 次に、それらの使用方法を見てみましょう。
用途
; /opt/powerman/retrymount/dis/retrymount
長い? sh関数を使用して短縮できます(プロファイルで関数定義を1回定義します)。
; fn retrymount { /opt/powerman/retrymount/dis/retrymount $* } ; retrymount
更新:別の方法を以下で説明します。/opt/setup.shを参照してください。
モジュール
include "opt/powerman/hashtable/module/hashtable.m"; load HashTable HashTable->PATH;
これは、モジュールがローカルにインストールされている場合、つまりすぐに動作します。
opt/
サブディレクトリへ。 モジュールが
/opt/
グローバルにインストールされている場合、ネイティブlimboの場合は追加オプション
-I/
を使用してlimboを実行するか、ホストOSからlimboを起動するときに
-I$INFERNO_ROOT
を実行する必要があります。 これは、たとえばネイティブリンボ用に1回設定することもできます。
; fn limbo { builtin limbo -I/ $* }
これらのモジュール/アプリケーションの開発
/opt/
インストールされたパッケージを作成するには、いくつかの簡単なルールに従う必要があります。
module / hashtable.mファイル:
PATH: con "/opt/powerman/hashtable/dis/lib/hashtable.dis";
appl / {lib、cmd} / *。bファイル:
include "../../module/hashtable.m"; load HashTable HashTable->PATH;
mkfile:
すべてのパスは相対です。たとえば:
MODULES=\ ../../module/hashtable.m\ DISBIN=../../dis/lib
/opt/setup.sh
更新!サードパーティのモジュールとアプリケーションを使用する別のオプションは、bind from
/opt/
を使用して標準ディレクトリに接続することです。 これを簡単かつ普遍的に行う方法はまだ完全には明らかではありませんが、部分的な解決策があります。 以下に示すスクリプト(通常は
/opt/setup.sh
保存し
/opt/setup.sh
)は、
/opt/*
すべてのコマンドとmanページを
/dis/
および
/man/
ます。 したがって、
/opt/powerman/retrymount/dis/retrymount
などの完全なパスを使用せずに、名前だけでコマンドを実行し、標準ツールを使用してサードパーティのアプリケーションとモジュールのドキュメントを
/opt/powerman/retrymount/dis/retrymount
ます。
Update2!上記の
/opt/setup.sh
の改良バージョンが、
inferno-opt-setupプロジェクトとして利用可能になりました。 この機能は、
/opt/setup/cmd
と
/opt/setup/man
2つのスクリプトに分かれてい
/opt/setup/man
。これらは独立して使用できます。
さらに、標準のものと同様のmkfileの選択が、/ opt-projectsでの作業をサポートし、/ opt-modulesを使用するか、/ opt:
inferno-opt-mkfiles自体にインストールされる場合、プロジェクトでの使用を推奨します。
例
このスタイルで記述されたいくつかの簡単なモジュール/アプリケーションは
、Google Codeで「inferno contrib」を検索すると見つかり
ます 。
更新: / opt-projectの例が、プロジェクトのクイックスタート用のテンプレートとして使用するために投稿されました:
inferno-opt-skel 。
参照資料
ロシア語の説明LimboOS Infernoのロシア語wiki、ドキュメントの翻訳