web-dev-qa-db-ja.com

Debianパッケージのプレインストールスクリプトでapt-getコマンドを実行することは可能ですか?

公式リポジトリにはないいくつかの依存関係を持つDebianパッケージを作成しています。これらの他のパッケージを依存関係として指定するだけでは、apt-get updateを実行し、ソースリポジトリ(私のものではない)を/etc/apt/sources.list.dに追加するだけなので、それを削減することはできません。

詳細:これらのパッケージの1つはDart言語SDKです-これは、debを取得してdpkgを使用するか、Googleのリポジトリの1つを追加することによってのみインストールできます。私の目標は、パッケージのインストールに含まれるステップ数を最小限に抑えることと、クリーンなパッケージの展開との間のバランスを見つけることです。

そのため、パッケージのインストール前スクリプトでこれらのソースを追加してからapt-get updateを実行したいのですが、主な問題は、パッケージを開いてインストールすると、dpkgがロックされることです。それで、私が直接求めていることを達成することは可能ですか、または他にどのようなオプション/回避策がありますか?

4
Crunchex

直接可能だとは思いません。

しかし、どういうわけか、ユーザーはパッケージをインストールしました。まだ追加されていないため、リポジトリからではないようです。したがって、私が提案する最初の回避策は、通常の方法で行うことです。ユーザーにリポジトリを追加してもらい(または、ユーザーに簡単なシェルスクリプトを提供して)、通常どおりパッケージをインストールします。これが私の推奨する解決策であり、シェルスクリプトの実行はパッケージのインストールよりも難しくありません。

2番目の回避策:パッケージをセットアップパッケージにするだけです。リポジトリをセットアップしてもらい、ユーザーに(たとえば、debconf noteまたは画面上の他のプロンプトを介して)実際のパッケージ(リポジトリから取得される)をインストールするように指示します。

3番目の回避策:同じセットアップパッケージですが、リポジトリで同じパッケージ名を使用します。バージョンが高くなります(おそらくエポックを使用します)。したがって、最初のインストールでリポジトリがセットアップされ、次にapt upgradeまたは同様のものが実際のパッケージをプルします。

4番目:これが良い考えかどうかはわかりませんが、postinstで、dpkgロックを待機するバックグラウンドプロセスを起動してから、インストールを完了します。 atまたはbatchはこれで機能すると思いますが、通常の/path/to/script &の後にdisownが続きます。パッケージのインストールがバックグラウンドで終了することをユーザーに通知することをお勧めします。

PS:おそらくGPGキーも追加する必要があります。

6
derobert