
--dry-run
複数の依存関係を持つシステム用のインストール スクリプトを作成しようとしており、実際のインストールを実行する前にパッケージ マネージャー (apt
この場合は Ubuntu)を使用する方法を理解しました。
ただし、パッケージをインストールした後、特定の構成ファイルをコピーする必要があります。インストールをコミットする前に、宛先が利用可能であることを確認するには、どうすればよいでしょうか?
スクリプトを実行して部分的にインストールし、システムを予測できない状態にしたくはありませんが、関連するパッケージが存在しない場合は、確認する構成ディレクトリも存在しません。
base.conf
をにコピーしたいが/etc/package/system/
、/etc/package/
が存在しないとします。コピー先が誤って構成されている場合 ( と誤って綴られているなどsytem
)、コピー中にパッケージをインストールした後にエラーが発生します。これは、すでにコピーされている複数の構成ファイルの 1 つである可能性があるため、いわゆる「ロールバック」する方法はありません。私の最終目標は、部分的にコピーされたファイルを残さないインストール プロセスを実現することです。
失敗のシナリオは、複数のファイルをコピーする必要がある場合です。コピーするファイルが 3 つあり、3 番目のファイルのコピー先が誤って構成されている場合、最初の 2 つのファイルはコピーされますが、3 番目のファイルでエラーが発生します。残りのファイルにより、次回の実行時にさらにエラーが発生します。
PS: 依存関係を処理するために実際のパッケージを作成する必要があるのではないかと考えていますが、複雑さと必要な時間が大幅に増加するため、現時点ではそれに投資したくありません。
答え1
パッケージをダウンロードしなくても、事前にパッケージの内容を調べることができます。seeapt-file
とそのlist
コマンドを参照してください。
しかし、これでは完全な状況は得られません。また、任意のパッケージをインストールせずに、そのパッケージによって行われた変更の完全な状況を把握することはできません。パッケージには、追加の変更を実行するメンテナ スクリプトが含まれている場合があります。つまり、パッケージは、パッケージのメタデータから明らかではないディレクトリを作成できるということです。メンテナ スクリプトを分析し、そのすべての副作用とパッケージの依存関係を考慮に入れることでのみ、そのディレクトリを見つけることができます。
あなたのシナリオでは、2 段階のアプローチが必要になると思われます。
- パッケージ管理システムを使用して、必要なすべてのパッケージをインストールします。
- 結果として得られるディレクトリレイアウトとインストールされたファイルに関する期待をすべて確認し、
- 期待どおりであれば、追加ファイルをすべて所定の場所にコピーします。
- そうでない場合は、インストールしたすべてのパッケージを削除します (
--autoremove
自動的にインストールされた依存関係も削除されます)。