私はパッケージ(rpm、deb、dpkg)の生成がどのように機能するのか、アーキテクチャが何をサポートしていないのかを理解しようとしています。
これで、プロセスのさまざまな時点でパッケージのインストールまたはアップグレードが失敗したときに何が起こるのかを把握することが困難になりました。言い換えれば、スクリプトエラー、ディスク容量不足(起動する前に確認しましたか?) - 。
現在の理解によると、以前の作業バージョンへの自動ロールバックはまったくありません。だから私の質問は、パッケージがこの状況をどのように処理するかです。単にファイルをバックアップしてトランザクションが発生した後にエラーが発生した場合は、復元するためのスクリプトではありませんか? (これまでは例が見つかりません)
ありがとうございます。
答え1
Debian(通常は派生)の場合、これは次のとおりです。管理者スクリプトに関する Debian ポリシーの章そして対応するフローチャート。エラーはdpkg
(パッケージ抽出などを処理するツール)とメンテナンススクリプトの組み合わせで処理されます。
パッケージをアップグレードする場合:
- 既存のパッケージに対するプリアンインストールスクリプトの呼び出し
- 新しいパッケージのプレインストールスクリプトは次のとおりです。
- 新しいパッケージのファイルが解凍されました。
- 既存のパッケージに対するアンインストール後のスクリプト呼び出し
- 既存のパッケージのファイルが削除されます。
- 新しいパッケージのインストール後にスクリプトを呼び出します。
いつでもエラーが処理され、「アンドゥ」パラメータを使用してさまざまなメンテナンススクリプトが呼び出され、前の手順で行った変更を元に戻します。最終的に、パッケージは次の状態のいずれかになります。
- 新しいバージョンのフルインストール(すべてが順調に進む場合)
- 既存のバージョンに完全にインストールされます(何か問題が発生してもすべての変更をキャンセルできる場合)。
- 解凍され、構成が必要
- 失敗しました。再インストールする必要があります。
多くのパッケージでは、管理者スクリプトの助けを借りずに基本的な処理で十分です。他のパッケージははるかに複雑です。例えばバージョン間でデータベースとスキーマが変更されたバージョン(参照管理者slapd
スクリプトたとえば、場合によっては、実際に中断されたアップグレードを独自に処理せず、代わりに既存の状態のバックアップを残して管理者にトラブルシューティングを依頼します。