OS Inferno用のソフトウェアの展開

残念ながら、 OS Infernoに追加のソフトウェアを配布およびインストールするための組み込みのメカニズムはありません。 Limboまたは本格的なアプリケーション用のモジュールを作成し、それを共有したい場合、その配布にはいくつかのオプションがあります。
  1. ファイルを任意のサイトに配置するだけで、ユーザーはいつでもどこでも手動でシステムにインストールできます。
  2. /appl/標準モジュールおよびアプリケーションで使用されるものと同じmkfile / mkconfigファイルを使用します

ご理解のとおり、最初のオプションは実際にはオプションではありません。 :)これは洞窟への帰還です。 2番目のオプションは、たとえば、 mjlリポジトリすべてのソフトウェアに使用されます 。 しかし、このアプローチには、結果としてファイルがシステムディレクトリ/dis//module/などに単純にコピーされるという事実に起因する不快な制限もあります。 ( /appl/からの標準モジュールとアプリケーションと同様):

DJBのslashpackageに基づいた代替アプローチを提案したいと思います。 更新:このアプローチは最近インフェルノ開発者によって採用されたため、すでに公式ではなく公式と見なすことができます。 :)

ディレクトリ構造


  1. すべてのサードパーティソフトウェア/opt/グローバルカタログを作成します。 更新:ディレクトリは、現在のバージョンのinfernoに既に存在します。
  2. 各開発者/組織の個別のサブディレクトリは/opt/作成され、各モジュール/アプリケーションのサブディレクトリは異なる開発者間の名前の競合を回避するために作成されます(例: /opt/powerman/hashtable/ )。
  3. モジュール/アプリケーションのあるディレクトリに、システムディレクトリと同様のディレクトリ構造が作成されます。
    • dis/
    • dis/lib/
    • module/
    • appl/cmd/
    • appl/lib/
    • など 必要に応じて

このアプローチを使用するすべてのサードパーティモジュール/アプリケーションは、 /opt/ディレクトリ内のファイルおよび他の非標準モジュール/アプリケーションのファイルを探す必要があります。

パッケージ管理


設置

このアプローチでは、新しいモジュール/アプリケーションをシステム全体として(つまりルートから)インストールするには、1つのコマンドで十分です! たとえば、モジュール/アプリケーションがGoogle Codeの Mercurialリポジトリにアップロードされた場合:
 # hg clone https://inferno-contrib-hashtable.googlecode.com/hg/ $INFERNO_ROOT/opt/powerman/hashtable 

通常のユーザーとしてローカルにインストールするには、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ます。
 #!/dis/sh -n load std for d in /opt/*/man/* /opt/*/*/man/* { or {ftest -d $d} {raise continue} n := `{basename $d} bind -b $d /man/$n } for d in /opt/*/dis/* /opt/*/*/dis/* { or {ftest -d $d} {raise continue} n := `{basename $d} and {~ $n lib} {raise continue} and {~ $n cmd} {n=''} bind -b $d /dis/$n } 

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

参照資料


ロシア語の説明Limbo
OS Infernoのロシア語wiki、ドキュメントの翻訳

Source: https://habr.com/ru/post/J87460/


All Articles