シリーズの紹介
最近、1つのコンソールユーティリティを配布する方法の問題に直面しましたか?
pip
、
npm
、
gem
などの私の通常のツールは、ユーティリティ自体の言語
bash
が原因で適合しませんでした。 その後、システムパッケージマネージャーを含め、アプリケーションを配布する必要があることが明らかになりました。 Macの場合、組み込み機能がないため、このようなパッケージマネージャーがいくつかあります。 そして、それぞれに独自の特徴と欠点があります。 そして、最初の部分では、
Homebrewについて詳しく説明し、そのためのパッケージを作成する方法を説明します。
さて、Linuxにアプリケーションをインストールするには、次の形式のパッケージを収集する必要があります:
.tar.gz
、
.deb
および
.rpm
。 第2部で説明します。
用語
まず、Homebrewの世界には特定の単語が十分にあるため、
条件に同意します。 記事では、あまりコミカルに見えないように、元の用語を使用します。 だから:
期間 | 説明 | 例 |
---|
フォーミュラ | パッケージ定義 | /usr/local/Library/Formula/foo.rb |
樽(樽) | Formulaをインストールするためのプレフィックス | /usr/local/Cellar/foo/0.1 |
optプレフィックス(プレフィックス) | KegのアクティブバージョンへのSimlink | / usr / local / opt / foo |
セラー(Cellar) | すべての樽がここにインストールされます。 | / usr / local /セラー |
タップ(クレーン) | Formulaまたはプラグインを備えた追加のリポジトリ | / usr / local /ライブラリ/タップ/ homebrew / homebrew-versions |
びん | 樽の組み立てバージョン | qt-4.8.4.mavericks.bottle.tar.gz |
Homebrewの仕組み
楽器のデバイス自体は無視することはできません;その
作成者の一人はそれ
について美しく
語りました:
Homebrewは、GitとRubyの2つのことに基づいています。 Homebrewを初めてインストールすると、 /usr/local
公式リポジトリのコピーが作成されます。 brew update
コマンドでHomebrewを更新するたびに、 git pull
が発生し、どの式が変更されたかが表示されます。 brew install
コマンドを使用して何かをインストールすると、Homebrewはアーカイブをダウンロードし(将来、ファイルはキャッシュから取得されます)、そのハッシュをチェックしてからインストールを実行します。 しかし、実際には、Formulaははるかに複雑になる可能性があります。依存関係、ロード機能(svn、ftpなど)を持つことができます。 また、Homebrewは、可能であれば、既に組み立てられたパッケージを提供します(ボットによって自動的に作成されます)。
独自の数式を作成する
すでにgithubに特定のリリースがあるとします(そうでない場合は、
git tag
を使用して
作成します )。 スクリプトの例に取り組みます。 数式を作成する最も簡単な方法は、
brew create https://github.com/sobolevn/git-secret/archive/v0.1.0.tar.gz
コマンド
brew create https://github.com/sobolevn/git-secret/archive/v0.1.0.tar.gz
を呼び出すことです:
後で
brew edit
コマンドを使用して、式を編集できます。
抽象クラス
Formula
*を継承するメインクラスに注意してください。 いくつかの重要な属性があります。
desc
* brew info git-secret
コマンドを実行するとユーザーに表示されるパッケージの説明homepage
* -アプリケーションページ、 brew home git-secret
コマンドで利用可能url
* -アプリケーションのソースコードをダウンロードするために使用されるリンク。ダウンロード戦略( :git, :svn
)およびその他のオプションを指定できますsha256
* -セキュリティパラメータ: url
リンクにリストされているファイルのハッシュ。誰かがリポジトリにアクセスしてファイルを置き換えた場合、インストールは機能しません。 別の結果:アセンブリを変更するたびに、ハッシュを更新する必要があります
オプション
インストール中にさまざまなオプション、オプションパッケージを追加するかどうか、アセンブリ時に設定するパラメーターなどを追加することが必要になる場合があります。 この場合、Homebrewには
option
*があり
option
。 これが
git.rb
*式のオプションの例だとしましょう:
オプションの例 option "with-blk-sha1", "Compile with the block-optimized SHA1 implementation" option "without-completions", "Disable bash/zsh completions from 'contrib' directory" option "with-brewed-openssl", "Build with Homebrew OpenSSL instead of the system version" option "with-brewed-curl", "Use Homebrew's version of cURL library" option "with-brewed-svn", "Use Homebrew's version of SVN" option "with-persistent-https", "Build git-remote-persistent-https from 'contrib' directory"
build.with? "option_name"
コンストラクト
build.with? "option_name"
コードから現在のオプションにアクセスするために使用されています
build.with? "option_name"
build.with? "option_name"
または
build.without? "option_name"
build.without? "option_name"
。
依存関係
アプリケーションには依存関係がある場合があります。それらには、
depends_on
*という特別なメソッドが
depends_on
ます 。 依存関係は、インストールのタイプとアクセサリの両方によって異なる可能性があることに注意することが重要です。システムパッケージに適合するのは式のみです。 いくつかのタイプの依存関係(インストール)があります。
- 標準、アプリケーションが機能するために必要
:build
-アセンブリ時にのみ必要:recommended
-デフォルトでインストールされ、 --without-foo
オプションが追加されます:optional
-デフォルトではインストールされませんが、自動的に--with-foo
オプションを追加します
依存関係の例 depends_on "jpeg" depends_on "gtk+" => :optional depends_on "readline" => :recommended depends_on "boost" => "with-icu" depends_on :x11 => :optional
Homebrewの一部では
ない依存関係の場合、特別な
resource
*ブロックがあり、これは
url
および
sha256
として宣言する必要があります。
「事前に荷物を梱包してください。」
Homebrewには、式を調べてボトルに集める素晴らしいボット
*があります。 収集することを伝えるために、特別な
bottle
*ブロックを使用します。ここでは、ダウンロードするURL、ファイルを保存するパス、およびMac OS Xのさまざまなバージョンの
sha256
パラメーターを指定できます。
びん bottle do root_url "https://example.com" prefix "/opt/homebrew" cellar "/opt/homebrew/Cellar" revision 4 sha256 "4921af80137af9cc3d38fd17c9120da882448a090b0a8a3a19af3199b415bfca" => :yosemite sha256 "c71db15326ee9196cd98602e38d0b7fb2b818cdd48eede4ee8eb827d809e09ba" => :mavericks sha256 "85cc828a96735bdafcf29eb6291ca91bac846579bcef7308536e0c875d6c81d7" => :mountain_lion end
または、
bottle :unneeded
を指定することもできます
bottle :unneeded
で、アセンブリは行われません。 ところで、正しいアセンブリを検証するために、優れたボットは、式に指定したテストを実行します。 それらについては以下。
リポジトリから最新バージョンをインストールします
head
*属性を使用すると、現在のブランチから直接最新バージョンをインストールできるように、リポジトリにリンクを追加できます(
:branch
パラメーターを使用して決定できます)。 この方法で式を設定するには、
brew install --HEAD $formula
を使用
brew install --HEAD $formula
必要があります。
数式のインストールプロセス
ここで、メインメソッド
install
*について説明します。これは、インストールに必要なコマンドを実行します。 基本的には、
Kernel#system
*を使用したシステムコマンドの呼び出しを利用します。 ここで、設定のためにスクリプトに渡すことができる変数の特別な値について言及する必要があり
ます 。それらは
参照により利用可能です。
ユーザーとのコミュニケーション
メッセージを表示するには
*特別な機能があります:
- 一般情報については
ohai
- 警告の
opoo
- エラーメッセージと即時終了の
odie
インストールに成功した後、または
brew info $formula
コマンドを実行したときに、パッケージに関するあらゆる種類の詳細をユーザーに書き込む
caveats
*メソッドもあります。
設置テスト
ポイントは小さい:公式が確立されているかどうか、組み立てられているかどうかを確認します。 Homebrewで
正しい動作を
確認するために 、特別な
test
ブロックがあります。 サンドボックス内で実行され、実行された場合、式は正しくアセンブルされたと見なされます。 作成者自身が言うように、
test
ではバージョンのみをチェックしても構いません。 主なことは、プログラムが集まったことです。 しかし、テストがより確実に合格すればより良いでしょう。 これは機能をテストするのではなく、アセンブリのみをテストすることを理解することが重要です。 テストの
例を次に示します。
試験例 test do (testpath/".zshrc").write "source `brew --prefix`/share/antigen.zsh" system "/bin/zsh", "--login", "-i", "-c", "antigen help" end
テストをローカルで呼び出すには、
brew test $formula
コマンドを使用します。
フォーミュラは世界へ
それだけです、私たちの式はほとんど準備ができています! ここで、Homebrewの内部チェックに合格することを確認する必要があります
brew audit --strict --online $formula
を実行します。 エラーがなければ、続行します。 その場合、編集します。 変更する必要があるものはすぐに教えてくれます。 これで、公式はオープンワールドに移行する準備ができました。 そして、オープンな世界から、式を設定するいくつかの方法があります:
それぞれについての詳細。
公式のHomebrewリポジトリに式を注ぎます
難しい方法。 私たちの式
は、受け入れられるためにHomebrewの
多くの要件を満たさなければなりません。 それらのいくつかを次に示します。
- 重複ではありません。 ここでは、メインリポジトリだけでなく、公式のTapについても説明しています。
- アプリケーション自体を更新しないでください
- インストール中に何もダウンロードしないでください
- 数式には安定したバージョンがあります。
- 数式は
gem
またはpip
介してアクセスできません - 公式は人々に知られており、サポートされています。ホームページが必要です。
- 彼女は
.app
収集しません。そのような式はCask
配置されます
しかし、著者によると、
例外があります。
数式が適切な場合は、公式リポジトリにアップロードする必要があります。 プロジェクトに参加するための
公式ガイドでは、Pull-Requestの作成方法を詳しく説明しています。微妙な点やルールがたくさんあります。
それが収まらない場合、または意図的にそこに送信したくない場合は、タップを作成する必要があります。
独自のタップを作成する
タップ
*は、基本的に、独自の数式を保存する単なるリポジトリです。 Tapを作成するには、接頭辞
homebrew-
を使用してgithubにリポジトリを作成します。 例:
homebrew-mytap
数式自体は、ルートまたは
Formula
フォルダー(または
HomebrewFormula
)にあります。 数式を設定するには、最初の2つの方法があります。
brew tap <your-github-username>/mytap
リポジトリのローカルコピーを作成しますbrew install $formula
インストールします
または1つのコマンド:
brew install <your-github-username>/mytap/$formula
これはまずbrew <your-github-username>/mytap
してから、 install
コマンドを呼び出します
できた!
おわりに
Homebrewのいくつかの重要な機能を何度も一目見ようとしました。 もちろん、パッチ、コンパイラーの選択、独自のロード戦略の作成、
Python、Ruby(およびその他の)プログラムで作業する際の多くの微妙な点などのトピックは、「脇に置いておく」ことはできません。ボックス。」 しかし、希望する人は、公式ドキュメントの関連記事にいつでも慣れることができます。
Homebrewは非常に高品質のAPIを提供するため、数式の作成は非常に簡単です。 Rubyを知らなくても、すべてがすぐに判明するはずです。
これは私が得た
ものです。